要在某个指标上对比两个模型的好坏,我们可以直接进行比较,同时为了使比较结果更具说服力,我们可以使用统计检验的方法,即将两个模型分别跑k次,使用t检验比较这两组k个样本的均值、使用F检验比较这两组k个样本的方差,均值越大、方差越小说明在当前指标上该模型更好更稳定(这里说的指标是正向指标)。那么下面我们以具体代码来进行说明。
from scipy.stats import ttest_rel, f
import numpy as np
# 模型一10组实验结果
x = [44.2, 36.1, 46.5, 40.7, 61.6, 55.4, 59.9, 55.2, 65.5, 58.5]
# 模型二10组实验结果
y = [44.1, 35.9, 45.6, 39.5, 60.1, 55.1, 59.9, 54.2, 65.6, 58.2]
print('t检验结果:p值')
print(ttest_rel(x, y))
# 计算组内样本方差
var1 = np.var(x, ddof=1)
var2 = np.var(y, ddof=1)
# 计算统计量F
F = var1 / var2
# 计算自由度
df1 = len(x) - 1
df2 = len(y) - 1
# 计算p值
p_value = 1 - 2 * abs(0.5 - f.cdf(F, df1, df2))
print('F检验结果:p值')
print(p_value)
t检验和F检验结果如下:
t检验结果:p值
Ttest_relResult(statistic=3.048475214454681, pvalue=0.013826970451693616)
F检验结果:p值
0.9824793107664767
可以看到t检验的p值小于0.05,说明拒绝原假设,即两个模型在该指标上取值的均值有差异;F检验的p值大于0.05,说明接受原假设,即两个模型10组结果的稳定程度一致。
我们通过查看均值进一步对两个模型进行比较:
# 模型一实验结果均值
print(np.mean(x))
# 模型二实验结果均值
print(np.mean(y))
结果为:
52.36
51.82000000000001
通过上述比较,我们可以看到模型一和模型二实验结果稳定程度差不多,但模型一在当前指标上实验结果均值更大,说明模型一优于模型二。
参考