時系列分析(ランダムフォレスト)で将来の人数を予測しています。
手元のデータ集計期間が短いため、ある特定日を用いて翌日、翌々日の人数を予測したものを学習データ、実際の人数をテストデータとして予測を行いたいです。
実現したいことを達成するためのコード修正についてご指摘頂けないでしょうか。
実現したいこと
① ある日で翌日、翌々日の人数を予測(データを増やす)
② ①を用いて将来的な人数を予測(将来の予測)
色々試行錯誤※しているのですがどうしても最後までたどり着きません。
よろしくお願いいたします。
python
1%matplotlib inline 2import matplotlib 3import matplotlib.pyplot as plt 4import numpy as np 5import pandas as pd 6from sklearn.linear_model import LinearRegression 7from sklearn.tree import DecisionTreeRegressor 8from sklearn.ensemble import RandomForestRegressor 9from sklearn.model_selection import GridSearchCV 10from sklearn.model_selection import train_test_split 11from sklearn.metrics import mean_squared_error 12 13dataset = pd.read_csv('file_0627.csv') 14dataset.head() 15 16target_col = 'patient' 17exclude_cols = ['date','patient','14day_exclusion_rate'] 18feature_cols = [] 19for col in dataset.columns: 20 if col not in exclude_cols: 21 feature_cols.append(col) 22 23y = dataset[target_col] 24X = dataset[feature_cols] 25 26X_train_val, X_test, y_train_val, y_test = \ 27 train_test_split(X, y, test_size=0.3, random_state=1234) #分割1 28 29X_train, X_val, y_train, y_val = \ 30 train_test_split(X_train_val, y_train_val, test_size=0.3, random_state=1234) #分割2 31 32rf = RandomForestRegressor(random_state=1234) 33rf.fit(X_train[X_vars], y_train[Y_vars]) 34 35for fday in pred["date"]: 36 idx = pred[pred["date"] == fday].index[0] 37 pred_value = rf.predict(pred.loc[pred["date"]==fday, X_vars].values.reshape(1,-1)) 38 39 for i in range(len(Y_vars)): 40 prefix = re.match(r'(Date_\w+)_[0-9]+', Y_vars[i]) 41 target_list = prefix[1] 42 43 # Date⁺1 44 prefix = re.match(r'(Date_\w+)_[0-9]+', Y_vars[i]) 45 target_var1 = target_list + "_1" 46 pred.loc[pred["date"]==fday+datetime.timedelta(days=1), target_var1] = pred_value[0][i] 47 48 # Date⁺2 49 target_var2 = target_list + "_2" 50 pred.loc[pred["date"]==fday+datetime.timedelta(days=1), target_var2] = pred.loc[pred["ds"]==fday, target_var1].values[0] 51 52y_train = rf.predict(X_val) 53rf_mse = mean_squared_error(Y_val, y_train) 54print('Random Forest RMSE: ', np.sqrt(rf_mse)) 55
使用している特徴量
'date', 'patient', '6day_exclusion_rate', '14day_exclusion_rate'
※困っていること
実現したいこと①の箇所
rf.fit(X_train[X_vars], y_train[Y_vars])以降の訂正方法が分からないです。