3、数据准备与预处理:旅游数据的来源、清洗与标准化
旅游市场预测的精度,很大程度上取决于输入数据的质量。在建模之前,我们往往需要面对来自统计年鉴、OTA平台、问卷调研和移动信令等多源异构的数据。这些数据通常存在缺失、异常、量纲不一致等问题,直接使用会导致预测模型产生严重偏差。本章将系统梳理旅游数据的常见来源,并深入讲解数据清洗、缺失值处理、异常值检测与标准化方法,帮助学员建立一套完整的数据预处理工作流。
3.1 旅游数据的四大来源与采集要点
旅游市场预测所需的数据来源广泛,不同来源的数据在时效性、粒度和可靠性上差异显著。理解各来源的特点,是选择预处理策略的前提。
| 数据来源 | 典型数据内容 | 时间粒度 | 主要优势 | 主要局限 |
|---|---|---|---|---|
| 统计年鉴/政府公报 | 入境游客数、旅游总收入、A级景区数量 | 月度/年度 | 权威性高、口径统一 | 发布滞后(通常3-6个月) |
| OTA平台(携程/飞猪/美团) | 搜索量、预订量、价格指数、点评数 | 日/小时 | 实时性强、反映消费意愿 | 仅覆盖线上用户,存在平台偏差 |
| 问卷调研 | 游客满意度、出游意愿、消费偏好 | 按调研周期 | 获取态度与动机信息 | 样本量有限、主观偏差大 |
| 移动信令数据 | 手机用户位置轨迹、驻留时长、来源地 | 实时/15分钟 | 覆盖全量人群、客观准确 | 涉及隐私需脱敏、数据量大处理复杂 |
在实际项目中,通常采用多源数据融合策略。例如,以统计年鉴数据作为基准校准,用OTA搜索指数作为先行指标,移动信令数据用于实时监测客流,问卷数据用于解释预测结果背后的游客动机。
3.2 数据清洗:从原始数据到可用数据
数据清洗是预处理的第一步,目标是识别并修正数据中的明显错误、重复记录和格式不一致问题。旅游数据中常见的清洗任务包括:
- 去重处理:同一游客在OTA平台可能产生多条搜索记录,需按用户ID+时间戳去重;统计年鉴中不同章节可能重复统计同一指标。
- 格式统一:日期格式统一为YYYY-MM-DD;景区名称统一编码(如"故宫博物院"与"故宫"需合并);金额单位统一为万元或亿元。
- 逻辑校验:游客数量不能为负数;单日游客量不应超过景区最大承载量;酒店入住率应在0-100%之间。
- 口径对齐:统计年鉴中的"国内游客"与OTA平台的"间夜量"口径不同,需通过换算系数对齐。
# 数据清洗示例(Python伪代码)
import pandas as pd
# 1. 去重
df = df.drop_duplicates(subset=['user_id', 'search_date', 'destination'])
# 2. 日期格式统一
df['date'] = pd.to_datetime(df['date'], format='%Y%m%d')
# 3. 逻辑校验:剔除负值
df = df[df['visitor_count'] >= 0]
# 4. 口径换算:OTA间夜量 → 游客人次(假设平均停留1.8天)
df['estimated_visitors'] = df['room_nights'] / 1.8
3.3 缺失值处理策略
旅游数据中的缺失值极为常见:景区可能因设备故障缺失某日客流数据;问卷中部分受访者未回答收入问题;OTA平台在淡季可能无搜索数据。缺失值处理需根据缺失机制和缺失比例选择合适方法。
缺失机制分类:
- 完全随机缺失(MCAR):缺失与任何变量无关,可直接删除或简单插补。
- 随机缺失(MAR):缺失与其他已观测变量相关,如雨天更可能缺失户外景区数据,需用模型插补。
- 非随机缺失(MNAR):缺失与缺失值本身相关,如游客量极低时可能不记录,需谨慎处理。
| 缺失比例 | 推荐方法 | 适用场景 | 注意事项 |
|---|---|---|---|
| < 5% | 删除缺失记录 | 数据量大、缺失随机 | 确保删除后样本仍具代表性 |
| 5% - 15% | 均值/中位数/众数插补 | 数值型变量、缺失随机 | 会降低方差,需在后续建模中注意 |
| 15% - 30% | 回归插补 / KNN插补 | 存在相关变量可辅助预测 | 需验证插补值合理性 |
| > 30% | 多重插补(MICE)或建模时忽略 | 重要变量缺失严重 | 考虑是否删除该变量或使用专门算法 |
背景:某山岳型景区因山顶气象站故障,2023年7月15-17日连续3天日游客量数据缺失。该景区平日日均游客约8000人,周末可达15000人。
分析过程:① 检查缺失机制——故障期间天气晴朗,非极端天气导致,判断为MCAR;② 对比历史同期——2022年7月同期日均游客量为7500人;③ 利用OTA搜索指数——缺失期间搜索量较前一周上涨12%,预示实际客流可能偏高。
处理方案:采用回归插补法,以历史同期游客量、当日是否为周末、OTA搜索指数为自变量建立回归模型,估算缺失值分别为9200、10500、9800人。
结果验证:后续通过移动信令数据反推,实际客流约为9400、10800、10100人,误差在3%以内。
复盘经验:单一插补方法可能产生偏差,多源交叉验证可显著提升插补精度。
3.4 异常值检测方法
异常值(Outlier)是指与其他观测值显著偏离的数据点。在旅游预测中,异常值可能来自:大型活动(如国庆阅兵)带来的客流激增、系统故障导致的错误记录、或真实的市场突变(如疫情导致的断崖式下跌)。
常用检测方法:
- 3σ原则:适用于近似正态分布的数据,超出均值±3倍标准差的值视为异常。但旅游数据常呈偏态分布,需先进行对数变换。
- IQR(四分位距)法:定义Q1-1.5×IQR和Q3+1.5×IQR为合理范围,超出即为异常。对偏态分布更稳健。
- 时间序列分解法:将序列分解为趋势、季节、残差三部分,残差超过阈值即为异常。适合识别节假日等季节性异常。
- 机器学习方法:孤立森林(Isolation Forest)、LOF(局部异常因子)等,适合多维特征联合检测。
# IQR法检测异常值示例
Q1 = df['daily_visitors'].quantile(0.25)
Q3 = df['daily_visitors'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
outliers = df[(df['daily_visitors'] < lower_bound) | (df['daily_visitors'] > upper_bound)]
3.5 标准化与归一化方法
旅游预测模型(如回归、神经网络、SVM)对特征的量纲敏感。例如,游客量(以万计)与温度(以℃计)数值差异巨大,若不处理,模型会错误地认为游客量特征更重要。标准化和归一化是解决这一问题的核心手段。
| 方法 | 公式 | 输出范围 | 适用场景 |
|---|---|---|---|
| Z-score标准化 | z = (x - μ) / σ | 无固定范围,均值为0,标准差为1 | 数据近似正态分布;模型假设特征服从高斯分布 |
| Min-Max归一化 | x' = (x - min) / (max - min) | [0, 1] | 数据有明确边界;神经网络等需要有限输入范围的模型 |
| RobustScaler | x' = (x - median) / IQR | 无固定范围,受异常值影响小 | 数据含较多异常值;使用中位数和四分位距 |
| 对数变换 | x' = log(x) | 压缩大数值 | 数据呈指数增长(如OTA搜索量);右偏分布 |
选择建议:若后续使用树模型(随机森林、XGBoost),标准化并非必需,因为树模型基于分裂点而非距离计算;若使用KNN、SVM、神经网络或线性回归,则必须进行标准化。时间序列预测中,通常对目标变量做差分或对数变换以平稳化,对特征做Z-score标准化。
原始数据:2018-2023年共72个月度数据,包含:月度游客量(万人)、平均房价(元)、OTA搜索指数、高铁通车里程(公里)、当月节假日天数。
预处理步骤:
① 清洗:剔除2020年2月(疫情极端值,标记为异常但保留用于对比);
② 缺失值:2021年6月OTA指数缺失,采用前后月均值插补;
③ 异常值:2023年4月游客量突增35%,经查为"五一"假期提前释放需求,保留并标记;
④ 标准化:对房价和搜索指数做Z-score标准化,对游客量做对数变换(ln),对节假日天数做Min-Max归一化。
结果:模型RMSE从预处理前的2.31万人降至1.08万人,预测精度提升53%。
复盘:对数变换有效解决了游客量数据的右偏问题;异常值标记而非删除,保留了市场突变信息。
3.6 常见误区与总结复盘
在数据预处理实践中,学员常犯以下错误,需特别警惕:
- 先切分数据再预处理:正确做法是先对全量数据做预处理,再切分训练集/测试集,避免数据泄露(Data Leakage)。标准化参数(均值、标准差)只能从训练集计算,再应用到测试集。
- 忽略时间序列的顺序性:旅游数据是时间序列,不能随机打乱后交叉验证,需使用时间序列交叉验证(如滚动预测)。
- 过度清洗:将真实的市场波动(如节假日高峰)误判为异常值删除,导致模型失去对旺季的预测能力。
- 标准化后无法还原:在业务汇报时,需将预测结果还原为原始量纲,因此需保存标准化参数。
- 忽视数据口径变化:如景区在2022年新增了夜游项目,导致游客量统计口径变化,需在预处理时加入虚拟变量或分段处理。
通过本章的学习,学员应掌握从多源数据采集到标准化建模数据的完整处理链路。下一阶段,我们将进入特征工程环节,探讨如何从预处理后的数据中提取更有预测力的特征变量。