Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
M
model_monitoring_monthly
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
decision-science
model_monitoring_monthly
Commits
d52dee3f
Commit
d52dee3f
authored
Nov 26, 2019
by
舒皓月
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
20191126_0
parent
f1f5f1aa
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
211 additions
and
71 deletions
+211
-71
README.md
README.md
+137
-71
auto_report.py
auto_report.py
+74
-0
135AB666-12A0-486e-9314-5F61678CED1D.png
image/135AB666-12A0-486e-9314-5F61678CED1D.png
+0
-0
1D7A7A0A-8B66-4f31-A5F3-F21C1FA5BADA.png
image/1D7A7A0A-8B66-4f31-A5F3-F21C1FA5BADA.png
+0
-0
66EEADB8-4133-4338-AAB0-8FE48526CBBF.png
image/66EEADB8-4133-4338-AAB0-8FE48526CBBF.png
+0
-0
77F951A3-088F-4af0-AF74-C6F66BC8EAE6.png
image/77F951A3-088F-4af0-AF74-C6F66BC8EAE6.png
+0
-0
8EC5983E-542C-4c41-A390-817CAC0C05A3.png
image/8EC5983E-542C-4c41-A390-817CAC0C05A3.png
+0
-0
9DF6F484-6FA3-4b60-BA42-8D27A1B025AA.png
image/9DF6F484-6FA3-4b60-BA42-8D27A1B025AA.png
+0
-0
D39E34EF-592A-4bfe-95D8-694B3B7BBFEC.png
image/D39E34EF-592A-4bfe-95D8-694B3B7BBFEC.png
+0
-0
DDFBB70E-2A39-4292-94B8-9487474BFA35.png
image/DDFBB70E-2A39-4292-94B8-9487474BFA35.png
+0
-0
F6010A07-103A-4cdf-95A6-41848F3DE07D.png
image/F6010A07-103A-4cdf-95A6-41848F3DE07D.png
+0
-0
No files found.
README.md
View file @
d52dee3f
...
@@ -5,108 +5,169 @@
...
@@ -5,108 +5,169 @@
-
本项目主要用于风控模型监控.
-
本项目主要用于风控模型监控.
-
运用统计绘图分析, 来检测入模特征, 客群变化, 模型性能.
-
运用统计绘图分析, 来检测入模特征, 客群变化, 模型性能.
-
基本流程:
-
基本流程:
-
数据库取数 --> 整合/处理数据 --> 绘图 --> 统计
-
数据库取数 --> 整合/统计 --> 绘图
-
主要统计
图类别
:
-
主要统计
信息
:
-
VLM
-
VLM
-
PSI
-
AUC
-
PSI
# 使用前提
-
Lift Chart
-
准备一个包含需要查询模型分的excel, 包含其中文名和英文名(mongo中的字段名).
-
项目中的model_score.xlsx包含大部分在使用的模型分.
# VLM
# VLM
-
重写完成, 代码流程改天写.
-
使用方法
# PSI & Lift Chart
在234服务器中, 将项目中的VLM_time.py放在自己的某一文件夹下, 然后在notebook中操作如下.
-
因为这两个指标的统计都需要用到模型分, 所以放到一起.
```
python
# 导入脚本
## 计算流程
from
VLM_time
import
*
# 创建对象
-
首先对需要计算的模型分, 在指定的统一时间跨度内进行数据抽取(在MySQL和MongoDB中). 包括如下一些主要字段:
vlm_mm
=
VLMMonitor
(
excel_path
=
'./model_score.xlsx'
,
-
模型分1, 模型分2, ...
sheet_name
=
'model'
,
-
订单号, 申请时间, 申请类型, 渠道类型, 逾期天数.
save_path
=
'./vlm/'
,
-
根据预定义逾期阈值, 得到是否逾期标签.
if_read
=
True
,
if_save
=
True
,
-
根据该模型分有记录的第一个月, 计算分箱规则(由模型分等频分箱区间, PSI在申请集上计算, AUC在放款集上计算).
alpha
=
0.01
,
min_user_group
=
600
,
-
分别对全样本, 首申/复申/复贷, 以及各达标客群(客群数量大于预设阈值), 计算每月统计信息.
start_date
=
'2019-09-01'
,
end_date
=
'2019-11-01'
)
-
PSI统计信息:
# 运行
-
样本量.
vlm
.
run
()
-
各分箱样本量
```
-
各分箱样本量占比
-
以该客群模型分有记录的第一个月为基准的PSI.
-
对象参数说明(使用时主要设置时间即可):
-
Lift Chart统计信息:
-
样本量
-
excel_path: excel路径.
-
各分箱样本量
-
sheet_name: excel页名称.
-
各分箱逾期率
-
save_path: 输出保存路径.
-
AUC
-
if_read & if_save: if_read表示是否从数据库取数据, 若为false则从本地取数据. if_save表示是否保存数据.这两个参数主要用于debug, 默认为true即可.
-
以该客群模型分有记录的第一个月为基准的AUC ratio.
-
alpha: mk-test显著性阈值.
-
统计表格信息, 方便筛选排序查看, 包含以下字段:
-
min_user_group: 最小客群数量, 用于过滤特别小的客群. 一般不用调整, 默认即可.
-
模型分名称.
-
start_date & end_date: 需要查询的起始和终止时间, 根据需求设定.
-
a月样本量, b月样本量...
-
a月PSI, b月PSI...
-
输出
-
a月AUC, AUCR, b月AUC, AUCR...
-
某个客群是否异常(AUC明显下降, PSI较大).
-
图片, 保存在save_path下的image中.
-
NOTE:
-
相关统计信息, 保存在save_path下的info中
-
当某月样本量很小, 或者没有样本时, 标记为NaN. 对应的PSI, AUC也为NaN.
-
当某月样本量比较小, 导致AUC计算异常(如某些分箱没有样本, 全为非逾期样本), 则标记为-999.
-
info的一些使用方法
-
对于PSI的计算, 采用平滑处理, 根据PSI计算公式, 一旦某箱为0, 而基准月该分箱只要不为0, 就会导致计算异常, 因此计算PSI时为每箱的占比在原基础上增加0.001, 使计算更加稳定.
-
读取info

