3、数据准备与预处理:旅游数据的来源、清洗与标准化

旅游市场预测的精度,很大程度上取决于输入数据的质量。在建模之前,我们往往需要面对来自统计年鉴、OTA平台、问卷调研和移动信令等多源异构的数据。这些数据通常存在缺失、异常、量纲不一致等问题,直接使用会导致预测模型产生严重偏差。本章将系统梳理旅游数据的常见来源,并深入讲解数据清洗、缺失值处理、异常值检测与标准化方法,帮助学员建立一套完整的数据预处理工作流。

旅游数据预处理全流程 数据来源层 统计年鉴(宏观) OTA平台(微观) 问卷调研(态度) 移动信令(轨迹) 数据预处理层 数据清洗 缺失值处理 异常值检测 标准化/归一化 建模数据集 训练集 / 验证集 / 测试集 时间序列格式 特征矩阵 + 目标变量 迭代优化:数据质量评估 → 特征工程 → 模型反馈 数据质量四维评估 ① 完整性:缺失比例 < 5% 为优,5%-20% 需插补,> 20% 需评估字段去留 ② 准确性:交叉验证多源数据,识别录入错误与口径不一致 ③ 一致性:统一时间粒度(日/周/月)、统一景区/城市编码体系 ④ 时效性:OTA数据滞后1-3天,信令数据实时但需脱敏处理 ⑤ 相关性:与预测目标(游客量/收入)的相关系数需显著

3.1 旅游数据的四大来源与采集要点

旅游市场预测所需的数据来源广泛,不同来源的数据在时效性、粒度和可靠性上差异显著。理解各来源的特点,是选择预处理策略的前提。

数据来源 典型数据内容 时间粒度 主要优势 主要局限
统计年鉴/政府公报 入境游客数、旅游总收入、A级景区数量 月度/年度 权威性高、口径统一 发布滞后(通常3-6个月)
OTA平台(携程/飞猪/美团) 搜索量、预订量、价格指数、点评数 日/小时 实时性强、反映消费意愿 仅覆盖线上用户,存在平台偏差
问卷调研 游客满意度、出游意愿、消费偏好 按调研周期 获取态度与动机信息 样本量有限、主观偏差大
移动信令数据 手机用户位置轨迹、驻留时长、来源地 实时/15分钟 覆盖全量人群、客观准确 涉及隐私需脱敏、数据量大处理复杂

在实际项目中,通常采用多源数据融合策略。例如,以统计年鉴数据作为基准校准,用OTA搜索指数作为先行指标,移动信令数据用于实时监测客流,问卷数据用于解释预测结果背后的游客动机。

经验提示:OTA平台的搜索量通常领先实际预订量3-7天,领先实际到访量7-14天。在构建预测模型时,可将OTA搜索指数作为滞后变量(Lagging Variable)或先行指标(Leading Indicator)纳入特征集。

3.2 数据清洗:从原始数据到可用数据

数据清洗是预处理的第一步,目标是识别并修正数据中的明显错误、重复记录和格式不一致问题。旅游数据中常见的清洗任务包括:

  1. 去重处理:同一游客在OTA平台可能产生多条搜索记录,需按用户ID+时间戳去重;统计年鉴中不同章节可能重复统计同一指标。
  2. 格式统一:日期格式统一为YYYY-MM-DD;景区名称统一编码(如"故宫博物院"与"故宫"需合并);金额单位统一为万元或亿元。
  3. 逻辑校验:游客数量不能为负数;单日游客量不应超过景区最大承载量;酒店入住率应在0-100%之间。
  4. 口径对齐:统计年鉴中的"国内游客"与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)或建模时忽略 重要变量缺失严重 考虑是否删除该变量或使用专门算法
案例拆解:某5A景区客流数据缺失处理
背景:某山岳型景区因山顶气象站故障,2023年7月15-17日连续3天日游客量数据缺失。该景区平日日均游客约8000人,周末可达15000人。
分析过程:① 检查缺失机制——故障期间天气晴朗,非极端天气导致,判断为MCAR;② 对比历史同期——2022年7月同期日均游客量为7500人;③ 利用OTA搜索指数——缺失期间搜索量较前一周上涨12%,预示实际客流可能偏高。
处理方案:采用回归插补法,以历史同期游客量、当日是否为周末、OTA搜索指数为自变量建立回归模型,估算缺失值分别为9200、10500、9800人。
结果验证:后续通过移动信令数据反推,实际客流约为9400、10800、10100人,误差在3%以内。
复盘经验:单一插补方法可能产生偏差,多源交叉验证可显著提升插补精度。

3.4 异常值检测方法

异常值(Outlier)是指与其他观测值显著偏离的数据点。在旅游预测中,异常值可能来自:大型活动(如国庆阅兵)带来的客流激增、系统故障导致的错误记录、或真实的市场突变(如疫情导致的断崖式下跌)。

常用检测方法:

  1. 3σ原则:适用于近似正态分布的数据,超出均值±3倍标准差的值视为异常。但旅游数据常呈偏态分布,需先进行对数变换。
  2. IQR(四分位距)法:定义Q1-1.5×IQR和Q3+1.5×IQR为合理范围,超出即为异常。对偏态分布更稳健。
  3. 时间序列分解法:将序列分解为趋势、季节、残差三部分,残差超过阈值即为异常。适合识别节假日等季节性异常。
  4. 机器学习方法:孤立森林(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)]
风险提示:异常值不一定是"错误"数据。例如,某景区因举办音乐节单日游客量达到平日的5倍,这属于真实事件导致的异常。直接删除会丢失重要信息,建议先标记、再结合业务背景判断是否保留或单独建模。

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年新增了夜游项目,导致游客量统计口径变化,需在预处理时加入虚拟变量或分段处理。
总结复盘:数据预处理不是一次性的"清理工作",而是贯穿整个建模周期的迭代过程。建议建立数据质量监控看板,定期检查各数据源的完整性、时效性和异常比例。当模型预测精度下降时,首先排查数据质量是否发生变化,而非急于调整模型参数。

通过本章的学习,学员应掌握从多源数据采集到标准化建模数据的完整处理链路。下一阶段,我们将进入特征工程环节,探讨如何从预处理后的数据中提取更有预测力的特征变量。