You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Python实现需求规划场景下的需求变异系数计算

计算百万级商品的需求变异系数(含缺月补0处理)

没有直接的“一键函数”能完全匹配你的需求,但用Pandas可以高效实现百万行数据集的分组补全与CV计算——这是处理结构化大数据最常用的方案,比纯Numpy更适合分组场景。

核心逻辑

针对每个商品:

  1. 补全12个月份的需求数据,缺失月份的需求填0
  2. 计算补全后12个数据点的均值与标准差
  3. 用「标准差/均值」得到需求变异系数(CV),同时处理均值为0的边界情况

代码实现

假设你的数据集包含product_id(商品ID)、month(月份,1-12)、demand(月度需求)三列:

import pandas as pd
import numpy as np

# ----------------------
# 1. 模拟百万级输入数据(替换成你的实际数据)
# ----------------------
np.random.seed(42)
product_ids = np.repeat(range(100000), np.random.randint(1, 13, size=100000))
months = []
for pid in range(100000):
    n_months = np.random.randint(1,13)
    months.extend(np.random.choice(range(1,13), size=n_months, replace=False))
demand = np.random.randint(0, 100, size=len(product_ids))
df = pd.DataFrame({
    'product_id': product_ids,
    'month': months,
    'demand': demand
})

# ----------------------
# 2. 定义CV计算函数(含补0逻辑)
# ----------------------
def calculate_demand_cv(group):
    # 补全1-12月,缺失月份的demand填充为0
    full_demand = group.set_index('month').reindex(range(1,13), fill_value=0)['demand']
    
    mean = full_demand.mean()
    # 避免除以0:如果所有月份需求都是0,CV设为0(或根据业务需求改为NaN)
    if mean == 0:
        return 0
    
    # 注意:ddof=0表示总体标准差,ddof=1表示样本标准差,按需选择
    std = full_demand.std(ddof=0)
    return std / mean

# ----------------------
# 3. 分组计算所有商品的CV
# ----------------------
product_cv_results = df.groupby('product_id').apply(calculate_demand_cv).reset_index(name='demand_cv')

关键细节说明

  • 性能优化:Pandas的groupby.apply针对百万级数据做了内部优化,速度远快于手动循环;如果数据量超千万行,可改用dask.dataframe实现并行计算。
  • 标准差自由度:如果12个月是全年完整数据(总体),用ddof=0;如果是抽样数据,用ddof=1,需根据你的统计口径调整。
  • 边界处理:当商品所有月份需求都是0时,直接返回0(或NaN),避免除以0报错。

内容的提问来源于stack exchange,提问作者JB_rox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 05:40:09