ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

时间序列分析:季节系数法的原理、计算与应用实战

时间序列分析:季节系数法的原理、计算与应用实战 1. 从“凭感觉”到“算出来”为什么我们需要季节系数法做销售预测、库存管理或者分析业务数据很多人都有过这样的经历看着月度销售额的折线图每年夏天都冲高冬天就回落心里大概知道有“季节性”但一到要定下个月的生产计划或者采购量就又开始“凭感觉”了。感觉这东西准一次是运气不准才是常态。尤其是在供应链、零售、能源这些受季节影响巨大的行业靠感觉决策带来的后果可能就是旺季断货被客户骂或者淡季库存积压到现金流断裂。“时间序列——季节系数法”要解决的就是这个“凭感觉”的问题。它不是什么高深莫测的玄学而是一套非常朴实、甚至有点“笨”的数学方法核心目标就一个把你业务数据里那些每年重复出现的季节性波动用具体的数字系数给量化出来。有了这些系数你就能回答一些非常具体的问题比如今年八月份的销量正常情况下应该是全年平均水平的多少倍一月份的用电量通常会比平均水平低多少这些问题的答案不再是“大概”、“可能”、“我觉得”而是一个可以代入公式计算的明确数值。我最早接触这个方法是在电商行业做库存计划。当时我们有一款季节性很强的产品夏天是爆款冬天几乎无人问津。采购老大每次都凭经验下单结果不是买多了就是买少了仓库和销售天天吵架。后来我们用了季节系数法虽然第一次算的时候觉得步骤繁琐但算出来的系数应用到预测模型里之后那个季度的库存周转率直接提升了30%滞销库存减少了近一半。自那以后我就明白在数据驱动的决策里这种“笨”方法往往比聪明的“感觉”更可靠。所以如果你手头有按月份、季度收集的数据比如销售额、客流量、降水量、用电量并且这些数据明显呈现出以一年为周期的重复性波动那么季节系数法就是你工具箱里必备的一件实用工具。它不要求你是统计学家只需要你有Excel和一份历史数据就能帮你把模糊的季节性认知变成清晰的决策依据。2. 拆解季节系数法的核心逻辑乘法模型与加法模型在动手计算之前我们必须先理解季节系数法背后的数学模型。这决定了我们怎么看待数据中的规律以及最终系数的含义。主流上我们主要面对两种模型乘法模型和加法模型。选对模型是第一步也是最容易出错的一步。2.1 乘法模型季节波动是比例关系乘法模型认为时间序列数据Y可以分解为四个部分的乘积Y T × S × C × IT (Trend趋势)数据长期上升或下降的大方向。比如你的品牌影响力在扩大整体销售额有逐年增长的趋势。S (Seasonal季节性)以固定周期通常为一年重复出现的波动。这就是我们要计算的“季节系数”。C (Cycle循环变动)周期不固定如经济周期的波动在短期分析中常与趋势合并考虑或忽略。I (Irregular不规则变动)随机、偶然的因素比如某个月的促销活动异常成功或者突发疫情的影响。在乘法模型里季节系数 S 是一个“倍数”或“百分比”的概念。例如计算得到8月份的季节系数是1.25那就意味着在排除趋势和随机干扰后8月份的典型值是一年平均水平的125%。如果1月份的系数是0.8则意味着是平均水平的80%。关键理解乘法模型适用于季节波动的幅度随着趋势水平变化而变化的场景。比如你公司的年销售额从1000万增长到2000万那么旺季的销售额可能从250万同比增加到500万淡季从50万增加到100万。旺季和淡季的绝对差值变大了但它们与平均水平的相对比例系数是稳定的。零售、快消品、旅游等行业的数据大多符合这个特征。2.2 加法模型季节波动是固定值加法模型则认为时间序列数据是四个部分相加的结果Y T S C I在加法模型里季节系数 S 是一个“增量”或“减量”的概念。例如8月份的季节系数是150意味着8月份通常比趋势值高出150个单位如150件商品、150千瓦时电。1月份的系数是-50则意味着比趋势值低50个单位。关键理解加法模型适用于季节波动的幅度不随趋势水平变化的场景。比如某个北方城市每年冬季因集中供暖增加的天然气用量是一个相对固定的数值不会因为城市人口缓慢增长而等比例放大。某些具有固定容量限制的服务如节假日铁路客运增加的人数也可能更接近加法模型。如何选择一个简单的视觉判断法把你多年的月度数据画成折线图。如果随着时间推移波峰和波谷的“开口”即振幅变得越来越宽那么用乘法模型更合适。如果波峰和波谷的“宽度”大致保持不变只是整体曲线在上移或下移那么加法模型可能更贴切。在实际商业分析中乘法模型的应用远多于加法模型因为大多数业务的波动都是比例性的。下文我们将以更常用的乘法模型为例展开完整的计算过程。3. 手把手计算七步搞定季节系数理论说完了我们直接上干货。假设你是一家冰淇淋店的老板有过去3年36个月的销售额数据。我们目标是通过这36个历史数据计算出代表每个月份淡旺季规律的12个季节系数。原始数据准备我们需要两列数据时间年月和销售额Y。这是最基础的要求。3.1 第一步计算移动平均MA剥离季节与随机因素既然模型是 Y T × S × I我们先忽略循环变动C那么要得到 S就得先想办法把 T 和 I 的影响去掉。移动平均Moving Average就是用来估计趋势成分 T 的利器。对于月度数据我们使用“中心化移动平均”Centered Moving Average, CMA。为什么是12期因为周期是一年12个月。为什么还要中心化因为简单移动平均会使数据错位。操作步骤计算12期简单移动平均SMA。从第7个月开始你可以得到第一个SMASMA7 (Y1Y2...Y12)/12。这个值对应的是第1到第12个月的中心点大约在第6.5个月的位置和我们实际的时间点对不上。为了将移动平均值对准实际月份我们需要再进行一次2期移动平均这就是中心化。CMA7 (SMA7 SMA8)/2。这个CMA7就很好地代表了第7个月的趋势水平T。用Excel操作非常方便。假设销售额数据在B列B2:B37时间在A列。在C列计算SMA。在C7单元格输入AVERAGE(B2:B13)然后下拉填充到C31因为需要前后各6个月的数据。在D列计算CMA。在D7单元格输入AVERAGE(C7:C8)然后下拉填充到D30。现在D列CMA就是我们对趋势T的估计值。它是一条比原始销售额平滑得多的曲线滤除了季节性和部分随机波动。3.2 第二步计算季节比率SI Ratio现在我们用原始数据除以趋势估计值Y / T ≈ S × I。这个结果被称为季节比率Seasonal-Irregular Ratio它包含了我们想要的季节性S和讨厌的随机干扰I。操作步骤在E列对应D列的CMA计算季节比率。在E7单元格输入B7/D7然后下拉填充。你会得到一列围绕1上下波动的数字。大于1说明该月通常高于趋势可能是旺季小于1则相反。3.3 第三步将季节比率排成“月份-年份”矩阵这是整理数据的关键一步目的是将不同年份同一月份的数据放在一起以便后续求平均从而消除随机干扰I。 创建一个12行1-12月、N列N3年的矩阵。把E列的季节比率按照对应的月份填入这个矩阵中。月份第一年第二年第三年1月(E列对应1月的值)......2月.....................12月.........由于移动平均导致数据缺失开头和结尾各6个月你的矩阵里某些单元格可能是空的这是正常的。3.4 第四步计算同月份的季节比率均值对于每一行即每一个月份计算该月份所有年份季节比率的平均值。这个操作就是在利用大数定律通过多年同一月份数据的平均来尽可能抵消掉随机因素I的影响从而得到相对纯净的季节性估计S。在矩阵右边加一列“月平均”。对1月这一行求第一年、第二年、第三年三个值的平均数。如果某一年缺失则忽略。用Excel的AVERAGE函数忽略空值计算即可。3.5 第五步调整月平均得到最终季节系数理论上12个月的月平均值应该等于12因为乘法模型下系数围绕1波动12个月的总和应为12。但实际计算中由于四舍五入和数据处理它们的和可能不是12。为了使系数具有一致的基准我们需要进行归一化调整。调整系数 12 / (月平均之和)最终季节系数 月平均 × 调整系数操作步骤计算12个月平均的总和。计算调整系数12/总和。将每个月的月平均乘以这个调整系数得到的就是最终的季节系数Seasonal Index。至此你就得到了12个宝贵的数字。比如7月系数1.458月系数1.521月系数0.352月系数0.40这清晰地告诉你你的冰淇淋生意在七八月是旺季销量是平均水平的1.5倍左右而一二月是严冬淡季销量只有平均水平的三四成。4. 季节系数的实战应用预测与计划算出系数不是终点用它来指导业务才是。主要有两个经典应用场景预测和反推趋势值。4.1 应用一基于趋势预测未来季节值这是最常用的场景。假设你通过其他方法比如线性回归、移动平均等预测出明年第四年的年度总销售额趋势值即剔除季节性后的平均水平T_year。或者你预测了明年每个月的趋势值T_month。如果已知年度趋势值先得到月平均趋势值T_month_avg T_year / 12。然后预测某个月的销售额 T_month_avg × 该月的季节系数。如果已知月度趋势值那就更直接了预测某个月的销售额 该月的趋势值 T_month × 该月的季节系数。举个例子你预测明年公司产品月平均趋势销售额是100万元。那么预测明年7月销售额 100万 × 1.45 145万元预测明年1月销售额 100万 × 0.35 35万元这就为你的生产计划、库存备货、营销预算提供了量化依据。4.2 应用二从实际值中反推趋势去季节化这个应用同样重要尤其在做长期战略分析时。我们经常想看看“抛开季节性影响业务的真实趋势是怎样的”这时就需要“去季节化”Deseasonalization。操作很简单实际值 ÷ 季节系数 去季节化后的值即趋势估计值继续用冰淇淋店例子假设今年7月实际销售额为145万。那么去季节化后的销售额 145万 / 1.45 100万。这个100万意味着如果7月不是旺季只是一个普通月份你的销售额水平大概是100万。把全年每个月的实际值都这样处理你就能得到一条更平滑、反映真实增长能力的趋势线用于评估团队绩效、市场增长等不会被旺季的繁荣或淡季的萧条所误导。5. 避坑指南实操中那些教科书不会提的细节方法看似清晰但一上手就会遇到各种问题。下面是我在多次实践中总结出的关键注意事项。5.1 数据量到底要多少三年是最低要求理论上数据越多计算出的系数越稳定可靠。但实践中至少需要3个完整的周期即3年月度数据。原因有二平均效应1年的数据无法区分是季节性还是单次随机事件。2年的数据可能恰好包含一个异常好和一个异常差的周期导致平均后失真。3年数据可以更好地平滑掉偶然因素。移动平均的损耗计算12期中心化移动平均会使你损失开头和结尾各6个月的数据。如果你只有2年24个月数据经过移动平均和矩阵整理后可用于计算月平均的有效数据点将非常少导致系数不可靠。如果只有1-2年数据建议谨慎使用季节系数法或者考虑使用其他更简单的季节性调整方法如同比环比并明确其局限性。5.2 如何处理异常值和缺失数据历史数据里难免有“奇葩”月份比如某年2月做了惊天动地的促销销售额是平常的三倍或者某个月数据因系统故障丢失。对于异常值在计算同月份的季节比率均值时如果发现某个值明显偏离其他年份同月份的值例如通过箱线图或“平均值±2倍标准差”法则判断可以考虑将其剔除后再计算平均。但务必记录剔除原因如“当年有超级碗促销”这本身也是重要的业务洞察。对于缺失数据如果只是零星缺失在计算移动平均和月平均时Excel的AVERAGE函数会自动忽略空值影响不大。如果连续缺失则需要考虑使用插值法如用前后月份的平均值补全或者承认该时间段系数不可计算。5.3 系数不是一成不变的警惕结构性变化这是最大的一个“坑”。你辛辛苦苦算出了过去三年的季节系数以为可以一直用下去结果发现明年预测偏差很大。为什么因为季节性模式本身可能发生变化。业务模式改变你的冰淇淋店从第三年开始在冬季大力推广“火锅冰淇淋”套餐导致1、2月销售额显著提升。那么旧的冬季系数0.3, 0.4就低估了新的业务现实。市场环境变化竞争对手的促销节奏、法定节假日调整、气候模式变化如暖冬等都可能改变原有的季节性规律。怎么办动态更新。一个实用的做法是采用“滚动窗口”法。例如始终用最近3年或5年的数据来计算系数。每年结束后加入新的一年数据剔除最早的一年数据重新计算一遍系数。这样得到的系数就能反映最新的季节性模式。5.4 乘法模型 vs 加法模型的再审视与检验在第三步我们通过矩阵和平均得到了系数。如何检验我们选的模型是否合适一个有效的后验方法是乘法模型检验用“实际值 / 系数”得到去季节化序列。这个序列应该不再有明显的以12个月为周期的波动。你可以画图观察或者计算其自相关系数ACF看在滞后12、24等处是否仍有显著峰值。如果仍有明显季节性残留说明乘法模型可能不完全适用。加法模型检验用“实际值 - 系数”得到去季节化序列进行同样的观察。在实践中如果数据严格服从一种模型另一种模型处理后的序列会呈现出“反向季节性”或周期未完全消除的特征。对于大多数商业数据乘法模型是安全的默认选择但保持检验意识能避免重大误判。6. 进阶思考当简单的季节系数法不够用时季节系数法强大而直观但它假设季节性模式是严格且稳定的。现实世界往往更复杂。6.1 处理多重季节性以“周”和“年”为例你的数据可能同时存在多种周期。最典型的是零售数据既有以年为周期的淡旺季如服装也有以周为周期的波动周末销量高。简单的12期移动平均无法捕捉周周期。解决方案先处理短周期再处理长周期。例如对于日度销售数据可以先计算“星期系数”周一至周日将数据转化为“去周季节化”的序列。然后对这个序列再按月份聚合应用我们上述的年季节系数法。使用更复杂的模型如TBATS或Prophet模型它们原生支持多重季节性分解。但这需要一定的编程能力如使用R或Python。6.2 趋势与季节的交互当系数本身在缓慢变化在乘法模型中我们假设季节系数是稳定的。但如果趋势T在剧烈变化如初创公司指数增长期季节波动的形态也可能随之演变。例如新产品渗透市场初期旺季可能越来越旺。应对思路可以考虑使用移动季节系数法。即不计算一个固定的系数矩阵而是为每个时间点如每年计算一套系数观察系数的逐年变化趋势。如果发现系数有明显的时间趋势如7月系数从1.3逐年上升到1.5那么在预测时就需要对系数本身也做一个趋势外推。这进入了更高级的时间序列建模领域如状态空间模型。6.3 与预测模型结合ARIMA与季节系数在专业预测领域季节系数法常作为预处理步骤与ARIMA等模型结合。流程是用季节系数法从原始序列Y中计算出季节成分S。得到去季节化序列Y/S T × I。对去季节化序列建立ARIMA模型预测其未来值即预测T×I。将ARIMA的预测结果乘以对应月份的季节系数S得到最终的预测值。这种方法结合了季节系数法处理确定季节性的直观性和ARIMA模型捕捉趋势与随机动态的灵活性往往能取得比单一方法更好的效果。季节系数法就像一把瑞士军刀里的主刀简单、可靠、用途广。它可能不是最精密、最自动化的工具但它能给你最直观的业务洞察和可解释的预测结果。在开始追逐复杂的机器学习模型之前熟练掌握并善用季节系数法足以解决你80%以上的业务季节性分析问题。最关键的是它能迫使你跳出模糊的经验判断真正用数据来理解和量化那些你“感觉”到的规律。当你第一次用自己计算出的系数准确预测了下个旺季的销量并成功备货时那种数据驱动决策带来的确定感和成就感是任何“凭感觉”都无法比拟的。
返回列表