【问题标题】:Predicting out future values using OLS regression (Python, StatsModels, Pandas)使用 OLS 回归(Python、StatsModels、Pandas)预测未来值
【发布时间】:2015-07-22 13:58:23
【问题描述】:

我目前正在尝试在 Python 中实现 MLR,但不确定如何将找到的系数应用于未来值。

import pandas as pd
import statsmodels.formula.api as sm
import statsmodels.api as sm2

TV = [230.1, 44.5, 17.2, 151.5, 180.8]
Radio = [37.8,39.3,45.9,41.3,10.8]
Newspaper = [69.2,45.1,69.3,58.5,58.4]
Sales = [22.1, 10.4, 9.3, 18.5,12.9]
df = pd.DataFrame({'TV': TV, 
                   'Radio': Radio, 
                   'Newspaper': Newspaper, 
                   'Sales': Sales})

Y = df.Sales
X = df[['TV','Radio','Newspaper']]
X = sm2.add_constant(X)
model = sm.OLS(Y, X).fit()
>>> model.params
const       -0.141990
TV           0.070544
Radio        0.239617
Newspaper   -0.040178
dtype: float64

假设我想预测以下 DataFrame 的“销售额”:

EDIT

TV     Radio    Newspaper    Sales
230.1  37,8       69.2       22.4
44.5   39.3       45.1       10.1
...    ...        ...        ...
25      15        15
30      20        22
35      22        36

我一直在尝试在此处找到的方法,但似乎无法正常工作:Forecasting using Pandas OLS

谢谢!

【问题讨论】:

    标签: python pandas statsmodels


    【解决方案1】:

    假设 df2 是您的新样本数据帧:

    model = sm.OLS(Y, X).fit()
    new_x = df2.loc[df.Sales.notnull(), ['TV', 'Radio', 'Newspaper']].values
    new_x = sm2.add_constant(new_x)  # sm2 = statsmodels.api
    y_predict = model.predict(new_x)
    
    >>> y_predict
    array([ 4.61319034,  5.88274588,  6.15220225])
    

    您可以将结果直接分配给 df2,如下所示:

    df2.loc[:, 'Sales'] = model.predict(new_x)
    

    要使用回归预测填充原始 DataFrame 中缺失的销售值,请尝试:

    X = df.loc[df.Sales.notnull(), ['TV', 'Radio', 'Newspaper']]
    X = sm2.add_constant(X)
    Y = df[df.Sales.notnull()].Sales
    
    model = sm.OLS(Y, X).fit()
    new_x = df.loc[df.Sales.isnull(), ['TV', 'Radio', 'Newspaper']]
    new_x = sm2.add_constant(new_x)  # sm2 = statsmodels.api
    
    df.loc[df.Sales.isnull(), 'Sales'] = model.predict(new_x)
    

    【讨论】:

    • 我仍然不明白,一旦模型已经拟合,为什么还需要向样本外数据添加一个常数。你能解释一下吗?
    猜你喜欢
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 2016-08-26
    • 2016-05-03
    • 2014-03-30
    • 2014-04-09
    • 2022-06-08
    • 1970-01-01
    相关资源
    最近更新 更多