导读:本期是全网最全【资源调度】系列推文的第4期(共50期左右)。前3期我们客服调度问题做了具体定义,本期我们将基于一份真实数据,生成【客服调度】数据集,为后续的算法求解提供数据支撑。另外,偷偷地告诉大家一个好消息:本期文章我们计划开展一次直播交流,直播内容可根据大家对本期推文的反馈定制哟,预告可见文末~
作者2:李涵
组长:biubiu
Mentor:向杜兵,某制造业龙头算法专家
Mentor:张哲铭,某互联网大厂算法专家
大家好!我们是IndustryOR团队,致力于分享业界落地的OR+AI技术。欢迎关注微信公众号/知乎/CSDN【运筹匠心】。
邀请大家**【加入粉丝群】,群里经常分享硬核内容,且大佬多多,说不定你未来的leader就在其中!【加群方式附在文章结尾】~~**
本篇文章共分为5个部分,依次为:
01 真实数据分析
02 数据生成
03 效果评价
04 小结
05 直播预告
在该系列第二期推文《如何解决资源调度问题》中,我们将问题解决方案拆解为4个模块,分别为仿真系统模块、调度算法模块、指标检验模块和衍生问题模块。其中,调度算法模块需要输入大量数据集进行算法迭代测试,由于我们没有大量真实的数据,因此决定采用数据仿真技术来扩充数据集。
数据仿真的方法和技术有很多,例如适用于图像、文本和时间序列数据的数据增强,插值方法;适用于表格型特征有限数据的随机采样、重采样、核密度估计等;适用于高维复杂数据模型的生成对抗网络GAN、变分自编码器VAE等。不同的方法在不同领域和任务中各有优势,选择适当的方法取决于具体的数据类型和应用场景。考虑到真实数据集的特点和可解释性,以下主要基于统计的方法进行数据仿真。
在本期推文中,我们将以任务属性数据生成为例,介绍如何基于一份真实数据,通过对真实数据的属性及属性特征分布进行分析,判断不同属性的数据之间是否互相独立;然后,以此为依据对真实数据进行仿真生成;最后,将仿真数据分布与真实数据分布作相似性检验,评价仿真数据是否贴合真实数据。
01 真实数据分析
下表为一个真实的任务属性数据表,共有8840条记录。表中各列含义如下:
- task_ID: 任务id
- task_startTime: 任务产生时刻
- task_type: 任务类型
- task_maxResponseTime: 任务最大响应时长
task_ID | task_startTime | task_type | task_maxResponseTime |
---|---|---|---|
1 | 481 | 2 | 45 |
2 | 482 | 33 | 45 |
3 | 484 | 2 | 45 |
4 | 486 | 10 | 15 |
5 | 486 | 2 | 45 |
6 | 486 | 40 | 45 |
7 | 486 | 50 | 5 |
8 | 487 | 3 | 45 |
9 | 487 | 3 | 45 |
10 | 489 | 2 | 45 |
… | … | … | … |
8839 | 1199 | 79 | 15 |
8840 | 1199 | 20 | 45 |
1.1 单变量分析
单变量分析主要是对数据集中各属性数据进行单独分析,以了解各属性数据的基本特征和分布情况。分别绘制任务产生时刻、任务类型、任务最大响应时间的分布直方图,对单变量分布进行分析。主要帮助了解任务的性质和分布,指导后续数据生成。
- 横轴代表任务产生时刻,单位为分钟,从480-1200(8:00-20:00)分为24个区间,每个区间的宽度30min。纵轴代表每个时间段内的任务数量。
- 任务产生时刻具有双峰分布特征,峰值主要集中在9:00-12:00、15:00-17:00。说明在这两个时间段的任务数量较多,属于高峰期。
- 其他时间段的任务数量相对较低,例如午休时间段12:30-13:30的任务数量明显较少。
- 横轴表示各种任务类型(共107种),纵轴表示每种任务类型的任务数量。
- 数据显现出单峰分布并且明显右偏,任务类型为1的任务数量达到1000个,任务类型为2的任务数量达到900个。这些任务在总体中占据绝大部份,是高频任务类型。
- 随着任务类型变化,从左到右,任务数量逐渐减少,右侧拖尾长,表明这些任务类型的频数较低但多样化。这些任务可能是复杂度较高或特殊的任务,不会频繁出现。
- 横轴代表最大响应时间的三个类别:5分钟、15分钟和45分钟;纵轴表示每个类别的任务数量
- 大多数最大响应时间为45分钟,相应的频数达到6050,是三类时间段中最高的。5分钟响应时间的任务数量最少,频数为1022.
1.2 联合分布分析
联合分布分析是对两个或多个变量之间的关系和相互影响进行分析。由于数据集各属性之间可能存在关联或依赖关系,因此还需要对数据进行联合分布分析。联合分布分析分为条件概率分布和联合概率分布。
- 条件概率分布 f ( A ∣ B ) f(A|B) f(A∣B) :描述A在B给定情况下的分布情况,即 “在已知一个变量的情况下,另一个变量的分布情况如何?”
- 联合概率分布 f ( A , B ) f(A,B) f(A,B) :描述A、B同时发生的概率,即 “这些变量组合同时出现的可能性是多少?”
下面对任务产生时刻、任务类型、任务最大响应时间进行联合分布分析。
(1)任务产生时刻&类型
f ( task_startTime|task_type ) f(\text{task\_startTime|task\_type}) f(task_startTime|task_type)
- 上图展示了给定任务类型的任务产生时刻的条件分布,横轴表示任务开始的时刻,纵轴表示任务的频数。分类变量为任务类型。其中任务类型编号越大,对应曲线颜色越深。
- 任务产生时刻的分布呈现出明显的双峰特征。不同任务类型的产生时刻分布差异不大,9:00-12:00、15:00-17:00是各类任务产生的高峰期。
- 对于任务类型编号较大(60以上)的任务,密度曲线的形状略有不同。这些曲线在上午和下午的高峰之外,可能显示出额外的波动或第三个小高峰,这样的变化可能源于这些任务的特殊性质或不同的处理流程。
f
(
task_startTime,task_type
)
f(\text{task\_startTime,task\_type})
f(task_startTime,task_type)
- 上图展示了任务产生时刻和任务类型的联合分布。
- 任务类型为1到10的任务占据了直方图的绝大部分面积,其密度曲线显著较高。这表明在所有任务类型中,类型1到10的任务在所有记录的任务产生时刻内都具有更高的出现频率。与前文任务类型的偏态分布相符。
- 任务类型编号大于10的任务的分布存在显著差异。这些任务的直方图面积较小,密度曲线低,显示出它们的任务频数较少并集中下方。这表明任务类型11及以上的任务数量相对较少,它们的任务产生时刻分布较分散,没有明显的高峰时段。
(2)任务产生时刻&最大响应时长
f
(
task_startTime|task_maxResponseTime
)
f(\text{task\_startTime|task\_maxResponseTime})
f(task_startTime|task_maxResponseTime)
- 上图展示了给定最大响应时长的任务产生时刻的条件分布,横轴表示任务开始的时刻,纵轴表示任务的频数。分类变量为最大响应时长。
- 任务产生时刻的分布依然呈现出明显的双峰特征。不同最大响应时长的时刻分布基本一致
f
(
task_startTime,task_maxResponseTime
)
f(\text{task\_startTime,task\_maxResponseTime})
f(task_startTime,task_maxResponseTime)
- 上图展示了任务产生时刻和最大响应时长的联合分布。
- 任务响应时长为45分钟的类别占据了直方图的绝大部分面积,其密度曲线显著较高。与前文任务响应时长的频数分布一致。
(3)任务类型&最大响应时长
f
(
task_type|task_maxResponseTime
)
f(\text{task\_type|task\_maxResponseTime})
f(task_type|task_maxResponseTime)
- 上图展示了给定最大响应时长的任务类型的条件分布,横轴表示任务类型,纵轴表示任务的频数。分类变量为最大响应时长。
- 任务类型1-10的区域三条密度曲线分别对应最大响应时长为5分钟、15分钟和45分钟,显示出显著的差异。45分钟最大响应时长的密度曲线明显高于其他两类。
- 任务类型1-10的区域之外三条密度曲线基本重叠,说明三类的条件分布基本相同。
f
(
task_type,task_maxResponseTime
)
f(\text{task\_type,task\_maxResponseTime})
f(task_type,task_maxResponseTime)
- 上图展示了任务类型和最大响应时长的联合分布。
- 与条件分布相比,由于最大响应时长为45min的任务数量更多,进一步使得其密度曲线形状与其他两类差异变大,说明不同最大响应时长下的任务类型条件分布不同。
(4)任务最大响应时长&类型&产生时刻
f
(
task_startTime|task_type,task_maxResponseTime
)
f(\text{task\_startTime|task\_type,task\_maxResponseTime})
f(task_startTime|task_type,task_maxResponseTime)
- 上图展示了给定最大响应时长、任务类型的任务产生时刻的条件分布,x轴为任务产生时刻,y轴为任务类型,z轴为曲线密度值。分类变量为最大响应时长。
- 在任务类型1到10的部分,密度曲线主要呈现双峰分布,且形状相似;随着任务类型的增大,密度曲线显示出显著的差异。
(5)卡方独立性检验
将任务产生时刻、任务类型离散化,利用卡方检验统计量(详见3.2节),进一步检验三个变量之间的独立性。
变量 | 卡方统计值 | p-value | 独立性 |
---|---|---|---|
task_startTime&task_type | 185.7546 | 0.0883 | 独立 |
task_startTime&task_maxResponseTime | 42.2202 | 0.6313 | 独立 |
task_type&task_maxResponseTime | 499.1466 | 1.406e-97<0.05 | 有关联 |
- 卡方值非常大意味着观察到的频率和期望频率之间存在显著差异;
- p值非常小意味着检验结果非常显著(显著性水平取0.05),拒绝原假设(原假设为变量之间没有关联)
1.3 总结
- 任务产生时刻呈双峰分布;任务类型呈单峰右偏分布;最大响应时长分为5、15、45分钟三类,频数依次递增
- 任务产生时刻、任务类型、最大响应时长三者不满足互相独立条件
- 任务产生时刻与任务类型互相独立;任务产生时刻与最大响应时长互相独立;任务类型与最大响应时长有关联
02 数据生成
定义: X为task_startTime,Y为task_type,Z为task_maxResponseTime,根据以上分析有:
- 在不同的水平 Y 下,X 的分布不存在差异,即 X 和 Y 相互独立。
- 在不同的水平 Z 下,X 的分布不存在差异,即 X 和 Z 相互独立。
- 在不同的水平 Z 下,Y 的分布存在差异,即 Y 和 Z 不独立
P
(
X
,
Y
,
Z
)
≠
P
(
X
)
⋅
P
(
Y
)
⋅
P
(
Z
)
P(X, Y, Z) ≠ P(X) \cdot P(Y) \cdot P(Z)
P(X,Y,Z)=P(X)⋅P(Y)⋅P(Z)
因此,仿真目标为:
P
(
X
,
Y
,
Z
)
=
P
(
Y
,
Z
∣
X
)
⋅
P
(
X
)
P(X, Y, Z) = P(Y, Z|X) \cdot P(X)
P(X,Y,Z)=P(Y,Z∣X)⋅P(X)
故可以用基于联合概率分布 P ( X , Y , Z ) P(X, Y, Z) P(X,Y,Z) 和 基于条件概率分布 P ( Y , Z ∣ X ) ⋅ P ( X ) P(Y, Z|X) \cdot P(X) P(Y,Z∣X)⋅P(X) 两种方式生成数据。
2.1 基于联合概率分布生成
(1)计算样本数据的联合概率分布
(2)从联合概率分布中随机生成任务数据,包括任务产生时刻、任务类型、最大响应时长
优点:简单直接,不用考虑单个特征属性的分布性质
缺点:只有一天的任务数据,无法反映多天的任务分布情况
生成数据如下所示。
task_startTime task_type task_maxResponseTime
0 502 30 15
1 498 2 45
2 500 67 45
3 489 27 45
4 489 21 45
... ... ... ...
8835 1170 8 45
8836 1198 2 45
8837 1186 3 45
8838 1171 2 45
8839 1172 35 45
2.2 基于条件概率分布生成
(1)计算样本数据的条件概率分布P(Y,Z|X)
(2)对于给定时间段,例如08:30-09:00,从P(Y,Z|X= 08:30-09:00)中随机生成任务类型Y和最大响应时长Z
(3)重复步骤(2),直到生成足够数量的任务数据
(4)指定任务产生时刻的时间范围,例如08:30-09:00,在时间范围内随机采样,生成task_startTime
(5)若要生成一天的数据,则需根据核密度方法KDE随机抽取一天的时间点或根据概率分布随机抽取一天时间段,重复步骤(1)-(4)
- 优点:灵活度较高,可以对指定时间段的任务分布情况进行建模
- 缺点:需要考虑单个特征属性的分布性质;同样无法反映多天的任务分布情况
生成数据如下所示。
task_startTime task_type task_maxResponseTime
0 496 30 15
1 483 24 45
2 502 3 45
3 494 17 45
4 500 22 5
... ... ... ...
8835 1193 6 15
8836 1177 26 15
8837 1178 5 45
8838 1174 2 15
8839 1192 17 45
03 效果评价
3.1 可视化
对基于联合概率分布生成的数据和基于条件概率分布生成的数据效果进行可视化对比
(1) 基于联合概率分布生成
(2) 基于条件概率分布生成
- 各维度下真实数据集与生成数据集频率和概率密度几乎完全相同,说明无论采用哪种概率分布方法,我们生成的数据在关键特征上的统计特性表现是高度一致的。
- 结果验证了两种建模方法在生成数据时的有效性和可靠性。
3.2 检验统计量
检验两个分布是否一致主要包括经典的统计检验和信息理论检验方法。以下是一些常见的方法及其适用场景:
(1)KS检验(Kolmogorov-Smirnov检验)
KS检验是一种用于比较两个概率分布的非参数检验方法,主要比较其累积分布函数(CDF)
计算步骤:
1)计算累积分布函数:
-
给定两组样本,样本1有 n n n 个观测值 { x 1 , x 2 , … , x n x_1, x_2, \dots, x_n x1,x2,…,xn},样本2有 m m m 个观测值 { y 1 , y 2 , … , y m y_1, y_2, \dots, y_m y1,y2,…,ym}。
-
计算样本1的经验分布函数 F n ( x ) F_n(x) Fn(x) 和样本2的经验分布函数 G m ( x ) G_m(x) Gm(x)。
2)计算KS统计量:
- 计算两个经验分布函数之间的最大差异:
D n , m = sup x ∣ F n ( x ) − G m ( x ) ∣ D_{n,m} = \sup_{x} |F_n(x) - G_m(x)| Dn,m=xsup∣Fn(x)−Gm(x)∣
其中,
s
u
p
sup
sup 表示上确界。对于函数
f
(
x
)
f(x)
f(x) 在某个区间 [a, b] 上的所有取值,如果存在某个值
c
c
c 是这些取值的上界,并且在所有可能的这些上界中是最小的,那么这个
c
c
c 就称为
f
(
x
)
f(x)
f(x) 在 [a, b] 上的上确界,记作
sup
x
∈
[
a
,
b
]
f
(
x
)
\sup_{x \in [a, b]} f(x)
supx∈[a,b]f(x)。
在此可直观地理解为两个分布差异的最大值,如下图:
适用场景:
- 比较两个连续随机变量的分布。
- 无需假设数据的分布形式(非参数)。
- 对于离散数据表现较差。
(2)卡方检验(Chi-square检验)
卡方检验用于检验观察到的频数分布与期望的频数分布之间是否存在显著差异。
计算步骤:
1)构建交叉表:
-
将两个离散变量的观测频数数据组合成一个二维的交叉表格。这些频数代表不同类别的联合分布。
-
假设我们有以下对于最大响应时长有如下观测频数数据:
-
真实数据 F F F 取值为 5 5 5、 15 15 15、 45 45 45,对应的频数分别是 20 20 20、 25 25 25、 55 55 55。
-
生成数据 G G G 取值为 5 5 5、 15 15 15、 45 45 45,对应的频数分别是 22 22 22、 24 24 24、 54 54 54。
-
我们可以将这些数据构建成一个交叉表:
5 15 45 总计 F F F 20 25 55 100 G G G 22 24 54 100 -
总体样本数 N N N = 200 (两个样本总和)。
2)计算期望频数:
-
期望频数基于行和列的总和来计算:
E i j = R i ⋅ C j N E_{ij} = \frac{R_i \cdot C_j}{N} Eij=NRi⋅Cj
其中, R i R_i Ri 是第 $ i $ 行的总和, C j C_j Cj 是第 j j j 列的总和, N N N 是样本总数。
我们可以计算每个类别下的期望频数: -
对于值 5 5 5:
- E F , 5 = ( 100 ⋅ 42 200 ) = 21 E_{F, 5} = \left(\frac{100 \cdot 42}{200}\right) = 21 EF,5=(200100⋅42)=21
- E G , 5 = ( 100 ⋅ 42 200 ) = 21 E_{G, 5} = \left(\frac{100 \cdot 42}{200}\right) = 21 EG,5=(200100⋅42)=21
-
对于值 15 15 15:
- E F , 15 = ( 100 ⋅ 49 200 ) = 24.5 E_{F, 15} = \left(\frac{100 \cdot 49}{200}\right) = 24.5 EF,15=(200100⋅49)=24.5
- E G , 15 = ( 100 ⋅ 49 200 ) = 24.5 E_{G, 15} = \left(\frac{100 \cdot 49}{200}\right) = 24.5 EG,15=(200100⋅49)=24.5
-
对于值 45 45 45:
- E F , 45 = ( 100 ⋅ 109 200 ) = 54.5 E_{F, 45} = \left(\frac{100 \cdot 109}{200}\right) = 54.5 EF,45=(200100⋅109)=54.5
- E G , 45 = ( 100 ⋅ 109 200 ) = 54.5 E_{G, 45} = \left(\frac{100 \cdot 109}{200}\right) = 54.5 EG,45=(200100⋅109)=54.5
-
所以期望频数的交叉表如下:
5 15 45 总计 F F F (Observed) 20 25 55 100 E E E (Expected) 21 24.5 54.5 100 G G G (Observed) 22 24 54 100 E E E (Expected) 21 24.5 54.5 100
3)计算卡方统计量:
- 通过观测频数
O
i
j
O_{ij}
Oij 和期望频数
E
i
j
E_{ij}
Eij 计算卡方统计量:
χ 2 = ∑ i = 1 r ∑ j = 1 c ( O i j − E i j ) 2 E i j \chi^2 = \sum_{i=1}^{r} \sum_{j=1}^{c} \frac{(O_{ij} - E_{ij})^2}{E_{ij}} χ2=i=1∑rj=1∑cEij(Oij−Eij)2
我们分别计算各项:
-
对于值 5 5 5:
- ( 20 − 21 ) 2 21 + ( 22 − 21 ) 2 21 = 1 21 + 1 21 ≈ 0.095 \frac{(20 - 21)^2}{21} + \frac{(22 - 21)^2}{21} = \frac{1}{21} + \frac{1}{21} \approx 0.095 21(20−21)2+21(22−21)2=211+211≈0.095
-
对于值 15 15 15:
- ( 25 − 24.5 ) 2 24.5 + ( 24 − 24.5 ) 2 24.5 = 0.25 24.5 + 0.25 24.5 ≈ 0.02 \frac{(25 - 24.5)^2}{24.5} + \frac{(24 - 24.5)^2}{24.5} = \frac{0.25}{24.5} + \frac{0.25}{24.5} \approx 0.02 24.5(25−24.5)2+24.5(24−24.5)2=24.50.25+24.50.25≈0.02
-
对于值 45 45 45:
- ( 55 − 54.5 ) 2 54.5 + ( 54 − 54.5 ) 2 54.5 = 0.25 54.5 + 0.25 54.5 ≈ 0.0092 \frac{(55 - 54.5)^2}{54.5} + \frac{(54 - 54.5)^2}{54.5} = \frac{0.25}{54.5} + \frac{0.25}{54.5} \approx 0.0092 54.5(55−54.5)2+54.5(54−54.5)2=54.50.25+54.50.25≈0.0092
总的卡方统计量为:
χ
2
≈
0.095
+
0.02
+
0.0092
=
0.1242
\chi^2 \approx 0.095 + 0.02 + 0.0092 = 0.1242
χ2≈0.095+0.02+0.0092=0.1242
4)计算自由度:
-
自由度计算公式为 ( r − 1 ) × ( c − 1 ) (r-1) \times (c-1) (r−1)×(c−1)。
-
在这个例子中: r = 2 r = 2 r=2(两个样本), c = 3 c = 3 c=3(三个类别)
d f = ( 2 − 1 ) × ( 3 − 1 ) = 1 × 2 = 2 df = (2 - 1) \times (3 - 1) = 1 \times 2 = 2 df=(2−1)×(3−1)=1×2=2
5)检测显著性:
- 查找卡方分布表,比较计算得到的卡方统计量与临界值,或者直接使用p值判断统计显著性。如果p值小于显著性水平(如0.05),则可以认为两个分布显著不同。
适用场景:
- 比较两个离散随机变量的分布。
- 常用于独立性检验和适配性检验。
(3)Fisher联合检验 (Fisher’s Combined Probability Test)
一种用于将多个独立检验的p值联合起来评估总体显著性的统计方法。基本原理是,将多个独立检验的p值转换为卡方分布下的一种统计量,并通过这统计量判断总体显著性。
计算步骤:
对于 k k k 个独立检验,其p值分别为 p 1 , p 2 , . . . , p k p_1, p_2, ..., p_k p1,p2,...,pk。
1)计算统计量:
- 首先,计算每个p值的对数: − 2 ln ( p i ) -2 \ln(p_i) −2ln(pi)。
- 将这些值相加,得到Fisher检验的统计量
X
2
X^2
X2:
X 2 = − 2 ∑ i = 1 k ln ( p i ) X^2 = -2 \sum_{i=1}^{k} \ln(p_i) X2=−2i=1∑kln(pi)
2)卡方分布:在零假设采纳的情况下, X 2 X^2 X2 服从自由度为 2 k 2k 2k 的卡方分布。
3)计算联合p值:通过计算 X 2 X^2 X2 在卡方分布中的累积概率,可以得到联合检验的p值。
适用场景: 当有多个独立的试验或研究,每个试验产生一个p值,使用费歇尔联合检验可以综合这些p值以得到总体显著性。
(4)JS散度
一种用于衡量两个概率分布相似性的对称度量方法。它是KL散度(Kullback-Leibler Divergence)的对称和平滑版本,具有更稳定和直观的解释性。JS散度的值在0到1之间,其中0表示两个分布完全相同,而值越接近1则表示两个分布越不同。
计算步骤:
对于两个概率分布 P P P 和 Q Q Q,
1)计算中间分布
M
M
M:
M
=
1
2
(
P
+
Q
)
M = \frac{1}{2}(P + Q)
M=21(P+Q)
2)计算两个KL散度:
D
K
L
(
P
∥
M
)
=
∑
i
P
(
i
)
log
P
(
i
)
M
(
i
)
D_{KL}(P \parallel M) = \sum_{i} P(i) \log \frac{P(i)}{M(i)}
DKL(P∥M)=i∑P(i)logM(i)P(i)
D
K
L
(
Q
∥
M
)
=
∑
i
Q
(
i
)
log
Q
(
i
)
M
(
i
)
D_{KL}(Q \parallel M) = \sum_{i} Q(i) \log \frac{Q(i)}{M(i)}
DKL(Q∥M)=i∑Q(i)logM(i)Q(i)
3)计算JS散度:
D
J
S
(
P
∥
Q
)
=
1
2
D
K
L
(
P
∥
M
)
+
1
2
D
K
L
(
Q
∥
M
)
D_{JS}(P \parallel Q) = \frac{1}{2} D_{KL}(P \parallel M) + \frac{1}{2} D_{KL}(Q \parallel M)
DJS(P∥Q)=21DKL(P∥M)+21DKL(Q∥M)
适用场景: 检验多变量联合分布是否相同。
(5)MMD(Maximum Mean Discrepancy,最大均值差异)
通过在特征空间(通常是高维的再生核希尔伯特空间,RKHS)中衡量样本均值的差异来评估两个分布是否相同。MMD尤其适用于高维数据。
MMD原理:
1)特征映射:将数据映射到高维特征空间(RKHS)。假设有两个分布 P P P 和 Q Q Q,我们有来自这两个分布的样本集 X = { x 1 , x 2 , . . . , x m } X = \{x_1, x_2, ..., x_m\} X={x1,x2,...,xm} 和 Y = { y 1 , y 2 , . . . , y n } Y = \{y_1, y_2, ..., y_n\} Y={y1,y2,...,yn}。
2)核函数:选择一个合适的核函数 k ( x , y ) k(x, y) k(x,y) 来计算样本在特征空间的距离。常用的核函数包括高斯核、线性核、多项式核等。
3)均值嵌入:计算特征空间中样本的均值嵌入。对于分布
P
P
P 和
Q
Q
Q,其均值嵌入分别为:
μ
P
=
E
P
[
ϕ
(
x
)
]
,
μ
Q
=
E
Q
[
ϕ
(
y
)
]
\mu_P = \mathbb{E}_{P}[\phi(x)], \quad \mu_Q = \mathbb{E}_{Q}[\phi(y)]
μP=EP[ϕ(x)],μQ=EQ[ϕ(y)]
其中,
ϕ
(
x
)
\phi(x)
ϕ(x) 表示将样本
x
x
x 映射到特征空间的映射函数。
4)MMD 统计量:计算均值嵌入之间的L2距离,得到 MMD 统计量:
MMD
2
(
P
,
Q
)
=
∥
μ
P
−
μ
Q
∥
2
\text{MMD}^2(P, Q) = \|\mu_P - \mu_Q\|^2
MMD2(P,Q)=∥μP−μQ∥2
通过样本近似估计 MMD 统计量:
MMD
2
(
X
,
Y
)
=
1
m
2
∑
i
,
j
=
1
m
k
(
x
i
,
x
j
)
+
1
n
2
∑
i
,
j
=
1
n
k
(
y
i
,
y
j
)
−
2
m
n
∑
i
=
1
m
∑
j
=
1
n
k
(
x
i
,
y
j
)
\text{MMD}^2(X, Y) = \frac{1}{m^2} \sum_{i,j=1}^m k(x_i, x_j) + \frac{1}{n^2} \sum_{i,j=1}^n k(y_i, y_j) - \frac{2}{mn} \sum_{i=1}^m \sum_{j=1}^n k(x_i, y_j)
MMD2(X,Y)=m21i,j=1∑mk(xi,xj)+n21i,j=1∑nk(yi,yj)−mn2i=1∑mj=1∑nk(xi,yj)
3.3 检验结果汇总
对3.2中的各项指标进行计算,得到汇总结果。
检验项目 | 指标 | 基于联合概率分布 | 基于条件概率分布 |
---|---|---|---|
KS Test for task_startTime | Statistic p-value | 0.0057 0.9989 | 0.0049 0.9999 |
KS Test for task_type | Statistic p-value | 0.0135 0.3997 | 0.0085 0.9080 |
Chi-Square Test for task_maxResponseTime | Statistic p-value | 2.8078 0.5905 | 3.1051 0.5404 |
Fisher’s Combined p-value | Statistic p-value | 2.8897 0.8226 | 1.4240 0.9644 |
JS Divergence for joint distribution | Statistic | 0.0005 | 0.0003 |
MMD for joint distribution | Statistic | 0.0002 | 0.0002 |
- 对于单变量,利用KS检验任务产生时刻、任务类型的数据生成效果;利用卡方检验最大响应时长数据生成效果;对于联合分布,分别利用Fisher联合P值、JS散度、MMD检验生成数据的整体性效果。
- KS检验、卡方检验、Fisher联合检验:p值均大于显著性水平0.05,表示无法拒绝原假设,说明两个数据的分布没有显著差异
- JS散度、MMD统计量均小于0.001,说明两个分布在统计上高度相似,几乎没有差异。
综上:
- 所有检验效果均通过检验,生成的数据符合真实数据分布
- 从KS for task_type,chi-square for task_maxResponseTime的结果来看,基于条件概率分布生成的task_type更加符合真实数据分布
04 小结
上篇(客服调度问题领域建模):我们从调度引擎在业务发展过程中对不同相关方的诉求进行调和入手,梳理确定了客服调度将考虑的目标与约束,并给出了必要的属性设计,最终形成了对该问题的领域建模。
本篇(数据仿真建设):我们基于一份真实数据,通过数据分析、数据生成、效果评价三个步骤,完整地介绍如何利用这份数据生成符合真实数据分布的仿真数据。
下篇(贪心算法):我们将探索各类贪心规则求解客服调度问题的表现,并作为后续算法的初始解。
05 直播预告
本篇文章我们从数据分析、数据生成、效果评价三个方面,详细介绍了统计学的各类检验指标与实操方法,由于篇幅限制,没有办法把各类知识点与实操小技巧一一展开,相信很多小伙伴看完文章应该有很多好奇的地方,比如这些看起来眼花缭乱的联合分布图和条件分布图是如何画出来的,两个样本分布的差异性检验在具体写代码中,会有哪些细节需要注意,容易出现的问题等等。因此,我们决定开展一期线上直播,由我们本篇文章的主要作者(统计学专业出身)来和大家做更进一步的分享与交流。关于直播的形式和具体内容,我们将专门推出一期推文,大家敬请期待。
最后,请大家多多点赞!!!转发!!!关注!!!大家的支持是我们持续创作的动力。我们是【运筹匠心】,咱们下期见~~~
06 加群方式
请加管理员进群:IndustryOR