> For the complete documentation index, see [llms.txt](https://lang-yu.gitbook.io/mi-ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://lang-yu.gitbook.io/mi-ai/ke-cheng-xi-lie/00.index/10.modeling.md).

# 10.模型评估

## 1. 数据集切割

* 训练数据（Training Dataset），80%，可以做任何分析
* 测试数据（Test Dataset），20%，不可做任何分析（当做未看过的数据）

> 分层抽样，一般测试数据集不用来做分析，假设是未知数据来对待，注：竞赛 != 数据分析。

### 1.1. 数据分割方式

1. 随机从数据集中选取对应比例作训练数据（Yes/No的分布无法维持和母体数据集的比例）
2. 「**更好的方式**」从Yes中选取对应比例的训练数据，然后从No中选取对应比例的训练数据，合并到一起（比例依旧遵循母体比例）

> 最好采用分层随机抽样。

    训练集用来训练模型M，测试集用来测试M的效能，有些机器学习为了防止过拟合，会分离验证集，修正模型。`Training: Test: Validation`可选择比例：`6:2:2`——如决策树中`CART`算法必须要验证集。

### 1.2. 交叉验证

    Cross-Validation（CV），N折交叉，没有争议的验证方式，Fold（折）越多，评估越好，比较耗时。

    Leave-One-Out-Cross-Validation，最复杂的版本，最耗时。建立模型最好创建一个基模型，以作为比较的基准：

* 分类问题：众数建模
* 回归问题：均值或中位数建模

## 2. 分类模型评估

### 2.1. 混淆矩阵Confusion Matrix

![](/files/jYu6aJ3WxJRLEJAOA9b0)

* **正确率**——在所有样本中预测正确的样本比例，真的预测为真，假的预测为假。
* **精确率（查准）**——实际为真，分母为预测结果的总数，等价于：真实/预测（预测真总数）。
* **召回率（查全）**——实际为真，分母为实际结果的总数，等价于：真实/实际（实际真总数）。

    二者合并得到$$F\_1$$的指标：

$$F\_1 = 2 \times \frac{Precision \times Recall}{Precision + Recall}$$

    拓展，F-meansure

$$F\_{\beta} = (1 + \beta^2) \times \frac{Precision \times Recall}{(\beta^2 \times Precision) + Recall}$$

    $$\beta=1$$表示$$F\_1$$，如果$$\beta > 1$$，您重视Recall，如果$$\beta < 1$$，您重视Precision。

### 2.2. 多分类评估

* Macro F1：将多个类的F1相加算平均（每个类同等重要）
* Weighted F1：在Macro基础上加权（按每种类型的比例加权计算）
* Micro F1：计算所有混淆矩阵

    计算：

![](/files/0gXsYBl5onfA0cM7hQC8)

## 3. 整体评估

    不要结果，而是要结果的概率值，且计算的是**累积结果**。

* 门槛值`0.5`：

  <img src="/files/Ip0Y9AXnxSGKo5JSQTXQ" alt="" data-size="original">
* 门槛值`0.375`：

  <img src="/files/lNnz7eVijdc6CIWE299Q" alt="" data-size="original">

> 注意混淆矩阵中数值的变化，门槛值对F1也会有影响。

### 3.1. K-S Statistics

![](/files/X9bNzIIveWfePMI9Xnil)

    **KS**（Kolmogorov-Smirnov）值的计算：

$$(Cumulative\_1 - Cumulative\_0) \times 100$$

![](/files/bidTJfLBrHlqU71jeJqj)

    最佳值会到100分，最差会是0分，KS参考值：

| KS值      | 含义              |
| -------- | --------------- |
| 小于20     | 模型无鉴别能力         |
| 20 \~ 40 | 模型勉强接受          |
| 41 \~ 50 | 模型有好的区别能力       |
| 51 \~ 60 | 模型有很好的区别能力      |
| 61 \~ 75 | （罕见）模型有非常好的区别能力 |
| 大于75     | 模型异常，可能有问题      |

> Profit的计算（略）

### 3.2. ROC图

![](/files/FljDQWWJ6rs2OYitQF4h)

    ROC图如下（**蓝色线就是ROC**）：

![](/files/H47D7gpj8g42ZxLSH1C7)

* X轴：累积0的百分比
* Y轴：累积1的百分比

> ROC图围出来的面积 > 0.5，面积越大模型越稳健。

    AUC（Area Under the Curve）值（`[0.5, 1]`）：

* 0.5 < AUC < 0.6：弱模型
* 0.7 < AUC：更稳健模型

### 3.3. Gini Coefficient

![](/files/f0SCHyF1LTNQ7xsye566)

    Gini的做法刚好和ROC颠倒：

* X轴：累积1的百分比
* Y轴：累积0的百分比

![](/files/e1REyoVJ7J0L5Y1DGRdO)

    相互计算公式如下：

![](/files/yWh4185D9jRtyFj3l2AL)

* ROC Index = AUC
* ROC Index = A + 0.5
* Gini Coefficient = A / (A + B) = 2A = 2 \* (ROC Index - 0.5)
* **Gini = 2 \* AUC - 1**

### 3.4. 评分标准

| Gini系数      | K-S值       | AUC值        | 模型优劣程度   |
| ----------- | ---------- | ----------- | -------- |
| 0           | <20%       | =50%        | 无区别能力    |
| 0 \~ 40%    | 20% \~ 30% | 50% \~ 70%  | 模型区别能力极差 |
| 40% \~ 60%  | 30% \~ 50% | 70% \~ 80%  | 可接受的区别能力 |
| 60% \~ 80%  | 50% \~ 75% | 80% \~ 90%  | 非常好的区别能力 |
| 80% \~ 100% | > 75%      | 90% \~ 100% | 可能模型适配过度 |

### 3.5. Response Chart

![](/files/Tb9UmvO3K4LLzVQFSvAm)

* x轴是人数百分比
* y轴是1的Precision的累积

![](/files/dT4et5oLzcZuS8lCBaez)

### 3.6. Gain Chart

![](/files/hHAAhBjSNanBiAyZ2VQD)

* x轴是人数百分比
* y轴是1的Recall的累积

![](/files/4seKV8NVg5MBrBtfT3VW)

### 3.7. Lift Chart

    比较次要的一个图

![](/files/TrmyytHq3QRVSgf1bblF)

> 计算方法是使用：Cumulative for 1 / Random，模型比随机乱猜的倍数处理。

![](/files/LD03N296Xc3oDE5YIokI)

## 4. 回归模型评估

* **MAE**, Mean Absolute Error（无区间）

  $$MAE = \frac{1}{n}\sum\_{i=1}^n|y\_i - \hat{y\_i}|$$
* **MSE**, Mean Squared Error（无区间，惩罚误差比较大的模型）

  $$MSE = \frac{1}{n}\sum\_{i=1}^n(y\_i - \hat{y\_i})^2$$
* **RMSE**, Root Mean Squared Error

  $$RMSE = \sqrt{MSE}$$
* $$R^2$$, Adjusted $$R^2$$（范围一定是\[0,1]，越靠近1越好）

> 前三个是IT的人会常用的三个指标，通常做数据分析用$$R^2$$更多。

### 4.1. R Squared计算

1. SST：目标字段的总变异，Total Sum of Squares

   $$SST = \sum\_{i=1}^n(y\_i - \bar{y})^2$$
2. SSR：目标字段的可解释变异，Sum of Squares due to Regression

   $$SSR = \sum\_{i=1}^n(\hat{y\_i} - \bar{y})^2$$
3. SSE：目标字段的不可解释变异，Sum of Squares due to Error

   $$SSE = \sum\_{i=1}^n(y\_i - \hat{y\_i})^2$$
4. SST = SSR + SSE
5. $$R^2 = \frac{SSR}{SST} = 1 - \frac{SSE}{SST}, 0 \le r^2 \le 1$$

    $$Adjusted R^2$$：

* 调整的$$R^2$$：**越大越好**
  * 由于增加新的输入字段后，$$R^2$$会变大，会有高估模型效能的倾向，因此调整后的$$R^2$$作为评估方式更加理想。
  * $$Adjusted R^2 = 1 - ((1 - R^2) \times \frac{N - 1}{N - P - 1})$$
    * N：样本数
    * P：输入字段个数
* AIC（Akaike Information Criterion）：**越小越好**
* BIC（Bayesian Information Criterion）：**越小越好**
