我有一个数据框,如下所示。出于简化的目的,我只展示了这些特征,但数据框中还有更多特征。
CODE DATE IND_AVG_MONTH_REC IND_STD_MONTH_REC 0 15295 2021-01-22 0.375 0.3827331 15801 2020-12-04 0.125 0.3093592 23369 2021-01-01 0.750 0.216506
AVG和STD分别是每个COD每月的平均值和标准差。DATE是用户最后一次活动的时间。我想根据AVG和最后的日期来预测下一个日期。
为此,我进行了线性回归并得到了预测的频率。我对结果很满意,因为预测值与测试集之间的误差很小。(所有值都是整数或浮点数)
# 并未使用数据集中所有特征X = df[['IND_MIN_REC_VAL', 'IND_TOTAL_TERM_CALL_QTY', 'IND_TOTAL_ORIG_CALL', 'IND_VAL_LAST_REC', 'OLD', 'IND_SMS_QTY', 'IND_TOTAL_SMS_QTY', 'IND_MIN_REC_QTY_DAY', 'IND_TOTAL_GPRS_QTY', 'IND_GPRS_QTY', 'IND_AVG_MONTH_GPRS_QTY', 'IND_AVG_MONTH_SMS', 'IND_STD_MONTH_SMS', 'IND_STD_MONTH_GPRS_QTY', 'IND_QTD_LAST_REC', 'COD_TAR', 'COD_CART', 'IND_TERM_CALL_QTY', 'IND_MAX_REC_VAL', 'IND_AVG_TERM_CALL_DUR', 'IND_STD_TERM_CALL_DUR', 'IND_ORIG_CALL_QTY', 'IND_AVG_MONTH_TERM_CALL', 'IND_STD_MONTH_TERM_CALL', 'IND_MAX_REC_QTY_DAY', 'IND_AVG_ORIG_CALL_DUR', 'IND_STD_ORIG_CALL_DUR', 'IND_AVG_MONTH_PRIG_CALL', 'IND_STD_ORIG_CALL', 'IND_AVG_GPRS_DUR', 'IND_STD_GPRS_DUR', 'IND_STD_MONTH_REC_VAL', 'IND_STD_MONTH_REC', 'IND_AVG_MONTH_REC_VAL']]y = df['IND_AVG_MONTH_REC']X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)model = LinearRegression().fit(X_train, y_train)y_preds = model.predict((X_test))
然后计算了误差指标,得到了以下结果,我对这些结果很满意:
MAE: 0.11467427514645877MSE: 0.03279457004316404RMSE: 0.1810927111817702
既然我已经有了预测的频率,如何得到下一个(预测的)日期呢?
有没有办法在Python/Pandas中输入最后的日期和预测的频率来得到下一个日期?
回答:
我认为您遇到了使用线性回归试图解决时间序列问题的困境。
想象一下预测房价。我们可以知道卧室的数量,是否有车库,院子的面积,当前的利率,当前的失业率,目前市场上的房屋数量等。最终我们会得到一个很好的预测。
现在想象一下您想预测6个月后的房价。您仍然知道卧室的数量和是否有车库,但您不知道未来的利率、失业率,或者市场上将会有多少房屋。
您可以使用自己的最佳猜测来估计这些(也许使用最佳/最坏情况的范围,并让使用模型的人决定使用哪一个),或者您可以使用时间序列建模方法,通过学习今天的模式对未来的意义来预测未来6个月。