4、数据准备与特征工程:从“脏数据”到“预测燃料”
文旅趋势预测的起点并非算法,而是数据。模型的上限由数据质量决定,特征工程则是将原始数据转化为模型可理解的“燃料”。本章聚焦于预测建模前的关键步骤:数据清洗、缺失值处理、节假日/活动特征构造,以及天气与舆情数据的融合。我们将遵循“先清洗、再构造、后融合”的工程链路,确保输入模型的数据既干净又富含业务信号。
4.1 数据清洗:去除噪声,统一口径
核心原理:文旅数据来源多样(OTA平台、景区票务系统、运营商信令、问卷调查),常存在重复记录、字段格式不一致、异常跳变等问题。清洗的目标是提升数据可信度,避免“垃圾进、垃圾出”。
操作流程:
- 去重:按用户ID+景区ID+日期+订单号进行多键去重,防止同一订单被多次统计。
- 格式统一:日期统一为YYYY-MM-DD,时间统一为24小时制,金额统一为人民币元,景区名称统一为官方标准名。
- 异常值检测:使用3σ原则或IQR(四分位距)法识别极端值。例如,某景区单日客流超过历史均值5倍以上,需核查是否为系统故障或真实大型活动。
- 逻辑校验:检查字段间逻辑关系,如“入园时间”不应早于“购票时间”,“游客年龄”应在0-120岁区间。
| 数据源 | 常见脏数据 | 清洗策略 |
|---|---|---|
| OTA订单 | 重复订单、取消未标记 | 按订单号去重,过滤已取消状态 |
| 景区闸机 | 设备故障导致计数为0或激增 | 与历史同期对比,标记异常点 |
| 搜索指数 | 爬虫抓取失败产生空值 | 前向填充或插值处理 |
4.2 缺失值处理:不臆造,不浪费
核心原理:缺失值处理需权衡信息损失与引入偏差的风险。文旅数据中,天气数据可能因气象站故障缺失,舆情数据可能因平台接口限制不完整。
判断方法:
- 缺失比例 < 5%:可直接删除对应记录,或使用均值/中位数填充。
- 缺失比例 5%-20%:推荐使用时间序列插值(线性插值、样条插值)或基于相似日期的均值填充(如用上周同一天的值)。
- 缺失比例 > 20%:该特征需谨慎使用,可考虑构造“是否缺失”作为独立二值特征,或放弃该特征。
# 示例:Python中处理缺失值
import pandas as pd
# 线性插值填充天气温度
df['temperature'] = df['temperature'].interpolate(method='linear')
# 用上周同一天填充客流缺失
df['visitors'] = df['visitors'].fillna(df['visitors'].shift(7))
4.3 节假日与活动特征构造:捕捉脉冲式需求
核心原理:文旅需求受节假日和大型活动影响呈脉冲式波动。模型需要显式感知“距离五一还有3天”或“本周有国际马拉松赛事”这类信息。
特征构造清单:
| 特征类别 | 具体特征 | 示例值 |
|---|---|---|
| 节假日类型 | 是否黄金周、是否小长假、是否周末 | 1(黄金周)、0(普通周末) |
| 时间距离 | 距下一个节假日天数(负数为已过) | -2(节后第2天) |
| 活动属性 | 活动级别(国际/全国/区域)、活动类型 | 国际、体育赛事 |
| 调休影响 | 是否调休工作日、是否连休 | 1(调休上班)、连休5天 |
实战场景:某主题公园预测国庆期间客流。仅用“是否节假日”二值特征,模型无法区分“国庆第一天”和“国庆最后一天”的差异。通过构造“距节假日开始天数”和“距节假日结束天数”两个连续特征,模型能学习到“假期前段客流高峰、后段回落”的模式。
4.4 天气与舆情数据融合:外部变量的价值
核心原理:天气直接影响游客出行意愿(雨天景区客流下降30%-50%),舆情反映目的地热度和口碑。融合的关键在于时间对齐和空间匹配。
融合流程:
- 时间对齐:天气数据使用预测日当天的预报值(而非实况),舆情数据使用前7天的累计提及量。
- 空间匹配:景区所在区县的气象站数据优先,若无则用最近城市数据并标注距离。
- 特征衍生:将天气和舆情组合成新特征,如“雨天+负面舆情”的交互项。
# 天气与舆情融合示例
# 天气:温度、降水概率;舆情:搜索指数、情感得分
df['bad_weather_negative'] = (df['precip_prob'] > 0.7) & (df['sentiment_score'] < 0.3)
df['comfort_index'] = df['temp'] - 0.55 * (1 - df['humidity']) * (df['temp'] - 26)
4.5 案例闭环:某古城景区预测模型的数据重构
背景与约束:某古城景区年接待游客500万人次,需预测未来14天每日客流以安排人力与物资。现有数据:近3年每日客流、节假日历、当地气象站数据、百度搜索指数。约束:预测系统需在每日早上6点前完成更新。
初始现象:原模型(仅用历史客流+节假日)MAPE(平均百分比误差)为18.5%,在暑期周末误差高达30%。
分析判断:排查发现,暑期周末误差大与当地“夜间灯光秀”活动相关,且雨天对户外演出影响显著。原模型未包含活动与天气特征。
操作步骤:
- 清洗历史客流数据,修正3个因闸机故障导致的异常零值。
- 缺失的天气数据(约8%)使用前向填充+同日期去年均值修正。
- 构造特征:距节假日天数、活动级别(0/1/2)、降水概率、体感温度、搜索指数7日均值。
- 使用LightGBM模型重新训练,采用时间序列交叉验证。
结果对比:模型MAPE从18.5%降至9.2%,暑期周末误差降至12%。代价是数据管道复杂度提升,需每日抓取活动排期和气象预报。
复盘经验:特征工程的价值大于模型选择;活动信息需提前录入系统,避免临时补充;天气特征使用预报值而非实况值,更贴近预测场景。
4.6 总结与常见误区
| 步骤 | 关键要点 | 常见误区 |
|---|---|---|
| 数据清洗 | 多键去重、逻辑校验 | 过度删除异常值 |
| 缺失值处理 | 按比例选择策略 | 全局均值填充忽略时间趋势 |
| 特征构造 | 节假日距离、活动级别 | 仅用二值“是否节假日” |
| 数据融合 | 时间对齐、空间匹配 | 使用实况天气而非预报 |