调大波动系数→分布更厚尾、异常值更多、CV 排名更悬殊;调大覆盖天数系数→库存更高、库龄变长、呆滞品增多;调大季节强度→季节指数更分明;调年增长→趋势方向与显著性随之改变。改完点上方按钮,所有标签页图表与解读会立即重算。
CSV 需包含列:日期,类别,商品,期末库存量,平均库存量,库龄_天,货值_万元,当日出库,当日补货,安全库存_万元,需求波动CV,缺货标记。日期格式 YYYY-MM-DD。列名命中关键词(如"库存""出库""缺货")即可被自动识别,不必完全一致。
小提示:17520 行的完整数据在此框里编辑会很卡,建议仅对"载入完整数据"后截取的片段做小改,或用方法一更高效。
提示:本学习台围绕「④~⑧」标签页展开各类统计方法在复杂样例上的作用、图表与策略。建议依次浏览。
均值x̄ = (1/n)·Σxᵢ;中位数:有序样本的中间值(偶数个取中间两值平均)。
样本方差 / 标准差(n−1 无偏修正)s² = Σ(xᵢ−x̄)² / (n−1),s = √s²
变异系数 CV(相对波动,可与不同量纲指标比较)CV = s / |x̄|
偏度(样本修正版)g₁ = n/((n−1)(n−2)) · Σ[(xᵢ−x̄)/s]³,>0 右偏(长尾在右)。
超额峰度g₂ = n(n+1)/((n−1)(n−2)(n−3)) · Σ[(xᵢ−x̄)/s]⁴ − 3(n−1)²/((n−2)(n−3)),>0 厚尾(异常值多)。
分位数(type-7 线性插值,与 pandas 默认一致)Q(p) = x⌊h⌋ + (h−⌊h⌋)·(x⌈h⌉−x⌊h⌋),h = (n−1)·p
实现:stats.js 之 U.mean / U.variance / U.cv / U.skewness / U.kurtosis / U.quantile,浏览器内即时计算。
包含样本数、均值、中位数、标准差、变异系数(CV)、最小/Q1/Q3/最大、偏度、超额峰度。CV 反映相对波动,偏度/峰度用于判断分布形态与正态性。
直方图:等宽分箱,箱数 k = max(5, ⌈log₂n + 1⌉),箱宽 w = (max−min)/k,按落入区间计数。
核密度估计 KDE(高斯核 + Silverman 带宽)f̂(x) = (1/nh)·Σ K((x−xᵢ)/h),K(u) = e^(−u²/2)/√(2π),h = 1.06·ŝ·n^(−1/5)
经验累积分布 ECDFF̂(x) = #{xᵢ ≤ x} / n(阶梯上升,任意 x 处即小于等于 x 的比例)。
正态 Q-Q 图:样本分位 vs 理论分位 qᵢ = Φ⁻¹((i−0.375)/(n+0.25))(Blom 修正),点落在对角线上≈正态。
D'Agostino-Pearson 正态性检验(偏度+峰度联合)K² = Z₁² + Z₂²,Z₁ = √b₁/√(6/n),Z₂ = b₂/√(24/n),K² 服从 χ²(2),p = P(χ²₂ > K²);p<0.05 拒绝正态假设。需 n≥8。
Lorenz / Gini(货值集中度,x 升序且仅取正值)G = 1 + 1/n − (2/(n·Σx))·Σᵢ (n+1−i)·xᵢ,G 越大货值越集中于少数 SKU。
实现:stats.js 之 histogram / kde / ecdf / qqPlot / dagostinoPearson / lorenz;Φ⁻¹ 用 Acklam 逆正态近似,χ² 上尾用不完全 Gamma 函数(Lanczos lgamma)计算。
箱线图五数:Q1/Q2/Q3 为 type-7 分位数;须端 = 距 Q1−1.5·IQR 与 Q3+1.5·IQR(IQR=Q3−Q1)范围内的最远观测,超出者画为异常点。
小提琴图 = 各组 KDE 密度镜像叠加(KDE 公式同「③ 分布与正态性」),内部再嵌四分位箱与均值线。
Pearson 相关r = Σ(xᵢ−x̄)(yᵢ−ȳ) / √(Σ(xᵢ−x̄)² · Σ(yᵢ−ȳ)²)(线性相关,对异常值敏感)。
Spearman 等级相关ρ = Pearson(rank(x), rank(y)),并列值取平均秩;度量单调关系,更稳健。
单因素方差分析 ANOVAF = (SS_B/(k−1)) / (SS_W/(N−k)),其中 SS_B = Σnᵢ(x̄ᵢ−x̄)²,SS_W = ΣΣ(xᵢⱼ−x̄ᵢ)²;p 为 F(dfb,dfw) 上尾概率,<0.05 说明各组均值差异显著。
Kruskal-Wallis 检验(非参数,不看均值看秩)H = 12/(N(N+1)) · ΣRᵢ²/nᵢ − 3(N+1),并列修正 C = 1 − Σ(t³−t)/(N³−N),H′ = H/C ~ χ²(k−1)。
时间分组箱线图:按所选粒度(周/月/日)把该类别全部 SKU 的每日观测归入时间桶,每桶画一个箱(含均值点),观察分布随时间的位移与 IQR 变化。
实现:stats.js 之 pearson / spearman / anovaOneWay / kruskalWallis / groupValues;F 分布 p 值用不完全 Beta 函数,χ² 用不完全 Gamma。
⚠️ 货值等指标右偏且量级跨度大(同类别内高值 SKU 与低值 SKU 相差 2~3 个数量级),线性轴会被极值拉到 2700+,把多数箱体压成贴着横轴的细条。右偏数据建议保持对数刻度(间距×10 等高),箱体才能展开;对数轴上 0 / 负值不显示。切换指标后可按需开关。
聚合规则:货值 / 出库 / 补货 / 库存类指标按期求和,库龄按期取均值;周键 = 该周周一(UTC,避免时区漂移),月键 = YYYY-MM,季键 = YYYY-Qn。
移动平均(中心化,窗口 m 偶数时两端点权重 0.5,等价 2×m MA)MAₜ = (1/m)·Σⱼ₌₋ₕ..ₕ wⱼ·yₜ₊ⱼ,h = ⌊m/2⌋
指数平滑 EMAsₜ = α·yₜ + (1−α)·sₜ₋₁,s₀ = y₀
最小二乘回归 OLSb̂ = Σ(xᵢ−x̄)(yᵢ−ȳ)/Σ(xᵢ−x̄)²,â = ȳ − b̂·x̄;拟合优度 R² = SS_回/SS_总 = 1 − SSE/SST;显著性 t = b̂/SE(b̂),SE(b̂) = √(SSE/(n−2)/Sxx),p 为 t(n−2) 双尾。
Mann-Kendall 趋势检验(秩检验,不要求正态)S = Σ_{i<j} sgn(yⱼ−yᵢ);并列修正 Var(S) = [n(n−1)(2n+5) − Σt(t−1)(2t+5)]/18;Z = (S∓1)/√Var(S),τ = S/(n(n−1)/2),p = 2(1−Φ(|Z|));τ∈[−1,1] 越接近 ±1 单调趋势越强。
CUSUM 控制图C⁺ₜ = max(0, C⁺ₜ₋₁ + (yₜ−μ−k)),C⁻ₜ = min(0, C⁻ₜ₋₁ + (yₜ−μ+k)),参考值 μ = 全序列均值,k = 0.5σ,报警限 h = 5σ;C⁺ 越过 +h 表示均向上漂移。
外推预测:先线性外推 ŷₙ₊ₕ = â + b̂(n+h);月粒度再乘当月季节指数 ŷₕ ← ŷₕ · Sₘ;95% 置信带(随期数放宽的经验近似)ŷ ± 1.96·RMSE·√(1+0.05h),RMSE 为拟合残差的总体标准差。
实现:stats.js 之 aggregate / movingAverage / ema / linreg / mannKendall / cusum / trendAnalysis / nextPeriods。
月度季节指数(乘法模型)Sₘ = mean(m 月所有观测) / mean(12 个月均值);Sₘ>1 为旺季、<1 为淡季,12 项均值≈1。
加性季节分解:① 趋势 T = 中心化移动平均(m=12 时用 2×12 MA,两端点权重 0.5,消除年周期);② 去趋势 d = y − T;③ 季节 Sₚ = mean(d 在各周期位置 p) − mean(S)(中心化使 ΣS≈0);④ 残差 e = y − T − S。残差越小、季节越规律,季节结构越可预测。
自相关 ACFρ̂ₖ = Σ(yₜ−ȳ)(yₜ₊ₖ−ȳ) / Σ(yₜ−ȳ)²(分母用全样本平方和,带偏估计);在 lag = 周期长度处出现显著峰即为周期证据;95% 置信带 ±1.96/√n。
偏自相关 PACF(Levinson-Durbin 递推)φₖₖ = (ρₖ − Σⱼ φₖ₋₁,ⱼ·ρₖ₋ⱼ) / (1 − Σⱼ φₖ₋₁,ⱼ·ρⱼ),φₖⱼ = φₖ₋₁,ⱼ − φₖₖ·φₖ₋₁,ₖ₋ⱼ;剔除中间滞后传导后的"直接"相关,用于识别 AR 阶数。
同比变化YoY = (今年同期均值 − 去年同期均值) / 去年同期均值 × 100%(月粒度且 n≥24 时计算)。
实现:stats.js 之 seasonality / decompose / trendMA / acf / pacf。
ABC 分析:按 SKU 全期累计货值降序排序,逐个累计 cum% = Σ前 i 项货值 / 总货值;cum% ≤ 80% → A 类,≤ 90% → B 类,其余 → C 类(帕累托:少数 SKU 占多数资金)。
周转率(期内次数)周转率 = Σ当日出库 / mean(平均库存量);越大资金周转越快。
库龄分桶:每个 SKU 取全期平均库龄 ā = mean(库龄_天),归入 [0,30) / [30,60) / [60,90) / [90,180) / ≥180 天;后两桶即呆滞高风险区。
需求波动 CV 排名:沿用数据中的需求波动CV列 CV = σ/μ;CV 越大补货点越难定、越需要更高安全库存。
缺货率缺货率 = mean(缺货标记) × 100%(标记为 0/1,均值即缺货天数占比)。
类别间检验:对各类别的「日周转率 oₜ/aₜ = 当日出库 / 平均库存」序列做 ANOVA(F 检验)与 Kruskal-Wallis(秩检验,公式同「④ 分组对比」);库龄-周转相关用 Pearson r 并做 t 检验 t = |r|·√((n−2)/(1−r²))。
实现:stats.js 之 abcAnalysis / agingBuckets / turnoverRank / cvRank / safetyCompare / inventoryTests。
回测设置:全序列最后 H 期(可选 3/6/12)作测试集,其余为训练集;各模型只在训练集上拟合、一次性预测 H 期,再对同一窗口计算真实误差。
五个对比模型:
① 朴素法 ŷₜ = yₜ₋₁(只信最近一值);② 季节朴素 ŷₜ = yₜ₋ₘ(m=12,抄去年同期);③ 线性回归(仅趋势,OLS 外推,公式同「⑤」);④ 线性+季节 ŷₜ = â+b̂·t + Sₚ(Sₚ 为训练集各周期位置上 y−ȳ 的均值,再中心化);⑤ Holt-Winters(下)。
加性 Holt-Winters(水平 L / 趋势 b / 季节 S 三状态;α=0.4, β=0.05, γ=0.3,m=12):
初始化 L₀ = mean(y₁..m),Sᵢ = yᵢ − L₀(再中心化),b₀ = [mean(y_{m+1..2m}) − mean(y₁..m)]/m
递推 Lₜ = α(yₜ−S_{t−m}) + (1−α)(Lₜ₋₁+bₜ₋₁) bₜ = β(Lₜ−Lₜ₋₁) + (1−β)bₜ₋₁ Sₜ = γ(yₜ−Lₜ) + (1−γ)S_{t−m}
一步拟合 ŷₜ = Lₜ₋₁ + bₜ₋₁ + S_{t−m};h 步预测 ŷₙ₊ₖ = Lₙ + k·bₙ + S_{n+k−m};95% 置信带 ŷₙ₊ₖ ± 1.96·σ̂·√k(σ̂ = 残差总体标准差,随期数 k 放宽)。
误差指标(测试集 e = 真实 − 预测)MAE = (1/H)Σ|e|,RMSE = √((1/H)Σe²),MAPE = (100/H)·Σ|e/y真实|;MAE 平均误差,RMSE 惩罚大误差,MAPE 为相对误差%。三者最低者为该窗口最优模型。
残差诊断:e = y − ŷ;直方图看是否近似零均值对称;残差 ACF 落入 ±1.96/√n 带内 ≈ 白噪声,说明趋势与季节已提取充分;仍有显著峰 → 存在未建模结构(可加促销/节假日外生变量或改 ARIMA)。
实现:stats.js 之 modelBacktest / holtWinters / seasonalIndexFromSeries / ses。
柱状图:按分类列分组,每类取 count = 组内行数 或 mean = (1/nᵢ)·Σx(可选计数/均值)。
饼图:各类计数占比 pᵢ = nᵢ / Σnᵢ。
散点图:x、y 成对过滤无效值(任一缺失则整对剔除,保证配对正确),叠加 OLS 趋势线(公式同「⑤」)并标注 R²。
折线图:数值列按数据行序绘制(当前不接时间轴,看整体波动可用「⑤ 时间趋势」页)。
实现:app.js 之 renderCustom(),全部浏览器内计算。