J'utilise une transformation BoxCox pour améliorer la précision de ma régression linéaire multiple. Je transfère mes formules de JMP vers Excel en Python. J'ai du mal à comprendre comment JMP effectue les transformations BoxCox. Lorsque j'exécute le calcul manuellement ou que je le transfère vers Python puis Excel, j'obtiens des résultats très erronés, voire impossibles. Comment JMP effectue-t-il la transformation BoxCox ? Y a-t-il un oubli dans l'exportation de la formule Python ? Vous trouverez ci-joint le code d'exportation Python de JMP. Lorsque je le calcule manuellement, j'obtiens un nombre de plusieurs millions, mais lorsque j'utilise la formule prédite de la colonne d'enregistrement, j'obtiens un nombre correct de plusieurs centaines de milliers. Toute aide ou information sur la façon dont JMP effectue la transformation BoxCox serait la bienvenue ! JMP Pro 18.
def getModelMetadata():
return {"creator": u"Fit Least Squares", "modelName": u"", "predicted": u"BoxCox(Sold Price Adjusted,-0.3)", "table": u"Nation 5", "version": u"18.0.2", "timestamp": u"2025-06-30T15:25:18Z"}
def getInputMetadata():
return {
u"Acres": "float",
u"Approx Living Area": "float",
u"Baths Total": "float",
u"Beds Total": "float",
u"DSS": "float",
u"Garage Spaces": "float",
u"Private Pool YN": "float",
u"Quality": "float",
u"Roof Type": "str",
u"View Type": "str",
u"YSB": "float",
u"Zip Code": "str"
}
def getOutputMetadata():
return {
u"Pred Formula BoxCox(Sold Price Adjusted,-0.3)": "float"
}
def score(indata, outdata):
outdata[u"Pred Formula BoxCox(Sold Price Adjusted,-0.3)"] = 61472780.2409559 + 60581.3260155158 * indata[u"Acres"] + 76.038924975424 * indata[u"Approx Living Area"] + 1434.15365470938 * indata[u"Baths Total"] + 9999.1641409011 * indata[u"Beds Total"] + 86.4673966716914 * indata[u"DSS"] + -15193.2763707411 * indata[u"Garage Spaces"] + -4868.56832700296 * indata[u"YSB"] + -0.000111820060662331 * jmp_score.pow(max((-2377.5 + indata[u"Approx Living Area"]), 0), 3) + 0.000218413512113602 * jmp_score.pow(max((-2084.375 + indata[u"Approx Living Area"]), 0), 3) + -0.0000481979741763377 * jmp_score.pow(max((-1791.25 + indata[u"Approx Living Area"]), 0), 3) + -0.000111564345338805 * jmp_score.pow(max((-1498.125 + indata[u"Approx Living Area"]), 0), 3) + 0.0000531688680638719 * jmp_score.pow(max((-1205 + indata[u"Approx Living Area"]), 0), 3) + 0.0000360479302007263 * jmp_score.pow(max((-720 + indata[u"DSS"]), 0), 3) + -0.000303707412501711 * jmp_score.pow(max((-548.375 + indata[u"DSS"]), 0), 3) + 0.000574533492998107 * jmp_score.pow(max((-376.75 + indata[u"DSS"]), 0), 3) + -0.000382136469293987 * jmp_score.pow(max((-205.125 + indata[u"DSS"]), 0), 3) + 2.0848630376972 * jmp_score.pow(max((-54 + indata[u"YSB"]), 0), 3) + -6.78318277799419 * jmp_score.pow(max((-40.75 + indata[u"YSB"]), 0), 3) + 0.0000752624585968641 * jmp_score.pow(max((-33.5 + indata[u"DSS"]), 0), 3) + 11.8037791782328 * jmp_score.pow(max((-27.5 + indata[u"YSB"]), 0), 3) + -11.5974621732718 * jmp_score.pow(max((-14.25 + indata[u"YSB"]), 0), 3) + 34307.817288351 * jmp_score.pow(max((-4 + indata[u"Beds Total"]), 0), 3) + -82471.0545165041 * jmp_score.pow(max((-3.75 + indata[u"Beds Total"]), 0), 3) + 110181.894396108 * jmp_score.pow(max((-3.25 + indata[u"Beds Total"]), 0), 3) + 50990.021304843 * jmp_score.pow(max((-3 + indata[u"Baths Total"]), 0), 3) + -62018.6571679552 * jmp_score.pow(max((-3 + indata[u"Beds Total"]), 0), 3) + 6900.66685733204 * jmp_score.pow(max((-3 + indata[u"Garage Spaces"]), 0), 3) + -203976.475578522 * jmp_score.pow(max((-2.75 + indata[u"Baths Total"]), 0), 3) + 379069.565502919 * jmp_score.pow(max((-2.5 + indata[u"Baths Total"]), 0), 3) + -1826.25048644381 * jmp_score.pow(max((-2.5 + indata[u"Garage Spaces"]), 0), 3) + -350169.789489644 * jmp_score.pow(max((-2.25 + indata[u"Baths Total"]), 0), 3) + 124086.678260404 * jmp_score.pow(max((-2 + indata[u"Baths Total"]), 0), 3) + -22123.9159699968 * jmp_score.pow(max((-1.5 + indata[u"Garage Spaces"]), 0), 3) + 17049.4995991085 * jmp_score.pow(max((-1 + indata[u"Garage Spaces"]), 0), 3) + 4.49200273533602 * jmp_score.pow(max((-1 + indata[u"YSB"]), 0), 3) + -12639560.8157951 * jmp_score.pow(max((-0.344 + indata[u"Acres"]), 0), 3) + 74925794.6112123 * jmp_score.pow(max((-0.3155 + indata[u"Acres"]), 0), 3) + -141292074.998634 * jmp_score.pow(max((-0.287 + indata[u"Acres"]), 0), 3) + 108365009.426811 * jmp_score.pow(max((-0.2585 + indata[u"Acres"]), 0), 3) + -29359168.2235941 * jmp_score.pow(max((-0.23 + indata[u"Acres"]), 0), 3) + jmp_score.match(indata[u"Private Pool YN"],{0:-43139.9442569903,1:43139.9442569903},np.nan) + jmp_score.match(indata[u"Quality"],{2:0,3:28579.9772799121,4:39613.8033512621,5:71535.0764862525},np.nan) + jmp_score.match(indata[u"View Type"],{u"Non-Waterfront":0,u"Canal":31836.2480827341,u"Intersecting":54959.261991344,u"Lake/Preserve":63588.822186035},np.nan) + jmp_score.match(indata[u"Roof Type"],{u"Metal":8097.08472648753,u"Other":-29355.9769453505,u"Shingle":-6973.70830694782,u"Slate":9777.74525204555,u"Tile":18454.8552737652},np.nan) + jmp_score.match(indata[u"Zip Code"],{u"33904":3787.58841702505,u"33909":-9286.21790641882,u"33914":11250.3301884419,u"33990":-1959.26139032746,u"33991":-3792.43930872063},np.nan)
return outdata[u"Pred Formula BoxCox(Sold Price Adjusted,-0.3)"]