-
挑选出某个模型分的信息.

## 使用方法
-
挑选出均值超过三倍标准差的客群.
-
准备一个Excel表格, 其中放置模型分名称, 以及对应的在数据库中的字段名.

-
创建一个模型监控对象(这样我们就有对象了^v^)
.
-
挑选出有趋势的客群, 并按p值排序
.
```
python

# 创建对象.
mm
=
ModelMonitor
(
excel_path
=
'./model_score.xlsx'
,
sheet_name
=
'mongo_model'
,
save_path
=
'./image/'
,
passdue_day
=
15
,
num_month
=
4
,
min_user_group
=
1000
,
max_psi
=
0.1
,
min_aucr
=
0.9
,
if_read
=
True
,
if_save
=
True
)
# 执行run方法.
mm
.
run
()
```
-
excel_path: Excel文件路径.
# PSI
-
sheet_name: Excel的目标页.
-
使用方法
-
save_path: 统计图存放路径
.
在234服务器中, 将项目中的PSI_time.py放在自己的某一文件夹下, 然后在notebook中操作如下
.
不用自己再另外手动创建文件夹, 代码会判断文件夹是否存在并创建.
```
python
# 导入脚本
from
PSI_time
import
*
# 创建对象
psi_mm
=
PSIMonitor
(
excel_path
=
'./model_score.xlsx'
,
sheet_name
=
'model'
,
min_user_group
=
500
,
max_psi
=
0.1
,
interval_days
=
30
,
save_path
=
'./psi/'
,
if_save
=
True
,
if_read
=
True
,
date_list
=
(
'2019-07-01'
,
'2019-08-01'
,
'2019-09-01'
,
'2019-10-01'
,
'2019-11-01'
))
# 运行
psi_mm
.
run
()
```
-
passdue_day: 定于逾期天数, 默认15.
-
对象参数说明(使用时主要设置date_list即可):
-
excel_path: excel路径.
-
sheet_name: excel页名称.
-
save_path: 输出保存路径.
-
if_read & if_save: if_read表示是否从数据库取数据, 若为false则从本地取数据. if_save表示是否保存数据.这两个参数主要用于debug, 默认为true即可.
-
max_psi: PSI异常阈值, 超过该值则视为客群分布变化过大.
-
min_user_group: 最小客群数量, 用于过滤特别小的客群. 一般不用调整, 默认即可.
-
interval_days: 时间跨度, 与date_list对应, 默认30天.
-
date_list: 时间区间, 如这里包含4个区间(4个月), 每个区间约30天.
-
num_month: 想要统计近期几个月(包含运行程序时所在的日期前一天, 如运行时为7.1, 则不包含7月数据, 如运行时为7.10, 则将7月9天算作7月数据).
-
输出
-
min_user_group: 最小客群数量.
-
图片, 保存在save_path下的image中.
-
相关统计信息, 保存在save_path下的info中
这个参数越大, 颗粒越粗, 最后的统计图(客群数量)会越少.
-
info的一些使用方法
反之颗粒越小, 最后统计图会越多.
-
读取info
-
max_psi: 最大PSI, 大于则视为该客群异常, 基准月的PSI默认为大于5倍该值为异常.

-
min_aucr: 最小AUCR, 小于则视为该客群异常.
-
选取某个模型分
-
if_read: 是否从数据库读取数据.

默认为False, 即从本地获取数据
.
-
挑选出PSI过大的客群
.
-
if_save: 是否将数据库抽取的数据保存到本地.

