> 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

![](https://3776797973-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MkW0vdxiACBavm67CgB%2Fuploads%2Fgit-blob-9bd5dbe76adfb2643d7be45d1fb20ac76267ec7a%2F2021-11-03-06-49-31.png?alt=media)

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

    二者合并得到$$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：计算所有混淆矩阵

    计算：

![](https://3776797973-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MkW0vdxiACBavm67CgB%2Fuploads%2Fgit-blob-13d5ac635d1b39242fe658c2e649c3bf1c830fab%2F2021-11-03-07-00-08.png?alt=media)

## 3. 整体评估

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

* 门槛值`0.5`：

  <img src="https://3776797973-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MkW0vdxiACBavm67CgB%2Fuploads%2Fgit-blob-9b9e0f217588e478a917017bc922be6bd646b262%2F2021-11-03-07-18-26.png?alt=media" alt="" data-size="original">
* 门槛值`0.375`：

  <img src="https://3776797973-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MkW0vdxiACBavm67CgB%2Fuploads%2Fgit-blob-c663539a29e3137b77ade79c261be19f2841ffb3%2F2021-11-03-07-19-50.png?alt=media" alt="" data-size="original">

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

### 3.1. K-S Statistics

![](https://3776797973-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MkW0vdxiACBavm67CgB%2Fuploads%2Fgit-blob-e05f4e4d15428226fdcc525b2996bfcf5cea782a%2F2021-11-03-07-23-32.png?alt=media)

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

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

![](https://3776797973-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MkW0vdxiACBavm67CgB%2Fuploads%2Fgit-blob-1eb820ff6d3444d59b8749df5cd8881fbbd5fca8%2F2021-11-03-07-33-11.png?alt=media)

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

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

> Profit的计算（略）

### 3.2. ROC图

![](https://3776797973-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MkW0vdxiACBavm67CgB%2Fuploads%2Fgit-blob-85da307e2588352fff54bde606beefd30d34ea46%2F2021-11-03-07-32-32.png?alt=media)

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

![](https://3776797973-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MkW0vdxiACBavm67CgB%2Fuploads%2Fgit-blob-92f88805e29692dece56116533b8517505f658c1%2F2021-11-03-07-33-44.png?alt=media)

* 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

![](https://3776797973-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MkW0vdxiACBavm67CgB%2Fuploads%2Fgit-blob-644f75951c64a46833103e5cde3b13752d96e7d7%2F2021-11-03-07-40-06.png?alt=media)

    Gini的做法刚好和ROC颠倒：

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

![](https://3776797973-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MkW0vdxiACBavm67CgB%2Fuploads%2Fgit-blob-0279f609ce8a59e7e25883239a96e5229703206e%2F2021-11-03-07-40-55.png?alt=media)

    相互计算公式如下：

![](https://3776797973-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MkW0vdxiACBavm67CgB%2Fuploads%2Fgit-blob-2768a855d61807b42bb6017db2a3c0f5c1e397fe%2F2021-11-03-07-41-59.png?alt=media)

* 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

![](https://3776797973-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MkW0vdxiACBavm67CgB%2Fuploads%2Fgit-blob-b4adb14bea9e5726c999859a8d66a6d3bc66f6d0%2F2021-11-03-10-33-49.png?alt=media)

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

![](https://3776797973-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MkW0vdxiACBavm67CgB%2Fuploads%2Fgit-blob-623bba1a07315d626b41495998a71b3c6cbd018f%2F2021-11-03-10-36-56.png?alt=media)

### 3.6. Gain Chart

![](https://3776797973-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MkW0vdxiACBavm67CgB%2Fuploads%2Fgit-blob-70d4d972290cfbdd903ee7a44dd1280eda0f6c62%2F2021-11-03-10-35-26.png?alt=media)

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

![](https://3776797973-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MkW0vdxiACBavm67CgB%2Fuploads%2Fgit-blob-340a1ddd3f4294889154a5ab2ab3fb9261879796%2F2021-11-03-10-37-48.png?alt=media)

### 3.7. Lift Chart

    比较次要的一个图

![](https://3776797973-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MkW0vdxiACBavm67CgB%2Fuploads%2Fgit-blob-37876e4c4d354c3600b0ccbfc3165617254c6362%2F2021-11-03-10-39-35.png?alt=media)

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

![](https://3776797973-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MkW0vdxiACBavm67CgB%2Fuploads%2Fgit-blob-da34a4a664d8d2c33418799e135c9ac3005aabff%2F2021-11-03-10-41-42.png?alt=media)

## 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）：**越小越好**
