【问题标题】:Time series prediction: How do I improve my regression models?时间序列预测:如何改进我的回归模型?
【发布时间】:2020-07-26 01:50:11
【问题描述】:

我正在为我的论文分析 2019 年 9 月的 Citi Bike 数据(时间序列数据),以构建预测回归模型。数据集可以找到here. 目前,我正在聚合 240 万行的数据集,以获得整个月每天每个站点的每小时自行车需求量。以下是聚合的样子:


我使用 train_test_split 拆分数据集并应用了各种股票学习算法,主要来自 scikit-learn。但是,这些模型的结果输出的 R2 值非常低。例如,对于 scikit-learn 线性回归,我得到的 R2 为 0.09019569965308272,因此模型无法识别数据中的模式。这是线性回归模型的代码:

def lr(X_train, X_test, y_train, y_test):
    #Create a linear regression object
    reg = LinearRegression()

    sc_X = StandardScaler()

    X_train, X_test = scaleData(X_train, X_test, "robust")

    print(X_train)
    print(X_test)

    reg.fit(X_train, y_train)
    print("reg.score(X, y): {} \n".format(reg.score(X_test, y_test)))
    print("reg.coef_: {} \n".format(reg.coef_))
    print("reg.intercept_: {} \n".format(reg.intercept_))

    pred = reg.predict(X_test)
    print("Pred: {} \n".format(pred))

    results = pd.DataFrame({'Actual': y_test.flatten(), 'Predicted': pred.flatten()})
    print(results)

    PlotResultsGetPerformance(results)

lr(X_train, X_test, y_train, y_test)

scaledata 方法:

def scaleData(X_train, X_test, scalingType, X=None):
    scaler = []
    stype = scalingType.lower()
    if stype == "standard":
        scaler = StandardScaler()
    elif stype == "minmax":
        scaler = MinMaxScaler()
    elif stype == "robust":
        scaler = RobustScaler()

    if X == None:
        scaler = scaler.fit(X_train)

        X_train = scaler.transform(X_train)
        X_test = scaler.transform(X_test)

        return X_train, X_test
    else:
        X = scaler.fit_transform(X)

        return X

运行线性回归算法的输出:

reg.score(X, y): 0.09019569965308272 
reg.coef_: [[-4.71123839  0.87411394 -0.1425281   1.33332683]] 
reg.intercept_: [4.94247875] 

Pred: [[ 4.16553018]
 [10.71438879]
 [ 5.21549358]
 ...
 [10.23551752]
 [ 4.94370368]
 [ 4.10551935]] 

平均绝对误差:4.833603206597555
均方误差:61.94697363477656
均方根误差:7.870639976188503
R2:0.09019569965308272

似乎是什么问题?是数据问题还是模型问题?任何帮助将不胜感激。

【问题讨论】:

  • 什么是scaleData?
  • R2 对于预测问题不是一个非常有意义的度量(参见this answer 的最后一部分);我建议你改成合适的(MSE、RMSE、MAE)。
  • @desertnaut 我也有这些值,但忘记将它们添加到帖子中。现已添加
  • 是的,对不起...在帖子中编辑

标签: python machine-learning time-series regression


【解决方案1】:

在这种情况下,我认为您的模型正在遭受under-fitting (high bias) 的影响。看起来解释变量中没有足够的信息。您的数据中需要更多列。您可以创建新列或尝试找到更多解释变量并将它们添加到模型中。另外,请检查您已经拥有的变量的质量,也许一些转换可以帮助改进预测。这里有更详细的解释:https://towardsdatascience.com/what-are-overfitting-and-underfitting-in-machine-learning-a96b30864690

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 2014-03-18
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    • 2017-11-30
    相关资源
    最近更新 更多