时序问题预测思路
1、先仔细观察数据,看看我们的数据是否有空值、异常值(方差过大),然后看看我们要预测的东西是否肉眼可以看出规律。
2、看一下我们训练样本是否足够多,如何正确的分成训练集、测试集和验证集。因为有时候特征是时序的,那么我们如果使用
train_test_split去区分验证集和测试集,会导致我们测试集的样本,在训练集中已经出现了非常相似样本,会导致验证集结果很好,可是到测试集里结果却很差。
3、明确我们能预测的时间范围,看我们是能预测未来一天的,还是预测未来一周的。
4、特征工程:
①对于时序特征,我们可以取x2-x1,x3-x2,x4-x3作为特征。
②如果是回归问题,对结果取log,可以将不符合正态分布的数据,转化为正态分布
③可以使用滑动窗口取时序特征,np.mean(np.array([1,2,3,4]).reshape(-1,2),axis=1),这样窗口长度为2,步长stride=2
5、回归问题一般使用rmsle和mape进行评判
def calculate_rmsle(pred,y_test):
arr = np.log(pred+1)-np.log(y_test+1)
RMSLE = np.sqrt(np.linalg.norm(arr)/len(arr))
return RMSLE
标签y必须是大于0的,如果有等于0的情况,需要+1
def calculate_mape(pred,y_test):
arr = np.fabs((y_test-pred)/y_test)
mape = np.sum(arr)/len(y_test)
return mape
6、xgboost里面对于one-hot的类别特征构造时,会将不同类别的样本直接独立开来。所以如果我们是类别特征的,不同的类别之间的样本要学习他们的共性的时候,
如果这个特征之间有顺序的话,比如1,2,3,4,5,6,7代表星期的,他们是有顺序的,我们就还是用这个构造。或者0代表0-1之间的区间,1代表1-2之间的区间,这两个类别之间
有大小关系的,我们就直接取数字。
但是如果两个类别之间完全没有先后顺序,比如天气“阴天”和“晴天”,我们就还是取one-hot特征