From 2d3d36b47c2fd991082bbd3efd32608e03dcfe44 Mon Sep 17 00:00:00 2001 From: luochen570 <1160510664@qq.com> Date: Mon, 8 Jun 2026 23:40:44 +0800 Subject: [PATCH] =?UTF-8?q?test:=20=E5=AF=B9=E6=AF=94=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E9=A1=BA=E5=BA=8F=E5=88=92=E5=88=86=E7=89=B9=E5=BE=81=E6=96=B9?= =?UTF-8?q?=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...bdt_future_predictions_by_feature_set.xlsx | Bin 0 -> 29473 bytes .../time_split_feature_model_comparison.csv | 17 +++ time_split_experiment.py | 140 ++++++++++++++++++ 3 files changed, 157 insertions(+) create mode 100644 outputs/time_split_experiment/gbdt_future_predictions_by_feature_set.xlsx create mode 100644 outputs/time_split_experiment/time_split_feature_model_comparison.csv create mode 100644 time_split_experiment.py diff --git a/outputs/time_split_experiment/gbdt_future_predictions_by_feature_set.xlsx b/outputs/time_split_experiment/gbdt_future_predictions_by_feature_set.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..3ceda2ac1840807573ad426b86ff6ca81b1fc68c GIT binary patch literal 29473 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 NUjyL3U;4nm{U1iqTXp~d literal 0 HcmV?d00001 diff --git a/outputs/time_split_experiment/time_split_feature_model_comparison.csv b/outputs/time_split_experiment/time_split_feature_model_comparison.csv new file mode 100644 index 0000000..105e6d9 --- /dev/null +++ b/outputs/time_split_experiment/time_split_feature_model_comparison.csv @@ -0,0 +1,17 @@ +特征方案,模型,特征数,训练集样本数,测试集样本数,训练日期起,训练日期止,测试日期起,测试日期止,RMSE,MAE,R2,测试预测最小值,测试预测最大值,未来预测最小值,未来预测最大值,未来预测均值 +13特征_日期sin_cos,梯度提升树,13,584,147,2011-01-01,2012-08-06,2012-08-07,2012-12-31,1035.393806499406,869.0366952335274,0.6949404951600915,1193.005865875163,7448.828701180003,1862,6350,3848.46 +12特征_仅日期sin,梯度提升树,12,584,147,2011-01-01,2012-08-06,2012-08-07,2012-12-31,1037.9787565353552,864.907988042832,0.6934153789548839,1570.2284280500735,7557.904184096963,1752,6174,3687.28 +11特征_无日期,梯度提升树,11,584,147,2011-01-01,2012-08-06,2012-08-07,2012-12-31,1065.8819685946905,903.8377254645945,0.6767104504461063,1526.0106661213501,7445.060381049142,1927,6896,4029.71 +12特征_日期数值,线性回归,12,584,147,2011-01-01,2012-08-06,2012-08-07,2012-12-31,1100.6960028141114,802.9604968933488,0.6552468729685021,1667.5505098104527,7202.426019549715,1341,5571,3322.7 +11特征_无日期,线性回归,11,584,147,2011-01-01,2012-08-06,2012-08-07,2012-12-31,1102.6619968627012,803.6253768758826,0.6540142203549053,1677.5487160817047,7191.784877243726,1775,6001,3756.0 +12特征_仅日期sin,线性回归,12,584,147,2011-01-01,2012-08-06,2012-08-07,2012-12-31,1109.0855745651786,812.0301896212464,0.6499713857316858,1680.4361958712066,7184.255023908034,1772,6010,3754.92 +13特征_日期sin_cos,线性回归,13,584,147,2011-01-01,2012-08-06,2012-08-07,2012-12-31,1111.9746531184803,816.5536163460256,0.6481454179049195,1691.5799618779006,7248.332307970662,1775,5909,3690.63 +12特征_日期数值,梯度提升树,12,584,147,2011-01-01,2012-08-06,2012-08-07,2012-12-31,1115.505147894367,754.6104141829828,0.6459076101057781,2210.8052037892908,7886.894463218566,3884,8023,6177.22 +12特征_日期数值,随机森林,12,584,147,2011-01-01,2012-08-06,2012-08-07,2012-12-31,1211.6404640631436,857.2259950393145,0.5822456578217434,3362.6023664502195,7437.1805507936515,3778,7634,5700.92 +11特征_无日期,随机森林,11,584,147,2011-01-01,2012-08-06,2012-08-07,2012-12-31,1243.2258138091481,1038.575310261998,0.5601815197920028,2508.394888672439,7396.9488500000025,1991,6107,3698.12 +11特征_无日期,SVR,11,584,147,2011-01-01,2012-08-06,2012-08-07,2012-12-31,1256.1142258603181,1110.5200812033272,0.5510151326775178,2435.653600556283,6728.154381038747,1857,5138,3785.22 +12特征_仅日期sin,随机森林,12,584,147,2011-01-01,2012-08-06,2012-08-07,2012-12-31,1300.1505289996633,1061.3027606571065,0.5189826853858082,2349.546295021645,7412.202957142856,1966,5800,3536.75 +12特征_日期数值,SVR,12,584,147,2011-01-01,2012-08-06,2012-08-07,2012-12-31,1302.8065606379432,1122.631254189851,0.517015371360585,3038.4325167245174,6793.0357932052375,3203,5408,4553.72 +13特征_日期sin_cos,随机森林,13,584,147,2011-01-01,2012-08-06,2012-08-07,2012-12-31,1362.4036579408184,1162.7424853677699,0.47181624787772836,2337.0508269841275,7378.615926190471,1981,5446,3498.99 +13特征_日期sin_cos,SVR,13,584,147,2011-01-01,2012-08-06,2012-08-07,2012-12-31,1500.6745922933299,1355.960815132986,0.35916459954458013,2458.0732583146823,6405.637428945096,1864,4975,3596.58 +12特征_仅日期sin,SVR,12,584,147,2011-01-01,2012-08-06,2012-08-07,2012-12-31,1514.2320642644604,1364.971543352133,0.3475333594320331,2414.919176938589,6342.6982615190545,1813,4998,3673.18 diff --git a/time_split_experiment.py b/time_split_experiment.py new file mode 100644 index 0000000..426df01 --- /dev/null +++ b/time_split_experiment.py @@ -0,0 +1,140 @@ +from pathlib import Path + +import numpy as np +import pandas as pd +from sklearn.compose import ColumnTransformer +from sklearn.ensemble import GradientBoostingRegressor, RandomForestRegressor +from sklearn.linear_model import LinearRegression +from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score +from sklearn.pipeline import Pipeline +from sklearn.preprocessing import OneHotEncoder, StandardScaler +from sklearn.svm import SVR + +BASE_DIR = Path(__file__).resolve().parent +DATA_PATH = Path('/root/.hermes-web-ui/upload/default/28752a235eb6ef9d.xlsx') +OUT_DIR = BASE_DIR / 'outputs' / 'time_split_experiment' +OUT_DIR.mkdir(parents=True, exist_ok=True) + +TARGET = '总骑行量' +BASE_FEATURES = ['年', '季节', '月', '节假日', '星期', '工作日', '天气', '气温', '体感温度', '湿度', '风速'] +CATEGORICAL_BASE = ['年', '季节', '月', '节假日', '星期', '工作日', '天气'] + + +def rmse(y_true, y_pred): + return float(np.sqrt(mean_squared_error(y_true, y_pred))) + + +def make_pipeline(name, estimator, features, categorical): + numeric = [col for col in features if col not in categorical] + need_scale = name in {'线性回归', 'SVR'} + preprocessor = ColumnTransformer( + transformers=[ + ('cat', OneHotEncoder(handle_unknown='ignore'), categorical), + ('num', StandardScaler() if need_scale else 'passthrough', numeric), + ], + verbose_feature_names_out=False, + ) + return Pipeline([('preprocess', preprocessor), ('model', estimator)]) + + +def add_date_features(frame, min_date): + frame = frame.copy() + frame['日期数值'] = (frame['日期'] - min_date).dt.days + day_of_year = frame['日期'].dt.dayofyear + frame['日期_sin'] = np.sin(2 * np.pi * day_of_year / 365.25) + frame['日期_cos'] = np.cos(2 * np.pi * day_of_year / 365.25) + return frame + + +def main(): + daily = pd.read_excel(DATA_PATH, sheet_name='每天数据') + future = pd.read_excel(DATA_PATH, sheet_name='预测集') + daily['日期'] = pd.to_datetime(daily['日期']) + future['日期'] = pd.to_datetime(future['日期']) + daily = daily.sort_values('日期').reset_index(drop=True) + future = future.sort_values('日期').reset_index(drop=True) + + min_date = daily['日期'].min() + daily = add_date_features(daily, min_date) + future = add_date_features(future, min_date) + + split_idx = int(len(daily) * 0.8) + train = daily.iloc[:split_idx].copy() + test = daily.iloc[split_idx:].copy() + + feature_sets = { + '11特征_无日期': { + 'features': BASE_FEATURES, + 'categorical': CATEGORICAL_BASE, + }, + '12特征_日期数值': { + 'features': ['日期数值'] + BASE_FEATURES, + 'categorical': CATEGORICAL_BASE, + }, + '13特征_日期sin_cos': { + 'features': ['日期_sin', '日期_cos'] + BASE_FEATURES, + 'categorical': CATEGORICAL_BASE, + }, + '12特征_仅日期sin': { + 'features': ['日期_sin'] + BASE_FEATURES, + 'categorical': CATEGORICAL_BASE, + }, + } + + model_factories = { + '线性回归': lambda: LinearRegression(), + '随机森林': lambda: RandomForestRegressor(n_estimators=500, random_state=42, min_samples_leaf=2, n_jobs=-1), + '梯度提升树': lambda: GradientBoostingRegressor(random_state=42, n_estimators=300, learning_rate=0.05, max_depth=3), + 'SVR': lambda: SVR(C=200, gamma='scale', epsilon=50), + } + + rows = [] + future_rows = [] + for fs_name, spec in feature_sets.items(): + features = spec['features'] + categorical = spec['categorical'] + for model_name, factory in model_factories.items(): + pipe = make_pipeline(model_name, factory(), features, categorical) + pipe.fit(train[features], train[TARGET]) + pred = pipe.predict(test[features]) + future_pred = np.maximum(np.round(pipe.predict(future[features])), 0).astype(int) + rows.append({ + '特征方案': fs_name, + '模型': model_name, + '特征数': len(features), + '训练集样本数': len(train), + '测试集样本数': len(test), + '训练日期起': train['日期'].min().date().isoformat(), + '训练日期止': train['日期'].max().date().isoformat(), + '测试日期起': test['日期'].min().date().isoformat(), + '测试日期止': test['日期'].max().date().isoformat(), + 'RMSE': rmse(test[TARGET], pred), + 'MAE': float(mean_absolute_error(test[TARGET], pred)), + 'R2': float(r2_score(test[TARGET], pred)), + '测试预测最小值': float(pred.min()), + '测试预测最大值': float(pred.max()), + '未来预测最小值': int(future_pred.min()), + '未来预测最大值': int(future_pred.max()), + '未来预测均值': float(future_pred.mean()), + }) + if model_name == '梯度提升树': + temp = future[['日期'] + BASE_FEATURES].copy() + temp['特征方案'] = fs_name + temp['模型'] = model_name + temp['预测总骑行量'] = future_pred + future_rows.append(temp) + + result = pd.DataFrame(rows).sort_values(['RMSE', 'R2'], ascending=[True, False]) + result.to_csv(OUT_DIR / 'time_split_feature_model_comparison.csv', index=False, encoding='utf-8-sig') + pd.concat(future_rows, ignore_index=True).to_excel(OUT_DIR / 'gbdt_future_predictions_by_feature_set.xlsx', index=False) + + print('时间顺序划分:') + print(f"训练集 {len(train)} 条:{train['日期'].min().date()} 至 {train['日期'].max().date()}") + print(f"测试集 {len(test)} 条:{test['日期'].min().date()} 至 {test['日期'].max().date()}") + print('\n按 RMSE 排序:') + print(result[['特征方案', '模型', 'RMSE', 'MAE', 'R2', '未来预测最小值', '未来预测最大值', '未来预测均值']].to_string(index=False, float_format=lambda x: f'{x:.3f}')) + print(f"\n结果已保存:{OUT_DIR}") + + +if __name__ == '__main__': + main()