# AUC
## 输出
-
使用方法
-
图片保存在./image中.
在234服务器中, 将项目中的AUC_time.py放在自己的某一文件夹下, 然后在notebook中操作如下.
-
PSI: ./image/PSI
-
Lift Chart: ./image/AUC
```
python
-
统计信息.
# 导入脚本
-
PSI统计信息: ./psi_info.csv
from
AUC_time
import
*
-
AUC统计信息: ./auc_info.csv
# 创建对象
auc_mm
=
AUCMonitor
(
excel_path
=
'./model_score.xlsx'
,
sheet_name
=
'model'
,
passdue_day
=
15
,
save_path
=
'./auc/'
,
min_user_group
=
500
,
interval_days
=
15
,
min_auc
=
0.55
,
date_list
=
(
'2019-07-01'
,
'2019-07-15'
,
'2019-08-01'
,
'2019-08-15'
,
'2019-09-01'
,
'2019-09-15'
),
if_read
=
True
)
# 运行
auc_mm
.
run
()
```
-
对象参数说明(使用时主要设置date_list即可):
-
excel_path: excel路径.
-
sheet_name: excel页名称.
-
save_path: 输出保存路径.
-
if_read: 表示是否从数据库取数据, 若为false则从本地取数据.
-
passdue_day: 首逾多少天算坏样本.
-
min_auc: AUC阈值, 小于该值则表示模型分区分度低.
-
min_user_group: 最小客群数量, 用于过滤特别小的客群. 一般不用调整, 默认即可.
-
interval_days: 时间跨度, 与date_list对应, 默认15天.
-
date_list: 时间区间, 如这里包含4个区间, 每个区间约15天.
-
输出
-
图片, 保存在save_path下的image中.
-
相关统计信息, 保存在save_path下的info中
-
info的一些使用方法
-
读取info

-
选择某个模型并查看其各客群AUC

# TODO
# TODO
-
添加对存在MySQL中模型分计算PSI, AUC的代码
.
-
自动出简略监控报告的脚本
.
-
增加模型重要特征的VLM
.
-
将图片保存到pdf中
.
# 版本信息
# 版本信息
...
@@ -139,6 +200,11 @@
...
@@ -139,6 +200,11 @@
-
重写VLM.
-
重写VLM.
-
增加过滤空跑数据的功能.
-
增加过滤空跑数据的功能.
-
增强代码鲁棒性.
-
增强代码鲁棒性.
-
V 0.1.0
-
全部数据从mongo中获取.
-
VLM, PSI, AUC分开计算.
# 贡献
# 贡献
...
...
auto_report.py
0 → 100644
View file @
d52dee3f
# coding=utf-8
'''
自动写无人分析版的月监控报告.
'''
from
docx
import
Document
from
docx.shared
import
Cm
import
warnings
warnings
.
filterwarnings
(
'ignore'
)
class
AutoReportor
:
'''
自动写报告.
逻辑流程:
1. 获取原始信息.
2. 挑选重要信息.
3. 按照一定规则汇总信息, 写总结.
4. 分别对每个模型进行展示.
'''
def
__init__
(
self
):
pass
def
get_info
(
self
):
pass
def
filter_info
(
self
):
pass
def
summary
(
self
):
pass
def
show_detail
(
self
):
pass
def
format
(
self
):
pass
def
run
(
self
):
# 获取vlm, psi, auc信息.
# 提取重要信息.
# 初始化doc.
# 根据规则写总结.
# 写每个模型的信息.
# 统一格式.
# 保存.
pass
image/135AB666-12A0-486e-9314-5F61678CED1D.png
0 → 100644
View file @
d52dee3f
53.7 KB
image/1D7A7A0A-8B66-4f31-A5F3-F21C1FA5BADA.png
0 → 100644
View file @
d52dee3f
43.7 KB
image/66EEADB8-4133-4338-AAB0-8FE48526CBBF.png
0 → 100644
View file @
d52dee3f
48.4 KB
image/77F951A3-088F-4af0-AF74-C6F66BC8EAE6.png
0 → 100644
View file @
d52dee3f
15.1 KB
image/8EC5983E-542C-4c41-A390-817CAC0C05A3.png
0 → 100644
View file @
d52dee3f
63.8 KB
image/9DF6F484-6FA3-4b60-BA42-8D27A1B025AA.png
0 → 100644
View file @
d52dee3f
47.2 KB
image/D39E34EF-592A-4bfe-95D8-694B3B7BBFEC.png
0 → 100644
View file @
d52dee3f
76.1 KB
image/DDFBB70E-2A39-4292-94B8-9487474BFA35.png
0 → 100644
View file @
d52dee3f
56.6 KB
image/F6010A07-103A-4cdf-95A6-41848F3DE07D.png
0 → 100644
View file @
d52dee3f
59.7 KB
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment