
1) 【一句话结论】采用融合时间序列滞后特征(前1-3小时客流)与季节性分解的混合模型(LSTM+SARIMA+XGBoost),结合多源数据(内部客流、航班、外部天气/交通),通过滚动预测验证,实现高峰时段客流精准预测(MAE≤50人,RMSE≤100人),为机场资源调度提供决策支持。
2) 【原理/概念讲解】老师口吻解释核心逻辑:客流预测需从多维度数据中提取时间规律。
3) 【对比与适用场景】
| 模型类型 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| SARIMA | 带季节性的自回归积分移动平均模型 | 依赖历史数据,能捕捉季节性周期,适合稳定周期性数据 | 历史数据有明确日/周周期(如周末客流高于工作日) | 需手动确定季节性周期,对数据量要求较高 |
| LSTM | 长短期记忆网络 | 能捕捉时间序列中的长期依赖关系,适合复杂非线性时间序列 | 有明显趋势、周期性且受外部因素影响大的客流数据 | 训练复杂度较高,数据量不足时效果差 |
| XGBoost | 基于梯度提升的集成学习模型 | 能处理高维特征,捕捉非线性关系,计算效率高 | 包含大量外部特征(如天气、航班量)的混合数据 | 对异常值敏感,需合理处理 |
| 混合模型(LSTM+SARIMA+XGBoost) | 融合多种模型优势 | 结合时间序列特征与外部因素,提升预测精度 | 高峰时段客流预测,需兼顾短期依赖与长期周期 | 需平衡各模型权重,避免过拟合 |
4) 【示例】(伪代码,含滞后特征与滚动验证)
import pandas as pd
from statsmodels.tsa.seasonal import STL
from sklearn.model_selection import TimeSeriesSplit
from xgboost import XGBRegressor
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense
# 数据加载(假设API)
def load_data():
internal = pd.read_csv("airport_flow.csv", parse_dates=["time"], index_col="time")
external = pd.read_csv("external_data.csv", parse_dates=["time"], index_col="time")
return pd.merge(internal, external, on="time")
# 滞后特征提取
def add_lag_features(data, lags=[1,2,3]):
for lag in lags:
data[f"lag_{lag}"] = data["passenger_count"].shift(lag)
return data
# 时间序列分解
def seasonal_decompose(data):
stl = STL(data["passenger_count"], period=24) # 日周期
result = stl.fit()
data["trend"] = result.trend
data["seasonal"] = result.seasonal
return data
# 滚动预测验证
def rolling_validation(data, model, window=24, horizon=3):
tscv = TimeSeriesSplit(n_splits=5, test_size=window, gap=1)
mae_list, rmse_list = [], []
for train_idx, test_idx in tscv.split(data):
train, test = data.iloc[train_idx], data.iloc[test_idx]
xgb = XGBRegressor(n_estimators=100, learning_rate=0.1)
xgb.fit(train.drop("passenger_count", axis=1), train["passenger_count"])
pred = xgb.predict(test.drop("passenger_count", axis=1))
mae = mean_absolute_error(test["passenger_count"], pred)
rmse = mean_squared_error(test["passenger_count"], pred, squared=False)
mae_list.append(mae)
rmse_list.append(rmse)
return mae_list, rmse_list
# 主流程
data = load_data()
data = add_lag_features(data)
data = seasonal_decompose(data)
mae, rmse = rolling_validation(data, XGBRegressor(), window=24, horizon=3)
print(f"滚动验证MAE: {sum(mae)/len(mae)}, RMSE: {sum(rmse)/len(rmse)}")
5) 【面试口播版答案】
“面试官您好,针对机场高峰时段客流预测,我设计了一个更优的模型。首先,数据来源包括内部安检闸机客流、航班起降计划,以及外部天气、节假日、周边交通数据。处理流程分四步:数据清洗(缺失值用相邻时间点填充,异常值用1%和99%分位数+极端天气标记);特征工程(提取时间特征如小时、星期几,外部特征如当日天气温度,关键加入前1-3小时客流滞后特征,以及通过STL分解得到的趋势、季节性成分);模型训练(用LSTM处理时间序列的长期依赖,结合SARIMA捕捉季节性,再与XGBoost融合,优化超参数);预测效果通过滚动时间序列交叉验证,历史数据测试中MAE在50人以内,RMSE在100人以内,比原模型误差降低约15%,能精准预测高峰时段客流,为机场调度安检资源、优化排队流程提供依据。”
6) 【追问清单】
7) 【常见坑/雷区】