= 模型验证合格验证样本
模型验证的准确性在很大程度上依赖于验证样本选取的正确性和合理性，
一个可用于模型验证的样本数据应该包含两个方面的信息：

* 模型的预测信息（评级信息）
* 模型的实际表现信息（违约确定信息）

我们先对这两个部分的信息进行适当的解释，之后，我们再给出如何选取一个合格的模型验证样本。

[#MV_SCORE_RECORD]
== 模型的预测信息（评级信息）
通常一个模型对客户的预测信息存在于评级系统中，一个最基本的预测信息包含的数据结构如下：

. 评级预测记录表(模型预测表)：MV_SCORE_RECORD
|===
| 客户标识 | 模型标识 | 模型名称 | 评级结果（违约概率） | 评级结果（得分） | 评级结果（等级） | 评级有效期开始日期(评级生效日期) | 评级有效期结束日期(评级失效日期)

| A       | M1     | 模型1    | 0.001            | 90             | 5             | 2013-01-01                  | 2013-12-30
| A       | M1     | 模型1    | 0.0015           | 80             | 6             | 2014-01-01                  | 2014-12-30
| A       | M1     | 模型1    | 0.0012           | 85             | 6             | 2014-06-01                  | 2015-05-31
| A       | M1     | 模型1    | 0.005            | 60             | 10            | 2015-09-01                  | 2016-08-31
|=== 

上表中每一行代表一次有效评级。其字段意义说明如下：
|===
| 字段中文名称                   | 字段名称             | 字段类型          | 字段约束 | 备注

| 客户标识                      | FD_CUSTOM_ID        | varchar(32)      | 不能为空 |
| 模型标识                      | FD_MODEL_ID         | varchar(32)      | 不能为空 |  
| 模型名称                      | FD_MODEL_NAME       | varchar(100)     | 不能为空 |
| 评级结果（违约概率）            | FD_PD               | 小数（精度 6）     | 不能为空 | 通过模型计算出的违约概率，非经人工调整后的违约概率
| 评级结果（得分）                | FD_SCORE            | 整数             | 不能为空 | 通过模型计算出的得分，非经人工调整后的得分
| 评级结果（等级）                | FD_LEVEL            | varchar(10)     | 不能为空 | 通过模型计算出的等级，非经人工调整后的等级
| 评级有效期开始日期(评级生效日期)  | FD_SCORE_BEGIN_DATE | date             | 不能为空 |
| 评级有效期结束日期(评级失效日期)  | FD_SCORE_END_DATE | date               | 不能为空 |
|===

我们先看一看一个通用的评级及信贷业务流程

image::chapter-datasource/001.png[]

一个可以用于模型验证的评级及违约相关数据，对于一个客户而言，必须存在一个有效的评级记录（模型预测结果），同时也必须存在与之对应的一个违约情况记录（模型实际结果，存在违约记录表示事实违约，不存在违约记录表示事实正常），

一个合格的可以作为模型验证样本的评级记录需要满足以下条件:

. 评级记录的状态必须是有效的，即一个客户的评级步骤必须全部走完，并且通过审批。（排除那些未完成的评级记录、未审批通过的评级记录、状态为非有效的评级记录）
. 该评级客户是银行或金融机构的客户，即该客户和银行或金融机构发生了信贷关系。（排除虽然有效评级，但没有发放贷款，通常表现为客户的评级结果没有达到信贷的条件，即被拒绝的客户），也就是说需要对满足条件 1 的评级记录进行部分排除，排除条件为评级记录对应的客户不在银行或金融机构的客户名单中的那些评级记录。
		
[#MV_DEFAULT_RECORD]
== 模型的实际表现信息（违约确定信息）
[%autowidth]
|===
| 客户标识 | 客户违约确定（认定）日期

| A       | 2015-11-02
|=== 
	
上表中每一行代表一次确认（认定）客户违约。其字段意义说明如下:
[%autowidth]
|===
| 字段中文名称                   | 字段名称                   | 字段类型          | 字段约束 | 备注

| 客户标识                      | FD_CUSTOM_ID              | varchar(32)      | 不能为空 |
| 违约认定日期                   | FD_DEFAULT_CONFIRM_DATE   | date             | 不能为空 |
|===

TIP: 模型的实际表现情况，对于信用风险内评模型而言，主要考察的是客户的实际违约情况，
对于在表现期（对公评级通常为自评级生效后1年）内没有发生事实违约的我们称之为好客户样本，
而在表现期内发生了事实违约的我们称之为坏样本。
原则上只有在最终确认为违约时才能作为坏样本，即在对坏样本“违约认定日期”定为违约认定日期。
	
== 合格验证样本数据结构
[#MV_GENERAL_SAMPLE]
=== 用于模型验证的合格验证样本表: MV_GENERAL_SAMPLE

|===
| 客户标识 | 模型标识 | 模型名称 | 评级结果（违约概率） | 评级结果（得分） | 评级结果（等级） | 评级有效期开始日期(评级生效日期) | 评级有效期结束日期(评级失效日期) | 实际违约状态

| A	      | M1	   | 模型1    | 0.001	         	 | 90            | 5              |	2013-01-01                 | 2013-12-30                  | D
| A	      | M1	   | 模型1    | 0.0005	         | 80            | 6              | 2014-01-01                 | 2014-12-30                  | N
| B	      |	M2	   | 模型2    | 0.0005	         | 80            | 6              | 2014-06-01                 | 2015-05-31                  | D
| B	      |	M2	   | 模型2    | 0.0005	         | 80            | 6              | 2015-09-01                 | 2016-08-31                  | N
|===  
	
上表中每一行代表一条合格的验证样本。其字段意义说明如下：
|===
|字段中文名称                   | 字段名称	              | 字段类型        | 字段约束     | 备注

|客户标识                       | FD_CUSTOM_ID          | varchar(32)   | 不能为空	 	 |
|模型标识                       | FD_MODEL_ID           | varchar(32)	   | 不能为空	     |
|模型名称                       | FD_MODEL_NAME         | varchar(100)  | 不能为空	     |
|评级结果（违约概率）             | FD_PD                 | 小数（精度 6）  | 不能为空	     | 通过模型计算出的违约概率，非经人工调整后的违约概率
|评级结果（得分）                | FD_SCORE               | 整数          | 不能为空	     | 通过模型计算出的得分，非经人工调整后的得分
|评级结果（等级）                | FD_LEVEL               | varchar(10)  | 不能为空	     | 通过模型计算出的等级，非经人工调整后的等级
|评级有效期开始日期(评级生效日期)	  | FD_SCORE_BEGIN_DATE    | date          |不能为空	     | 
|评级有效期结束日期(评级失效日期)	  | FD_SCORE_END_DATE      | date          |不能为空	     |
|实际违约状态                   | FD_DEFAULT_STATUS      | varchar(1)    |不能为空	     | D：表示实际发生违约N：表示实际未发生违约
|===

== 合格样本选取规则
在有了合格的模型预测信息（评级记录）和模型的实际表现信息（违约情况）后，我们需要结合两者信息根据合适的过滤规则生成可以真正用于模型验证的合格样本集。这些规则包括：

. 客户在评级系统中存在有效评级记录（存在有效的评级结果，包括：评分，违约概率，等级等），且存在评级有效期
. 如果客户在评级有效期内，被确定（认定）为违约，则该评级及其违约状态合并为一条有效验证样本
. 如果客户在整个评级预测有效期内，没有发生违约，则该评级及其非违约状态（正常状态）合并为一条有效验证样本
. 如果客户存在多条评级记录，对每一条评级记录采用上述策略

== 模型验证样本时间范围选取规则
采用评级有效期开始日期范围作为样本选取的约束条件，具体规则如下：
[%autowidth]
|===
| S	| E	| 样本的评级有效期开始日期介于从 S 到 E 之间
| 	| E	| 样本的评级有效期开始日期介于从上线以来到 E 之间
| S	| 	| 样本的评级有效期开始日期介于从 S 到 当前日期之间
| 	| 	| 样本的评级有效期开始日期介于从上线以来到当前日期之间
|===

[TIP]
.虽然模型验证样本的时间选择窗口基于评级有效期开始日期或评级有效期结束日期，但系统还会根据建模时确定的观察期或表现期来过滤样本，即，虽然选择的样本的评级有效期开始日期位于约束条件范围内，还需查看表现期（对公评级通常为1年）内的情况而定：
====
. 如果表现期内发生事实违约，则该样本被采纳，作为坏样本。
. 如果整个表现期结束，如果没有发生事实违约，则该样本被采纳，作为好样本。
. 如果表现期未结束，且没有发生事实违约，则该样本不被采纳（需在验证样本集中排除），因为还未到表现期，客户是否违约还未定。
====