重新校准现有的回归模型

Re-calibrate an existing regression model

我有一个如下所示的 pandas 数据框(快照),我正在尝试重新校准回归方程。 Loss = (EXP(-1.01 + (-0.08 x mob)) x Price) 我想对可用的新数据进行回归,但不确定如何将新系数输入现有方程。损失是我的目标变量;暴民和价格是我的自变量。

例如:New Loss equation = (EXP(b1 + (b2 x mob)) x Price) 。请让我知道如何实现这一目标? , 提前致谢

Months     RefID     Price   Loss    mob
1/11/2019  100        4.00    3.43    2.00          
1/11/2019  101        10.00   8.58    3.00          
1/11/2019  102        20.00   17.16   1.00         
1/12/2019  100        44.00   37.74   3.00         
1/12/2019  101        66.00   56.61   4.00         
1/12/2019  102        7.00    6.00    2.00          
1/12/2019  103        9.00    7.72    1.00          
...

我认为构建模型的人使用了交互和线性回归,但我不确定,我正在做以下但不确定这是否是正确的方法:

X = stage2[["Price" , "Interact_Price_mob"]] # Interact_Price_mob = Price*mob
y= stage2[["Loss"]]
reg = LinearRegression(fit_intercept=False).fit(X,y)
print(reg.coef_)

关于如何进行回归,您确实有两种选择。一种是将指数方程转化为线性方程,用线性回归求解。 (请注意,您的方程式可以改写为 log(loss/price) = b1 + b2 * mob,如果您不确定如何改写,请查看您的对数规则并向自己证明。)另一种方法是对指数进行非线性最小二乘拟合。对于两者,我在下面使用 scipy。对于指数:scipy.optimize.curve_fit. For the linear: scipy.polyfit with a first-order polynomial。请注意,还有其他工具可以进行线性回归(包括来自第一原理的回归),这可能不是最有效的,尽管我没有检查过。

这些值只是您上面示例中的值,因此这是一个非常小的数据集,但足以用于演示。

import numpy as np
from scipy.optimize import curve_fit
from scipy import polyfit 

# mob, price, and loss defined from values given above

# nonlinear least squares fit
def f(x, b1, b2):
    mob = x[0,:]
    price = x[1,:]
    return(np.exp(b1 + b2 * mob) * price)

x = np.array([mob, price])
b, cov = curve_fit(f, xdata = x, ydata = loss)

# linear regression (polynomial fit of order 1)
(b2, b1) = polyfit(mob, np.log(loss/price), 1)

# Comparison
print('Regression\tb1\t\t\tb2')
print(f'Linear\t\t{b1}\t{b2}')
print(f'Exponential\t{b[0]}\t{b[1]}')
Regression      b1                      b2
Linear          -0.15350910350019625    1.7615305296685054e-06
Exponential     -0.15324071098380723    -6.040694002336243e-05

这些显然相似但不完全相同。这是因为这两种方法都使用最小二乘法拟合但指标不同。

  • 在线性回归中,数据点 1 和预测值 2 之间的差异与数据点 10 和预测值 20 之间的差异具有相同的权重,因为我们对您的实际值取了对数等式和 log(2)-log(1) = log(2/1) = log(20/10) = log(20)-log(10).
  • 在指数回归中,数据点 1 和预测值 2 之间的差异与数据点 10 和预测值 11 之间的差异具有相同的权重。

根据您的应用程序和数据集值的范围,这种差异可能很重要,并且一个选择可能比另一个更好。在您的情况下,我想尝试重现之前使用的结果并查看回归模型是否这样做,然后决定您是只想更新参数还是同时更新使用的回归模型。