├── .idea
├── encodings.xml
├── inspectionProfiles
│ └── Project_Default.xml
├── misc.xml
├── modules.xml
├── other.xml
├── score_card_model.iml
└── vcs.xml
├── README.md
├── example.py
├── requirements.txt
├── riskModel
├── .DS_Store
├── EDA.py
├── FeatureEngineering.py
├── Modeling.py
├── Preprocessing.py
├── RiskStragety.py
├── __init__.py
├── __pycache__
│ ├── EDA.cpython-37.pyc
│ ├── FeatureEngineering.cpython-37.pyc
│ ├── Modeling.cpython-37.pyc
│ ├── Preprocessing.cpython-37.pyc
│ ├── RiskStragety.cpython-37.pyc
│ └── __init__.cpython-37.pyc
├── data
│ ├── .DS_Store
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-37.pyc
│ │ └── germancredit.cpython-37.pyc
│ ├── german.txt
│ ├── germancredit.csv
│ └── germancredit.py
└── utils
│ ├── .DS_Store
│ ├── PltFunction.py
│ ├── __init__.py
│ ├── __pycache__
│ ├── PltFunction.cpython-37.pyc
│ ├── __init__.cpython-37.pyc
│ └── tools.cpython-37.pyc
│ ├── btl
│ ├── .DS_Store
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-37.pyc
│ │ ├── merge.cpython-37.pyc
│ │ └── monotous.cpython-37.pyc
│ ├── merge.py
│ └── monotous.py
│ └── tools.py
└── setup.py
/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/.idea/inspectionProfiles/Project_Default.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/other.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/.idea/score_card_model.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## *riskModel*
2 | #### 风险评分模型
3 | ## *Install*
4 | #### pip install riskModel
5 | =======
6 | ### *pip install riskModel*
7 | ***
8 | ## *主要功能*
9 | - 数据探索分析 (`数据概述BasicStat`)
10 | - 数据清洗 Preprocess(`异常值检测--异常值处理--众数处理--缺失处理`)
11 | - 数据采样 DataSample(`随机平衡采样, Borderline-SMOTE过采样`)
12 | - 特征离散化,特征工程 cat_bin,num_bin(`无序类别变量分箱组合, 有序数值变量分箱组合,支持单调性检验合并`)
13 | - 特征选择 SelectFeature(`基于IV信息值, 基于共线性, 基于VIF方差膨胀因子, 基于L1正则化`)
14 | - 模型训练 lr(`lr`)
15 | - 评分卡模型 ScoreCard(`标准评分卡转换,模型预测[概率预测,评分预测]`)
16 | - 风险决策 (`风险策略,稳定性评估PSI,评分决策表,KS`)
17 | ***
18 | ```python
19 | # -*- coding: utf-8 -*-
20 | """
21 | 评分卡示例:
22 | 0.数据探索分析,1.数据预处理,2.特征分箱,3.特征选择,4.模型训练,5.评分卡构建,6.模型评估,7.风险决策
23 | """
24 |
25 | import scorecardpy as sc
26 |
27 | import joblib
28 | import riskModel as rs
29 | from sklearn.model_selection import train_test_split
30 |
31 | path = './result/'
32 | # 导入数据
33 | germanCredit = rs.Germancredit()
34 | df = germanCredit.get_data()
35 | germanCredit.get_describe()
36 | df.sample(5)
37 | # 数值化
38 | for col in germanCredit.sub_col:
39 | df[col] = df[col].apply(lambda x:int(str(x)[1:]))
40 | # 替换
41 | df = df.replace(germanCredit.rep_dict)
42 | df['target'] = df['target'].replace({1:0,2:1})
43 |
44 | all_cols = germanCredit.all_feature
45 | num_cols = germanCredit.num_col
46 | cat_cols = germanCredit.cat_col
47 |
48 | #######################################
49 | # 0.数据探索分析
50 | #######################################
51 | bs = rs.BasicStat(df=df)
52 | html_report = bs.get_report()
53 | # 保存
54 | with open(path+'dt_report.html','w',encoding='utf8') as f:
55 | f.write(html_report)
56 |
57 | df_report = bs.get_describe()
58 | df_report.to_excel(path+'df_report.xlsx')
59 |
60 | #######################################
61 | # 1.数据清洗
62 | #######################################
63 | pr = rs.Preprocess()
64 | str_s = pr.find_str(df=df,cols=num_cols)
65 | print('字符:',str_s)
66 | sign_s = pr.find_sign(df=df,cols=all_cols)
67 | print('特殊符号:',sign_s)
68 | # 离群值
69 | outliers = pr.outlier_drop(df=df,cols=all_cols,low_percent=0.001,up_percent=0.999,cat_percent=0.01)
70 | print('离群值:',outliers)
71 | # 离群值处理
72 | for k,v in outliers.items():
73 | if type(v) == dict:
74 | df[k] = df[k].apply(lambda x:v.get('low') if x < v.get('low') else v.get('up') if x > v.get('up') else x)
75 | elif type(v) == list:
76 | df[k] = df[k].replace(v,df[k].mode()[0])
77 |
78 | # 缺失统计
79 | missm_result = pr.miss_mode_cnt(df=df,cols=all_cols)
80 | print(missm_result)
81 | # 连续变量删除缺失80%+,众数率90%+
82 | # 分类变量删除缺失率90%,众数率95%+
83 | num_cols = [i for i in num_cols if missm_result['miss'][i] < 0.8 and missm_result['mode'][i] < 0.8]
84 | cat_cols = [i for i in cat_cols if missm_result['miss'][i] < 0.8 and missm_result['mode'][i] < 0.95]
85 | print(f'drop num cols :{[i for i in all_cols if i not in num_cols+cat_cols]}')
86 | all_cols = num_cols + cat_cols
87 | # 缺失填充
88 | df = pr.fill_nan(df=df,cols=all_cols,values=-99999,min_miss_rate=0.05)
89 |
90 | # 字符变量数值化
91 | df,factorize_dict = pr.factor_map(df=df,cols=cat_cols)
92 | # 过采样
93 | int_cols = cat_cols + [i for i in num_cols if i in germanCredit.int_col]
94 | print('int_cols:',int_cols)
95 |
96 | ds = rs.DataSample(df=df,cols=all_cols,target='target',sampling_strategy='minority')
97 | df_res = ds.over_sample(int_cols=int_cols)
98 | # 分类变量还原
99 | to_factorize = {k: {i:j for j,i in v.items()} for k,v in factorize_dict.items()}
100 | df_res = df_res.replace(to_factorize)
101 | df = df.replace(to_factorize)
102 | ########################################
103 | # 2.特征工程
104 | ########################################
105 | # 样本划分
106 | # woe bin
107 | train,valid = train_test_split(df_res,test_size=0.3,random_state=0)
108 | cat_bin,cat_iv = rs.cat_bin(df=train,cols=cat_cols,target='target',specials=['-99999'],
109 | bin_num_limit=5,count_distr_limit=0.05,method='chimerge')
110 | num_bin,num_iv = rs.num_bin(df=train,cols=num_cols,target='target',specials=[-99999],
111 | bin_num_limit=8,count_distr_limit=0.05,sc_method='chimerge',
112 | non_mono_cols=['age_in_years'],init_bins=15,init_min_samples=0.05,init_method='chi')
113 |
114 | bins = {**cat_bin,**num_bin}
115 | ivs = {**cat_iv,**num_iv}
116 | # woe转换
117 | train_woe = sc.woebin_ply(dt=train,bins=bins)
118 | valid_woe = sc.woebin_ply(dt=valid,bins=bins)
119 | df_woe = sc.woebin_ply(dt=df,bins=bins)
120 |
121 | #########################################
122 | # 3.特征选择
123 | #########################################
124 | sf = rs.SelectFeature()
125 | high_iv = sf.baseOn_iv(ivd=ivs,thred=0.05,is_draw=False)
126 | low_vif = sf.baseOn_collinear(df=train_woe,high_iv=high_iv,thred=0.7,is_draw=False)
127 | ml_cols, best_C = sf.baseOn_l1(X=train_woe[low_vif.keys()],y=train_woe['target'],Kfold=5,drop_plus=False)
128 |
129 | #########################################
130 | # 4.模型训练
131 | #########################################
132 |
133 | lr = rs.Lr(C=best_C)
134 | lr.fiting(X=train_woe[ml_cols.keys()],y=train_woe['target'],filename=path)
135 | joblib.dump(lr,path+'lr.pkl')
136 |
137 | ########################################
138 | # 5.评分卡构建
139 | ########################################
140 |
141 | card = rs.ScoreCard(lr=lr,bins=bins,ml_cols=[i.replace('_woe','') for i in ml_cols.keys()],
142 | score0=600,pdo=50)
143 | card_df = card.score_card()
144 | joblib.dump(card,path+'card.pkl')
145 | ########################################
146 | # 6.模型评估,真实样本评估
147 | #######################################
148 | valid['prob'] = lr.predict_proba(valid_woe[ml_cols.keys()])[:,1]
149 | df['prob'] = lr.predict_proba(df_woe[ml_cols.keys()])[:,1]
150 |
151 | print(f'valid evaluate:{rs.model_norm(valid["target"],valid["prob"])}')
152 | print(f'test evaluate:{rs.model_norm(df["target"],df["prob"])}')
153 |
154 | valid['score'] = card.apply_score(valid)
155 | df['score'] = card.apply_score(df)
156 |
157 | ########################################
158 | # 7.风险决策
159 | #######################################
160 | cut_off = rs.stragety_score(df=df,step=50,score='score',label='target')
161 | cut_off.to_excel(path+'cut_off.xlsx')
162 |
163 | ```
164 |
165 |
--------------------------------------------------------------------------------
/example.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """
3 | 评分卡示例:
4 | 0.数据探索分析,1.数据预处理,2.特征分箱,3.特征选择,4.模型训练,5.评分卡构建,6.模型评估,7.风险决策
5 | """
6 |
7 | import scorecardpy as sc
8 | import warnings
9 | warnings.filterwarnings('ignore')
10 | import joblib
11 | import riskModel as rs
12 | from sklearn.model_selection import train_test_split
13 |
14 | path = './result/'
15 | # 导入数据
16 | germanCredit = rs.Germancredit()
17 | df = germanCredit.get_data()
18 | germanCredit.get_describe()
19 | df.sample(5)
20 | # 数值化
21 | for col in germanCredit.sub_col:
22 | df[col] = df[col].apply(lambda x:int(str(x)[1:]))
23 | # 替换
24 | df = df.replace(germanCredit.rep_dict)
25 | df['target'] = df['target'].replace({1:0,2:1})
26 |
27 | all_cols = germanCredit.all_feature
28 | num_cols = germanCredit.num_col
29 | cat_cols = germanCredit.cat_col
30 |
31 | #######################################
32 | # 0.数据探索分析
33 | #######################################
34 | bs = rs.BasicStat(df=df)
35 | html_report = bs.get_report()
36 | # 保存
37 | with open(path+'dt_report.html','w',encoding='utf8') as f:
38 | f.write(html_report)
39 |
40 | df_report = bs.get_describe()
41 | df_report.to_excel(path+'df_report.xlsx')
42 |
43 | #######################################
44 | # 1.数据清洗
45 | #######################################
46 | pr = rs.Preprocess()
47 | str_s = pr.find_str(df=df,cols=num_cols)
48 | print('字符:',str_s)
49 | sign_s = pr.find_sign(df=df,cols=all_cols)
50 | print('特殊符号:',sign_s)
51 | # 离群值
52 | outliers = pr.outlier_drop(df=df,cols=all_cols,low_percent=0.001,up_percent=0.999,cat_percent=0.01)
53 | print('离群值:',outliers)
54 | # 离群值处理
55 | for k,v in outliers.items():
56 | if type(v) == dict:
57 | df[k] = df[k].apply(lambda x:v.get('low') if x < v.get('low') else v.get('up') if x > v.get('up') else x)
58 | elif type(v) == list:
59 | df[k] = df[k].replace(v,df[k].mode()[0])
60 |
61 | # 缺失统计
62 | missm_result = pr.miss_mode_cnt(df=df,cols=all_cols)
63 | print(missm_result)
64 | # 连续变量删除缺失80%+,众数率90%+
65 | # 分类变量删除缺失率90%,众数率95%+
66 | num_cols = [i for i in num_cols if missm_result['miss'][i] < 0.8 and missm_result['mode'][i] < 0.8]
67 | cat_cols = [i for i in cat_cols if missm_result['miss'][i] < 0.8 and missm_result['mode'][i] < 0.95]
68 | print(f'drop num cols :{[i for i in all_cols if i not in num_cols+cat_cols]}')
69 | all_cols = num_cols + cat_cols
70 | # 缺失填充
71 | df = pr.fill_nan(df=df,cols=all_cols,values=-99999,min_miss_rate=0.05)
72 |
73 | # 字符变量数值化
74 | df,factorize_dict = pr.factor_map(df=df,cols=cat_cols)
75 | # 过采样
76 | int_cols = cat_cols + [i for i in num_cols if i in germanCredit.int_col]
77 | print('int_cols:',int_cols)
78 |
79 | ds = rs.DataSample(df=df,cols=all_cols,target='target',sampling_strategy='minority')
80 | df_res = ds.over_sample(int_cols=int_cols)
81 | # 分类变量还原
82 | to_factorize = {k: {i:j for j,i in v.items()} for k,v in factorize_dict.items()}
83 | df_res = df_res.replace(to_factorize)
84 | df = df.replace(to_factorize)
85 | ########################################
86 | # 2.特征工程
87 | ########################################
88 | # 样本划分
89 | # woe bin
90 | train,valid = train_test_split(df_res,test_size=0.3,random_state=0)
91 | cat_bin,cat_iv = rs.cat_bin(df=train,cols=cat_cols,target='target',specials=['-99999'],
92 | bin_num_limit=5,count_distr_limit=0.05,method='chimerge')
93 | num_bin,num_iv = rs.num_bin(df=train,cols=num_cols,target='target',specials=[-99999],
94 | bin_num_limit=8,count_distr_limit=0.05,sc_method='chimerge',
95 | non_mono_cols=['age_in_years'],init_bins=15,init_min_samples=0.05,init_method='chi')
96 |
97 | bins = {**cat_bin,**num_bin}
98 | ivs = {**cat_iv,**num_iv}
99 | # woe转换
100 | train_woe = sc.woebin_ply(dt=train,bins=bins)
101 | valid_woe = sc.woebin_ply(dt=valid,bins=bins)
102 | df_woe = sc.woebin_ply(dt=df,bins=bins)
103 |
104 | #########################################
105 | # 3.特征选择
106 | #########################################
107 | sf = rs.SelectFeature()
108 | high_iv = sf.baseOn_iv(ivd=ivs,thred=0.05,is_draw=False)
109 | low_vif = sf.baseOn_collinear(df=train_woe,high_iv=high_iv,thred=0.7,is_draw=False)
110 | ml_cols, best_C = sf.baseOn_l1(X=train_woe[low_vif.keys()],y=train_woe['target'],Kfold=5,drop_plus=False)
111 |
112 | #########################################
113 | # 4.模型训练
114 | #########################################
115 |
116 | lr = rs.Lr(C=best_C)
117 | lr.fiting(X=train_woe[ml_cols.keys()],y=train_woe['target'],filename=path)
118 | joblib.dump(lr,path+'lr.pkl')
119 |
120 | ########################################
121 | # 5.评分卡构建
122 | ########################################
123 |
124 | card = rs.ScoreCard(lr=lr,bins=bins,ml_cols=[i.replace('_woe','') for i in ml_cols.keys()],
125 | score0=600,pdo=50)
126 | card_df = card.score_card()
127 | joblib.dump(card,path+'card.pkl')
128 | ########################################
129 | # 6.模型评估,真实样本评估
130 | #######################################
131 | valid['prob'] = lr.predict_proba(valid_woe[ml_cols.keys()])[:,1]
132 | df['prob'] = lr.predict_proba(df_woe[ml_cols.keys()])[:,1]
133 |
134 | print(f'valid evaluate:{rs.model_norm(valid["target"],valid["prob"])}')
135 | print(f'test evaluate:{rs.model_norm(df["target"],df["prob"])}')
136 |
137 | valid['score'] = card.apply_score(valid)
138 | df['score'] = card.apply_score(df)
139 |
140 | ########################################
141 | # 7.风险决策
142 | #######################################
143 | cut_off = rs.stragety_score(df=df,step=50,score='score',label='target')
144 | cut_off.to_excel(path+'cut_off.xlsx')
145 |
146 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | pandas-profiling>=2.4.0
2 | numpy>=1.18.1
3 | matplotlib>=3.1.3
4 | pandas>=1.0.3
5 | scikit-learn>=0.23.1
6 | imbalanced-learn==0.5.0
7 | statsmodels>=0.11.1
8 | scorecardpy>=0.1.9.2
9 | seaborn>=0.10.1
10 | scipy>=1.4.1
11 | toad>=0.0.60
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/riskModel/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huangxianyang/risk-model/468b57af341f6f9e887d284cc551b2428f709fe3/riskModel/.DS_Store
--------------------------------------------------------------------------------
/riskModel/EDA.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # @Time : 2018-01-21 11:22
3 | # @Author : HuangSir
4 | # @FileName: EDA.py
5 | # @Software: PyCharm
6 |
7 | """
8 | Exploratory analysis
9 | """
10 |
11 | import pandas as pd
12 | import pandas_profiling
13 |
14 | from toad import detect, quality
15 |
16 | class BasicStat:
17 | def __init__(self, df: pd.DataFrame):
18 | self.df = df
19 |
20 | def get_report(self):
21 | '''
22 | get data report of html
23 | '''
24 | # warnings.warn('there are costing much time')
25 | profile = pandas_profiling.ProfileReport(self.df)
26 | report = profile.to_html()
27 | print('finish')
28 | return report
29 |
30 | def get_describe(self):
31 | '''
32 | get data describe of DataFrame
33 | '''
34 | report = detect(self.df)
35 | return report
36 |
37 | def get_quality(self, target='target', iv_only=False, **kwargs):
38 | report = quality(self.df, target, iv_only, **kwargs)
39 | return report
40 |
--------------------------------------------------------------------------------
/riskModel/FeatureEngineering.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # @Time : 2018-01-21 11:22
3 | # @Author : HuangSir
4 | # @FileName: FeatureEngineering.py
5 | # @Software: PyCharm
6 |
7 | """
8 | 特征工程
9 | 1. 无序类别变量分箱组合, 有序数值变量分箱组合, 自定义分箱,WOE转换
10 | 2. 基于IV信息值特征选择,基于共线性特征选择,
11 | 基于VIF方差膨胀因子特征选择,基于逐步回归特征选择,基于L1正则化特征选择
12 | """
13 | import time
14 | import numpy as np
15 | import pandas as pd
16 | from sklearn.linear_model import LogisticRegression
17 | from sklearn.model_selection import GridSearchCV,StratifiedKFold
18 | from toad.transform import Combiner
19 | from scorecardpy import woebin
20 | from statsmodels.stats.outliers_influence import variance_inflation_factor # 共线性检验
21 | # 自定义
22 | from .utils.btl.merge import monotonous_bin
23 | from .utils.PltFunction import PlotFeatureEn
24 |
25 | def cat_bin(df:pd.DataFrame,cols:list=None,target:str='target',specials:list=None,
26 | bin_num_limit:int=5,count_distr_limit:float=0.05,method:str='chimerge',**kwargs):
27 | if not cols:
28 | cols = df.columns.difference([target]).tolist()
29 |
30 | if specials:
31 | specials = {k:specials for k in cols}
32 |
33 | bind, ivd = dict(), dict()
34 | t0 = time.process_time()
35 | for col in cols:
36 | bind[col] = woebin(dt=df,x=col,y=target,special_values=specials,bin_num_limit=bin_num_limit,
37 | count_distr_limit=count_distr_limit,method=method,print_info=False,
38 | **kwargs)[col]
39 | ivd[col] = bind[col]['total_iv'].unique()[0]
40 | print(f'there are bing {len(cols)} using {int((time.process_time() - t0) * 100 / 60)} seconds')
41 | return bind, ivd
42 |
43 | def num_bin(df:pd.DataFrame,cols:list=None,target:str='target',specials:list=None,
44 | bin_num_limit:int=5,count_distr_limit:float=0.05,sc_method='chimerge',
45 | non_mono_cols:list=None,init_bins=10,init_min_samples=0.05,init_method='chi',**kwargs):
46 |
47 | # 粗分箱,单调检验,分箱结果
48 | if not cols:
49 | cols = df.columns.difference([target]).tolist()
50 |
51 | if specials:
52 | specials = {k: specials for k in cols}
53 |
54 | if not non_mono_cols:
55 | non_mono_cols = []
56 |
57 | bind, ivd = dict(), dict()
58 | t0 = time.process_time()
59 |
60 | for col in cols:
61 | if col in non_mono_cols:
62 | bind[col] = woebin(dt=df, x=col, y=target, special_values=specials, bin_num_limit=bin_num_limit,
63 | count_distr_limit=count_distr_limit, method=sc_method,print_info=False)[col]
64 | ivd[col] = bind[col]['total_iv'].unique()[0]
65 |
66 | else:
67 | c = Combiner()
68 | c.fit(X=df[col], y=df[target],n_bins=init_bins,min_samples=init_min_samples,method=init_method,**kwargs)
69 | init_points = c.export()[col]
70 | breaks_list = monotonous_bin(df=df, col=col, target=target,cutOffPoints=init_points, special_values=specials)
71 |
72 | bind[col] = woebin(dt=df, x=col, y=target, special_values=specials, breaks_list=breaks_list,
73 | bin_num_limit=bin_num_limit,count_distr_limit=count_distr_limit,method=sc_method,
74 | print_info=False)[col]
75 | ivd[col] = bind[col]['total_iv'].unique()[0]
76 |
77 | print(f'there are bing {len(cols)} using {int((time.process_time() - t0) * 100 / 60)} seconds')
78 | return bind, ivd
79 |
80 | class SelectFeature(object):
81 | """特征选择"""
82 |
83 | def baseOn_iv(self, ivd: dict, thred: float = 0.02, is_draw=False):
84 | """
85 | 选择IV高于阈值的变量, 一般说来,信息值0.02以下表示与目标变量相关性非常弱
86 | """
87 | high_IV = {k: v for k, v in ivd.items() if v >= thred}
88 | high_IV = {'_'.join([k,'woe']): v for (k, v) in sorted(high_IV.items(), key=lambda x: x[1], reverse=True)} # 排序
89 | if is_draw:
90 | PltF = PlotFeatureEn()
91 | PltF.draw_IV(IV_dict=high_IV, path='./')
92 | return high_IV
93 |
94 | def baseOn_collinear(self, df: pd.DataFrame, high_iv: dict, thred: float = 0.7, is_draw=False):
95 |
96 | # 基于两两相关性共线性检验
97 | # 1,将候选变量按照IV进行降序排列
98 | # 2,计算第i和第i+1的变量的线性相关系数
99 | # 3,对于系数超过阈值的两个变量,剔除IV较低的一个
100 | deleted_feature = [] # 删除的变量
101 | for col1 in high_iv.keys():
102 | if col1 in deleted_feature:
103 | continue
104 | for col2 in high_iv.keys():
105 | if col1 == col2 or col2 in deleted_feature:
106 | continue
107 | cor_v = np.corrcoef(df[col1], df[col2])[0, 1]
108 | if abs(cor_v) >= thred:
109 | if high_iv[col1] >= high_iv[col2]:
110 | deleted_feature.append(col2)
111 | print(f'相关性检验,删除变量:{col2}')
112 | else:
113 | deleted_feature.append(col1)
114 | print(f'相关性检验,删除变量:{col1}')
115 |
116 | last_feature = [i for i in high_iv.keys() if i not in deleted_feature]
117 | # 多变量分析:VIF
118 | X = df[last_feature].values
119 | VIF_list = [variance_inflation_factor(X, i) for i in range(X.shape[1])]
120 | max_VIF = max(VIF_list)
121 | print(f'最大方差膨胀因子:{max_VIF}')
122 | feature_VIF = {k: v for k, v in zip(last_feature, VIF_list)}
123 | # 相关性可视化
124 | if is_draw:
125 | PltF = PlotFeatureEn()
126 | PltF.draw_corr(df=df, figsize=(15, 15), path='./')
127 | return feature_VIF
128 |
129 | def baseOn_l1(self, X: pd.DataFrame, y: pd.Series,Kfold:int=5,drop_plus: bool = False):
130 | """
131 | 基于L1正则选择特征
132 | """
133 | lr = LogisticRegression(penalty='l1', class_weight='balanced', solver='liblinear')
134 | k = StratifiedKFold(n_splits=Kfold, shuffle=True, random_state=42)
135 | gs = GridSearchCV(estimator=lr,param_grid={'C':np.arange(0.005,0.5,0.005)},scoring='roc_auc',cv=k)
136 | _ = gs.fit(X,y)
137 | print(f'best_scoring:{round(gs.best_score_,3)}')
138 | print(f'best_params:{gs.best_params_}')
139 | C = gs.best_params_['C']
140 | lr = LogisticRegression(penalty='l1', C=C, class_weight='balanced', solver='liblinear')
141 | _ = lr.fit(X, y)
142 | # 模型系数
143 | features = X.columns.tolist()
144 | paramsEst = pd.Series(lr.coef_.tolist()[0], index=features)
145 | feature_coe = paramsEst.to_dict()
146 | # 变量选择
147 | if drop_plus:
148 | ml_cols = {k: v for k, v in feature_coe.items() if v < 0}
149 | else:
150 | ml_cols = {k: v for k, v in feature_coe.items() if v > 0}
151 | return ml_cols,C
152 |
--------------------------------------------------------------------------------
/riskModel/Modeling.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # @Time : 2018-01-21 11:22
3 | # @Author : HuangSir
4 | # @FileName: Modeling.py
5 | # @Software: PyCharm
6 |
7 | """
8 | 模型训练,模型评估,标准评分卡转换,模型预测(概率预测,评分预测)
9 | """
10 | import re
11 | import numpy as np
12 | import pandas as pd
13 | from sklearn.linear_model import LogisticRegression
14 | from .utils.tools import model_norm,Prob2Score
15 | from .utils.PltFunction import PlotModel
16 | from scorecardpy import scorecard_ply
17 |
18 | class Lr(LogisticRegression):
19 | """模型实例化"""
20 | def __init__(self,C,**kwargs):
21 | super().__init__(**kwargs)
22 | self.C = C
23 | self.penalty='l1'
24 | self.class_weight='balanced'
25 | self.solver='liblinear'
26 |
27 | def fiting(self,X:pd.DataFrame,y:pd.Series,filename='./'):
28 | """
29 | lr cv
30 | """
31 | features = X.columns.tolist()
32 |
33 | if self.penalty == 'l1':
34 | self.solver = 'liblinear'
35 |
36 | # 拟合
37 | self.fit(X,y)
38 | # 评估
39 | y_prob = self.predict_proba(X)[:,1]
40 | norm = model_norm(y_true=y,y_prob=y_prob)
41 | print(f'training model result:\n{norm}')
42 |
43 | # 作图
44 | pltm = PlotModel(y_true=y.values,y_prob=y_prob)
45 | pltm.plot_roc_curve(filename=filename)
46 | pltm.plot_ks_curve(filename=filename)
47 | # 模型系数
48 | paramsEst = pd.Series(self.coef_.tolist()[0], index=features)
49 | paramsEst['intercept'] = self.intercept_.tolist()[0]
50 | print(f'model params:\n{paramsEst}')
51 |
52 | class ScoreCard(object):
53 | """
54 | 评分卡模型
55 | """
56 | def __init__(self,lr,bins:dict,ml_cols:list,score0:int=600,pdo:int=50):
57 |
58 | self.model = lr
59 | self.bins = bins
60 | self.model_feature = ml_cols
61 | self.score0 = score0
62 | self.pdo= pdo
63 |
64 | def score_card(self,re_df:bool=True):
65 | '''
66 | Creating a Scorecard
67 | ------
68 | `scorecard` creates a scorecard based on the results from `bins`
69 | and LogisticRegression of sklearn.linear_model
70 |
71 | Returns
72 | ------
73 | DataFrame
74 | scorecard df
75 | '''
76 | # coefficients
77 | A = self.score0
78 | B = self.pdo / np.log(2)
79 | # bins # if (is.list(bins)) rbindlist(bins)
80 | bins_df = pd.concat(self.bins, ignore_index=True)
81 |
82 | xs = [re.sub('_woe$', '', i) for i in self.model_feature]
83 | # coefficients
84 | coef_df = pd.Series(self.model.coef_[0], index=np.array(xs)).loc[lambda x: x != 0] # .reset_index(drop=True)
85 |
86 | # scorecard
87 | basepoints = A - B * self.model.intercept_[0] # 校准
88 | card = {}
89 | card['baseScore'] = pd.DataFrame({'variable': 'basepoints', 'bin': '基础分', 'points': round(basepoints, 2)},index=[0])
90 | for i in coef_df.index:
91 | card[i] = bins_df.loc[bins_df['variable'] == i, ['variable', 'bin', 'woe']] \
92 | .assign(points=lambda x: round(-B * x['woe'] * coef_df[i], 2))[['variable', 'bin', 'points']]
93 |
94 | # 转换为df
95 | df = pd.DataFrame()
96 | for col in card.keys():
97 | col_df = card[col]
98 | df = pd.concat([df,col_df])
99 | df.set_index(['variable'], inplace=True)
100 |
101 | if re_df:
102 | return df
103 | else:
104 | return card
105 |
106 | def pred_score(self,df_woe:pd.DataFrame,only_total_score=True):
107 | y_prob = self.model.predict_proba(df_woe[self.model_feature].values)[:,1]
108 | score = Prob2Score(prob=y_prob,basePoint=self.score0,PDO=self.pdo)
109 | df_woe['score'] = score
110 | if only_total_score:
111 | return df_woe['score']
112 | else:
113 | return df_woe
114 |
115 | def apply_score(self,df,**kwargs):
116 | df_score = scorecard_ply(dt=df,card=self.score_card(re_df=False),**kwargs)
117 | return df_score
--------------------------------------------------------------------------------
/riskModel/Preprocessing.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # @Time : 2018-01-21 11:22
3 | # @Author : HuangSir
4 | # @FileName: Preprocessing.py
5 | # @Software: PyCharm
6 |
7 | """
8 | 1. 变量类型划分--异常值检测--异常值处理--重复行(列)处理--众数处理--缺失处理
9 | 2. 样本采样: 随机采样, 随机平衡采样, Borderline-SMOTE过采样, Easy Ensemble 欠采样.
10 | """
11 | import pandas as pd
12 | import numpy as np
13 | import numbers
14 | from sklearn.utils import shuffle
15 | from .utils.tools import str2num
16 | import re
17 | from imblearn.over_sampling import BorderlineSMOTE
18 | from collections import Counter
19 |
20 |
21 | class Preprocess(object):
22 | """
23 | 数据预处理
24 | """
25 |
26 | def find_str(self, df: pd.DataFrame, cols: list):
27 | """
28 | 连续数值变量包含字符串
29 | """
30 | s = set()
31 | for col in cols:
32 | if col in df.columns:
33 | for i in df[col].unique():
34 | try:
35 | if i is np.nan or isinstance(str2num(i), numbers.Real):
36 | pass
37 | except:
38 | print(f'{col} ---> {i}')
39 | s.add(i)
40 | return s
41 |
42 | def find_sign(self, df: pd.DataFrame, cols: list):
43 | """
44 | 识别特殊符号
45 | """
46 | s = set()
47 | for col in cols:
48 | for v in df[col].unique():
49 | try:
50 | special = r"\$|\(|\)|\*|\+|\[|\]|\?\\|\^|\||\@|\&|\{|\}|u"
51 | t_s = set(re.findall(special, str(v)))
52 | s.add(t_s)
53 | except:
54 | pass
55 | return s
56 |
57 | def outlier_drop(self, df: pd.DataFrame, cols: list, low_percent=0.01, up_percent=0.99, cat_percent=0.001):
58 | """
59 | 离群值
60 | """
61 | out_d = dict()
62 | object_cols = df.select_dtypes(include=['object', 'bool', 'category']).columns.tolist()
63 | for col in cols:
64 | if col in object_cols: # 字符型变量
65 | cat_v_p = df[col].value_counts(normalize=True, dropna=False) # 统计分类变量个数占比
66 | del_v = cat_v_p[cat_v_p < cat_percent].index.tolist() # 删除值
67 | print(f'分类变量:{col},离群值:{del_v}')
68 | out_d[col] = del_v
69 | else:
70 | try:
71 | q1 = df[col].quantile(low_percent) # 下分为点
72 | q2 = df[col].quantile(up_percent) # 上分为点
73 | print(f'连续变量:{col},low:{q1},up:{q2}')
74 | out_d[col] = {'low': q1, 'up': q2}
75 | except TypeError:
76 | pass
77 | out_d = {k: v for k, v in out_d.items() if v}
78 | return out_d
79 |
80 | def miss_mode_cnt(self, df: pd.DataFrame, cols: list):
81 | """
82 | 缺失率和众数率统计
83 | """
84 | result = {}
85 | result['miss'], result['mode'] = {}, {}
86 |
87 | for col in cols:
88 | miss_rate = df[col].isnull().sum() / len(df) # 缺失率
89 | result['miss'][col] = miss_rate
90 |
91 | mode_values = df[col].mode()[0] # 众数
92 | mode_rate = len(df.loc[df[col] == mode_values, :]) / len(df) # 众数率
93 | result['mode'][col] = mode_rate
94 |
95 | return result
96 |
97 | def fill_nan(self, df: pd.DataFrame, cols: list, values=-9999, min_miss_rate=0.05):
98 | """
99 | 缺失值填充
100 | """
101 | miss_mode = self.miss_mode_cnt(df,cols)
102 | for col in cols:
103 | miss_rate = miss_mode['miss'][col]
104 | if miss_rate < min_miss_rate:
105 | mode = df[col].mode()[0]
106 | df[col] = df[col].fillna(mode)
107 | else:
108 | df[col] = df[col].fillna(values)
109 |
110 | return df
111 |
112 | def factor_map(self, df: pd.DataFrame, cols: list):
113 | """
114 | 字符变量数值化
115 | """
116 | factorize_dict = {}
117 | for col in cols:
118 | factorize_dict[col] = {}
119 | l = pd.factorize(df[col])
120 | for i in np.arange(len(l[1])):
121 | factorize_dict[col][l[1][i]] = i # 数值化映射字典
122 | df[col] = l[0] # 数值化
123 |
124 | return df, factorize_dict # 数值数据, 映射字典
125 |
126 |
127 | class DataSample(BorderlineSMOTE):
128 | """
129 | 数据抽样
130 | """
131 |
132 | def __init__(self, df: pd.DataFrame, cols: list, target='target',
133 | sampling_strategy='minority', random_state=None, k_neighbors=5,
134 | n_jobs=1, m_neighbors=10, kind='borderline-1'):
135 | super().__init__(sampling_strategy, random_state,
136 | k_neighbors, n_jobs, m_neighbors, kind)
137 | self.df = df
138 | self.cols = cols
139 | self.target = target
140 |
141 | def balance_sample(self, odd, scalar: str = 'good'):
142 | """
143 | 根据好坏比抽样
144 | """
145 | bad_df = self.df.loc[self.df[self.target] == 1, :] # 坏样本
146 | good_df = self.df.loc[self.df[self.target] == 0, :] # 好样本
147 | bad = len(bad_df) # 坏样本数
148 | good = len(good_df) # 好样本数
149 | if scalar == 'good': # 对好样本进行抽样
150 | good_new = int(bad * odd) # 所需好样本数
151 | if good_new > good:
152 | good_df_new = good_df.sample(n=good_new, replace=True)
153 | else:
154 | good_df_new = good_df.sample(n=good_new, replace=False)
155 |
156 | good_df = good_df_new
157 |
158 | else:
159 | bad_new = int(good / odd) # 所需坏样本数
160 | if bad_new > bad:
161 | bad_df_new = bad_df.sample(n=bad_new, replace=True)
162 | else:
163 | bad_df_new = bad_df.sample(n=bad_new, replace=False)
164 |
165 | bad_df = bad_df_new
166 |
167 | self.df = pd.concat([bad_df, good_df], axis=0) # 合并新样本
168 | self.df = shuffle(self.df) # 打乱顺序
169 | return self.df
170 |
171 | def over_sample(self,int_cols:list):
172 | """
173 | 过采样
174 | """
175 | print(f'Original label shape {Counter(self.df[self.target])}')
176 |
177 | X_res, y_res = self.fit_resample(self.df[self.cols], self.df[self.target])
178 |
179 | print(f'overSample label shape {Counter(y_res)}')
180 |
181 | data = np.concatenate([X_res, y_res.reshape(-1, 1)], axis=1)
182 | self.df = pd.DataFrame(data=data, columns=self.cols + [self.target])
183 | # 整数化
184 | for col in int_cols:
185 | self.df[col] = self.df[col].apply(lambda x:int(round(x,0)))
186 |
187 | return self.df
188 |
--------------------------------------------------------------------------------
/riskModel/RiskStragety.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # @Time : 2018-01-21 11:22
3 | # @Author : HuangSir
4 | # @FileName: RiskStragety.py
5 | # @Software: PyCharm
6 |
7 | # 风险策略,稳定性评估PSI,评分决策表,KS
8 | # 单变量PSI
9 |
10 | import pandas as pd
11 | import numpy as np
12 |
13 | def caculate_ks(df_score:pd.DataFrame, score:str='score', target:str='target'):
14 | """
15 | 指标KS,不分组情况下
16 | :return:KS
17 | """
18 | df = df_score.sort_values(by=score)
19 | total_good = len(df.loc[df[target] == 0, :])
20 | total_bad = len(df.loc[df[target] == 1, :])
21 | df_good, df_bad = pd.DataFrame(), pd.DataFrame()
22 |
23 | df_good['score'] = df.loc[df[target] == 0, score]
24 | df_good['sum_good'] = [i + 1 for i in range(len(df.loc[df[target] == 0, target]))]
25 | df_good['sum_good_rate'] = df_good['sum_good'] / total_good
26 | df_good = df_good.drop_duplicates(['score'], keep='last')
27 |
28 | df_bad['sum_bad'] = df.loc[df[target] == 1, target].cumsum()
29 | df_bad['score'] = df.loc[df[target] == 1, score]
30 | df_bad['sum_bad_rate'] = df_bad['sum_bad'] / total_bad
31 | df_bad = df_bad.drop_duplicates(['score'], keep='last')
32 |
33 | df = pd.merge(df_bad, df_good, how='outer', on='score')
34 | df = df.sort_values(by='score')
35 | df = df.fillna(method='ffill')
36 | df = df.fillna(0)
37 |
38 | df['KS'] = df['sum_bad_rate'] - df['sum_good_rate']
39 | KS = abs(df['KS']).max()
40 | return KS, df
41 |
42 | def var_psi(cols:list,train:pd.DataFrame,test:pd.DataFrame):
43 | """
44 | 入模变量PSI
45 | """
46 | psi_dict = {}
47 | for col in cols:
48 | psi_dict[col] = (train[col].value_counts(normalize=True,dropna=False)-test[col].value_counts(normalize=True,dropna=False))*\
49 | (np.log(train[col].value_counts(normalize=True,dropna=False))/test[col].value_counts(normalize=True,dropna=False))
50 | psi_dict_var = {}
51 | # 输出每个变量的PSI
52 | for col in cols:
53 | psi_dict_var[col] = psi_dict[col].sum()
54 | return psi_dict_var
55 |
56 | def bin_list(low_line:int,up_line:int,step:int):
57 | """
58 | 分组
59 | """
60 | bin = [] # 分组方法
61 | bin.append(float('-inf')) # 极小值
62 | for i in range(int(round((up_line-low_line)/step,0))):
63 | bin.append(low_line+step*i)
64 | bin.append(up_line)
65 | bin.append(float('inf')) # 极大值
66 | return bin
67 |
68 |
69 | def stragety_score(df:pd.DataFrame,step:int=50,score:str='score',label:str='target'):
70 | """
71 | 风险决策报表
72 | """
73 | #分组
74 | low_line = round(df[score].min()/step)*step
75 | up_line = int(df[score].max()/step)*step
76 |
77 | bin = bin_list(low_line,up_line,step) #分组列表
78 | # total 每个分数段总计
79 | total_cut = pd.cut(x=df[score],bins=bin,right=False)
80 | total_df = pd.value_counts(total_cut) # 每个分数段总计数
81 | total_sum = len(total_cut) # 总计
82 |
83 | # good 每个分数段的好客户
84 | temp_df = df.loc[df[label]==0,score]
85 | good_cut = pd.cut(x=temp_df,bins=bin,right=False)
86 | good_df = pd.value_counts(good_cut) # 每个分数段好客户计数
87 | good_sum = len(good_cut) # 好客户总数
88 |
89 | # bad 每个分数段的坏客户
90 | temp_df = df.loc[df[label]==1,score]
91 | bad_cut = pd.cut(x=temp_df,bins=bin,right=False)
92 | bad_df = pd.value_counts(bad_cut) # 每个分数段的坏客户计数
93 | bad_sum = len(bad_cut) # 坏客户总数
94 |
95 | # 总计,好,坏 计数合并
96 | df = pd.concat([total_df,good_df,bad_df],axis=1)
97 | df.columns = ['total','good','bad']
98 | # 累积
99 | df_cumsum = df.cumsum()
100 | df_cumsum.columns = ['sum_total','sum_good','sum_bad'] # 累积总,累积好,累积坏 计数
101 | df = pd.concat([df,df_cumsum],axis=1)
102 |
103 | # 累积率
104 | df['sum_total_rate'] = df['sum_total']/total_sum # 累积坏比率
105 | df['sum_good_rate'] = df['sum_good']/good_sum # 累积好比率
106 | df['sum_bad_rate'] = df["sum_bad"]/bad_sum # 累积坏比率
107 | df['KS'] = df['sum_bad_rate'] - df['sum_good_rate'] # 区分度ks
108 | df['bad_rate'] = df['bad']/df['total'] # 每个分数段的坏比率
109 | df['good_rate'] = df['good']/df['total'] #每个分数段的好比率
110 | df['lift'] = df['sum_bad_rate']/df['sum_total_rate'] # 提升度
111 | return df
112 |
113 |
114 | def score_psi(train:pd.DataFrame,test:pd.DataFrame,low_line:int,up_line:int,step:int=50,score='score'):
115 |
116 | """
117 | 分数PSI
118 | """
119 |
120 | #分组
121 | bin = bin_list(low_line=low_line,up_line=up_line,step=step)
122 | train_len = len(train) # 训练集总数
123 | test_len = len(test) # 测试集总数
124 |
125 | train_cut = pd.cut(x=train[score],bins=bin,right=False) # 训练集分组
126 | test_cut = pd.cut(x=test[score],bins=bin,right=False) # 测试集分组结果
127 | train_df = pd.value_counts(train_cut) # 训练集分组计数
128 | test_df = pd.value_counts(test_cut) # 测试集分组计数
129 | df = pd.concat([train_df,test_df],axis=1) # 合并
130 | df.columns = ['train','test']
131 | df['train_percent'] = df['train']/train_len #每个分数段的计数比例
132 | df['test_percent'] = df['test']/test_len
133 | df['PSI'] = (df['train_percent']-df['test_percent'])*np.log(df['train_percent']/df['test_percent']) #每个分段的psi
134 | PSI = df['PSI'].sum()
135 | return PSI,df
136 |
--------------------------------------------------------------------------------
/riskModel/__init__.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | __version__ = '1.0.6'
4 |
5 | from .EDA import BasicStat # 数据探索分析
6 | from .Preprocessing import Preprocess,DataSample # 数据清洗, 数据抽样
7 | from .FeatureEngineering import SelectFeature # 特征分箱,特征选择
8 | from .Modeling import Lr,ScoreCard # 模型训练,评分卡构建
9 | from .utils.PltFunction import PlotModel # 模型作图,ks,roc曲线
10 | from .data.germancredit import Germancredit # 导入数据
11 |
12 | # 方法
13 | from .FeatureEngineering import cat_bin,num_bin # 分箱
14 | from .utils.tools import model_norm,Prob2Score # 模型指标,概率转换为分数
15 | from .RiskStragety import caculate_ks,stragety_score,score_psi,var_psi # ks计算,决策报告,评分psi,变量psi
16 |
17 |
--------------------------------------------------------------------------------
/riskModel/__pycache__/EDA.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huangxianyang/risk-model/468b57af341f6f9e887d284cc551b2428f709fe3/riskModel/__pycache__/EDA.cpython-37.pyc
--------------------------------------------------------------------------------
/riskModel/__pycache__/FeatureEngineering.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huangxianyang/risk-model/468b57af341f6f9e887d284cc551b2428f709fe3/riskModel/__pycache__/FeatureEngineering.cpython-37.pyc
--------------------------------------------------------------------------------
/riskModel/__pycache__/Modeling.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huangxianyang/risk-model/468b57af341f6f9e887d284cc551b2428f709fe3/riskModel/__pycache__/Modeling.cpython-37.pyc
--------------------------------------------------------------------------------
/riskModel/__pycache__/Preprocessing.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huangxianyang/risk-model/468b57af341f6f9e887d284cc551b2428f709fe3/riskModel/__pycache__/Preprocessing.cpython-37.pyc
--------------------------------------------------------------------------------
/riskModel/__pycache__/RiskStragety.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huangxianyang/risk-model/468b57af341f6f9e887d284cc551b2428f709fe3/riskModel/__pycache__/RiskStragety.cpython-37.pyc
--------------------------------------------------------------------------------
/riskModel/__pycache__/__init__.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huangxianyang/risk-model/468b57af341f6f9e887d284cc551b2428f709fe3/riskModel/__pycache__/__init__.cpython-37.pyc
--------------------------------------------------------------------------------
/riskModel/data/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huangxianyang/risk-model/468b57af341f6f9e887d284cc551b2428f709fe3/riskModel/data/.DS_Store
--------------------------------------------------------------------------------
/riskModel/data/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huangxianyang/risk-model/468b57af341f6f9e887d284cc551b2428f709fe3/riskModel/data/__init__.py
--------------------------------------------------------------------------------
/riskModel/data/__pycache__/__init__.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huangxianyang/risk-model/468b57af341f6f9e887d284cc551b2428f709fe3/riskModel/data/__pycache__/__init__.cpython-37.pyc
--------------------------------------------------------------------------------
/riskModel/data/__pycache__/germancredit.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huangxianyang/risk-model/468b57af341f6f9e887d284cc551b2428f709fe3/riskModel/data/__pycache__/germancredit.cpython-37.pyc
--------------------------------------------------------------------------------
/riskModel/data/german.txt:
--------------------------------------------------------------------------------
1 | Description of the German credit dataset.
2 |
3 | 1. Title: German Credit data
4 |
5 | 2. Source Information
6 |
7 | Professor Dr. Hans Hofmann
8 | Institut f"ur Statistik und "Okonometrie
9 | Universit"at Hamburg
10 | FB Wirtschaftswissenschaften
11 | Von-Melle-Park 5
12 | 2000 Hamburg 13
13 |
14 | 3. Number of Instances: 1000
15 |
16 | Two datasets are provided. the original dataset, in the form provided
17 | by Prof. Hofmann, contains categorical/symbolic attributes and
18 | is in the file "germancredit.csv".
19 |
20 | 6. Number of Attributes german: 20 (7 numerical, 13 categorical)
21 |
22 |
23 | 7. Attribute description for german
24 |
25 | Attribute 1: (qualitative)
26 | Status of existing checking account
27 | 现有的支票状态,有序离散
28 | A11 : ... < 0 DM
29 | A12 : 0 <= ... < 200 DM
30 | A13 : ... >= 200 DM /
31 | salary assignments for at least 1 year
32 | A14 : no checking account
33 |
34 | Attribute 2: (numerical)
35 | Duration in month
36 | 持续时间,连续变量
37 |
38 | Attribute 3: (qualitative)
39 | Credit history
40 | 信用历史,有序离散
41 | A30 : no credits taken/
42 | all credits paid back duly
43 | A31 : all credits at this bank paid back duly
44 | A32 : existing credits paid back duly till now
45 | A33 : delay in paying off in the past
46 | A34 : critical account/
47 | other credits existing (not at this bank)
48 |
49 | Attribute 4: (qualitative)
50 | Purpose
51 | 用途,无序离散
52 | A40 : car (new)
53 | A41 : car (used)
54 | A42 : furniture/equipment
55 | A43 : radio/television
56 | A44 : domestic appliances
57 | A45 : repairs
58 | A46 : education
59 | A47 : (vacation - does not exist?)
60 | A48 : retraining
61 | A49 : business
62 | A410 : others
63 |
64 | Attribute 5: (numerical)
65 | Credit amount
66 | 信用额度,连续变量
67 |
68 | Attibute 6: (qualitative)
69 | Savings account/bonds
70 | 储蓄卡存储额度,有序离散
71 | A61 : ... < 100 DM
72 | A62 : 100 <= ... < 500 DM
73 | A63 : 500 <= ... < 1000 DM
74 | A64 : .. >= 1000 DM
75 | A65 : unknown/ no savings account
76 |
77 | Attribute 7: (qualitative)
78 | Present employment since
79 | 工作至今年限,有序离散
80 | A71 : unemployed
81 | A72 : ... < 1 year
82 | A73 : 1 <= ... < 4 years
83 | A74 : 4 <= ... < 7 years
84 | A75 : .. >= 7 years
85 |
86 | Attribute 8: (numerical)
87 | Installment rate in percentage of disposable income
88 | 分期付款利率占可支配收入百分比,连续
89 |
90 | Attribute 9: (qualitative)
91 | Personal status and sex
92 | 婚姻状态和性别,无序离散
93 | A91 : male : divorced/separated
94 | A92 : female : divorced/separated/married
95 | A93 : male : single
96 | A94 : male : married/widowed
97 | A95 : female : single
98 |
99 | Attribute 10: (qualitative)
100 | Other debtors / guarantors
101 | 其他债务或担保,无序离散
102 | A101 : none
103 | A102 : co-applicant
104 | A103 : guarantor
105 |
106 | Attribute 11: (numerical)
107 | Present residence since
108 | 居住至今年限, 连续
109 |
110 | Attribute 12: (qualitative)
111 | Property
112 | 属性,离散
113 | A121 : real estate
114 | A122 : if not A121 : building society savings agreement/
115 | life insurance
116 | A123 : if not A121/A122 : car or other, not in attribute 6
117 | A124 : unknown / no property
118 |
119 | Attribute 13: (numerical)
120 | Age in years
121 | 年龄,连续
122 |
123 | Attribute 14: (qualitative)
124 | Other installment plans
125 | 其他分期计划,离散
126 | A141 : bank
127 | A142 : stores
128 | A143 : none
129 |
130 | Attribute 15: (qualitative)
131 | Housing
132 | 住房情况,离散
133 | A151 : rent
134 | A152 : own
135 | A153 : for free
136 |
137 | Attribute 16: (numerical)
138 | Number of existing credits at this bank
139 | 现有银行积分数,连续
140 |
141 | Attribute 17: (qualitative)
142 | Job
143 | 工作,有序离散
144 | A171 : unemployed/ unskilled - non-resident
145 | A172 : unskilled - resident
146 | A173 : skilled employee / official
147 | A174 : management/ self-employed/
148 | highly qualified employee/ officer
149 |
150 | Attribute 18: (numerical)
151 | Number of people being liable to provide maintenance for
152 | 维护服务人数,连续
153 |
154 | Attribute 19: (qualitative)
155 | Telephone
156 | 电话,离散
157 | A191 : none
158 | A192 : yes, registered under the customers name
159 |
160 | Attribute 20: (qualitative)
161 | foreign worker
162 | 国外工作经历,离散
163 | A201 : yes
164 | A202 : no
165 |
166 |
167 |
168 | 8. Cost Matrix
169 |
170 | This dataset requires use of a cost matrix (see below)
171 |
172 |
173 | 1 2
174 | ----------------------------
175 | 1 0 1
176 | -----------------------
177 | 2 5 0
178 |
179 | (1 = Good, 2 = Bad)
180 |
181 | the rows represent the actual classification and the columns
182 | the predicted classification.
183 |
184 | It is worse to class a customer as good when they are bad (5),
185 | than it is to class a customer as bad when they are good (1).
186 |
187 |
--------------------------------------------------------------------------------
/riskModel/data/germancredit.csv:
--------------------------------------------------------------------------------
1 | A11 6 A34 A43 1169 A65 A75 4 A93 A101 4 A121 67 A143 A152 2 A173 1 A192 A201 1
2 | A12 48 A32 A43 5951 A61 A73 2 A92 A101 2 A121 22 A143 A152 1 A173 1 A191 A201 2
3 | A14 12 A34 A46 2096 A61 A74 2 A93 A101 3 A121 49 A143 A152 1 A172 2 A191 A201 1
4 | A11 42 A32 A42 7882 A61 A74 2 A93 A103 4 A122 45 A143 A153 1 A173 2 A191 A201 1
5 | A11 24 A33 A40 4870 A61 A73 3 A93 A101 4 A124 53 A143 A153 2 A173 2 A191 A201 2
6 | A14 36 A32 A46 9055 A65 A73 2 A93 A101 4 A124 35 A143 A153 1 A172 2 A192 A201 1
7 | A14 24 A32 A42 2835 A63 A75 3 A93 A101 4 A122 53 A143 A152 1 A173 1 A191 A201 1
8 | A12 36 A32 A41 6948 A61 A73 2 A93 A101 2 A123 35 A143 A151 1 A174 1 A192 A201 1
9 | A14 12 A32 A43 3059 A64 A74 2 A91 A101 4 A121 61 A143 A152 1 A172 1 A191 A201 1
10 | A12 30 A34 A40 5234 A61 A71 4 A94 A101 2 A123 28 A143 A152 2 A174 1 A191 A201 2
11 | A12 12 A32 A40 1295 A61 A72 3 A92 A101 1 A123 25 A143 A151 1 A173 1 A191 A201 2
12 | A11 48 A32 A49 4308 A61 A72 3 A92 A101 4 A122 24 A143 A151 1 A173 1 A191 A201 2
13 | A12 12 A32 A43 1567 A61 A73 1 A92 A101 1 A123 22 A143 A152 1 A173 1 A192 A201 1
14 | A11 24 A34 A40 1199 A61 A75 4 A93 A101 4 A123 60 A143 A152 2 A172 1 A191 A201 2
15 | A11 15 A32 A40 1403 A61 A73 2 A92 A101 4 A123 28 A143 A151 1 A173 1 A191 A201 1
16 | A11 24 A32 A43 1282 A62 A73 4 A92 A101 2 A123 32 A143 A152 1 A172 1 A191 A201 2
17 | A14 24 A34 A43 2424 A65 A75 4 A93 A101 4 A122 53 A143 A152 2 A173 1 A191 A201 1
18 | A11 30 A30 A49 8072 A65 A72 2 A93 A101 3 A123 25 A141 A152 3 A173 1 A191 A201 1
19 | A12 24 A32 A41 12579 A61 A75 4 A92 A101 2 A124 44 A143 A153 1 A174 1 A192 A201 2
20 | A14 24 A32 A43 3430 A63 A75 3 A93 A101 2 A123 31 A143 A152 1 A173 2 A192 A201 1
21 | A14 9 A34 A40 2134 A61 A73 4 A93 A101 4 A123 48 A143 A152 3 A173 1 A192 A201 1
22 | A11 6 A32 A43 2647 A63 A73 2 A93 A101 3 A121 44 A143 A151 1 A173 2 A191 A201 1
23 | A11 10 A34 A40 2241 A61 A72 1 A93 A101 3 A121 48 A143 A151 2 A172 2 A191 A202 1
24 | A12 12 A34 A41 1804 A62 A72 3 A93 A101 4 A122 44 A143 A152 1 A173 1 A191 A201 1
25 | A14 10 A34 A42 2069 A65 A73 2 A94 A101 1 A123 26 A143 A152 2 A173 1 A191 A202 1
26 | A11 6 A32 A42 1374 A61 A73 1 A93 A101 2 A121 36 A141 A152 1 A172 1 A192 A201 1
27 | A14 6 A30 A43 426 A61 A75 4 A94 A101 4 A123 39 A143 A152 1 A172 1 A191 A201 1
28 | A13 12 A31 A43 409 A64 A73 3 A92 A101 3 A121 42 A143 A151 2 A173 1 A191 A201 1
29 | A12 7 A32 A43 2415 A61 A73 3 A93 A103 2 A121 34 A143 A152 1 A173 1 A191 A201 1
30 | A11 60 A33 A49 6836 A61 A75 3 A93 A101 4 A124 63 A143 A152 2 A173 1 A192 A201 2
31 | A12 18 A32 A49 1913 A64 A72 3 A94 A101 3 A121 36 A141 A152 1 A173 1 A192 A201 1
32 | A11 24 A32 A42 4020 A61 A73 2 A93 A101 2 A123 27 A142 A152 1 A173 1 A191 A201 1
33 | A12 18 A32 A40 5866 A62 A73 2 A93 A101 2 A123 30 A143 A152 2 A173 1 A192 A201 1
34 | A14 12 A34 A49 1264 A65 A75 4 A93 A101 4 A124 57 A143 A151 1 A172 1 A191 A201 1
35 | A13 12 A32 A42 1474 A61 A72 4 A92 A101 1 A122 33 A141 A152 1 A174 1 A192 A201 1
36 | A12 45 A34 A43 4746 A61 A72 4 A93 A101 2 A122 25 A143 A152 2 A172 1 A191 A201 2
37 | A14 48 A34 A46 6110 A61 A73 1 A93 A101 3 A124 31 A141 A153 1 A173 1 A192 A201 1
38 | A13 18 A32 A43 2100 A61 A73 4 A93 A102 2 A121 37 A142 A152 1 A173 1 A191 A201 2
39 | A13 10 A32 A44 1225 A61 A73 2 A93 A101 2 A123 37 A143 A152 1 A173 1 A192 A201 1
40 | A12 9 A32 A43 458 A61 A73 4 A93 A101 3 A121 24 A143 A152 1 A173 1 A191 A201 1
41 | A14 30 A32 A43 2333 A63 A75 4 A93 A101 2 A123 30 A141 A152 1 A174 1 A191 A201 1
42 | A12 12 A32 A43 1158 A63 A73 3 A91 A101 1 A123 26 A143 A152 1 A173 1 A192 A201 1
43 | A12 18 A33 A45 6204 A61 A73 2 A93 A101 4 A121 44 A143 A152 1 A172 2 A192 A201 1
44 | A11 30 A34 A41 6187 A62 A74 1 A94 A101 4 A123 24 A143 A151 2 A173 1 A191 A201 1
45 | A11 48 A34 A41 6143 A61 A75 4 A92 A101 4 A124 58 A142 A153 2 A172 1 A191 A201 2
46 | A14 11 A34 A40 1393 A61 A72 4 A92 A101 4 A123 35 A143 A152 2 A174 1 A191 A201 1
47 | A14 36 A32 A43 2299 A63 A75 4 A93 A101 4 A123 39 A143 A152 1 A173 1 A191 A201 1
48 | A11 6 A32 A41 1352 A63 A71 1 A92 A101 2 A122 23 A143 A151 1 A171 1 A192 A201 1
49 | A14 11 A34 A40 7228 A61 A73 1 A93 A101 4 A122 39 A143 A152 2 A172 1 A191 A201 1
50 | A14 12 A32 A43 2073 A62 A73 4 A92 A102 2 A121 28 A143 A152 1 A173 1 A191 A201 1
51 | A12 24 A33 A42 2333 A65 A72 4 A93 A101 2 A122 29 A141 A152 1 A172 1 A191 A201 1
52 | A12 27 A33 A41 5965 A61 A75 1 A93 A101 2 A123 30 A143 A152 2 A174 1 A192 A201 1
53 | A14 12 A32 A43 1262 A61 A73 3 A93 A101 2 A123 25 A143 A152 1 A173 1 A191 A201 1
54 | A14 18 A32 A41 3378 A65 A73 2 A93 A101 1 A122 31 A143 A152 1 A173 1 A192 A201 1
55 | A12 36 A33 A40 2225 A61 A75 4 A93 A101 4 A124 57 A141 A153 2 A173 1 A192 A201 2
56 | A14 6 A31 A40 783 A65 A73 1 A93 A103 2 A121 26 A142 A152 1 A172 2 A191 A201 1
57 | A12 12 A32 A43 6468 A65 A71 2 A93 A101 1 A124 52 A143 A152 1 A174 1 A192 A201 2
58 | A14 36 A34 A43 9566 A61 A73 2 A92 A101 2 A123 31 A142 A152 2 A173 1 A191 A201 1
59 | A13 18 A32 A40 1961 A61 A75 3 A92 A101 2 A123 23 A143 A152 1 A174 1 A191 A201 1
60 | A11 36 A34 A42 6229 A61 A72 4 A92 A102 4 A124 23 A143 A151 2 A172 1 A192 A201 2
61 | A12 9 A32 A49 1391 A61 A73 2 A94 A101 1 A121 27 A141 A152 1 A173 1 A192 A201 1
62 | A12 15 A34 A43 1537 A65 A75 4 A93 A103 4 A121 50 A143 A152 2 A173 1 A192 A201 1
63 | A12 36 A30 A49 1953 A61 A75 4 A93 A101 4 A124 61 A143 A153 1 A174 1 A192 A201 2
64 | A12 48 A30 A49 14421 A61 A73 2 A93 A101 2 A123 25 A143 A152 1 A173 1 A192 A201 2
65 | A14 24 A32 A43 3181 A61 A72 4 A92 A101 4 A122 26 A143 A152 1 A173 1 A192 A201 1
66 | A14 27 A32 A45 5190 A65 A75 4 A93 A101 4 A122 48 A143 A152 4 A173 2 A192 A201 1
67 | A14 12 A32 A43 2171 A61 A72 2 A92 A101 2 A123 29 A141 A152 1 A173 1 A191 A201 1
68 | A12 12 A32 A40 1007 A64 A73 4 A94 A101 1 A121 22 A143 A152 1 A173 1 A191 A201 1
69 | A14 36 A32 A46 1819 A61 A73 4 A93 A101 4 A124 37 A142 A153 1 A173 1 A192 A201 2
70 | A14 36 A32 A43 2394 A65 A73 4 A92 A101 4 A123 25 A143 A152 1 A173 1 A191 A201 1
71 | A14 36 A32 A41 8133 A61 A73 1 A92 A101 2 A122 30 A141 A152 1 A173 1 A191 A201 1
72 | A14 7 A34 A43 730 A65 A75 4 A93 A101 2 A122 46 A143 A151 2 A172 1 A192 A201 1
73 | A11 8 A34 A410 1164 A61 A75 3 A93 A101 4 A124 51 A141 A153 2 A174 2 A192 A201 1
74 | A12 42 A34 A49 5954 A61 A74 2 A92 A101 1 A121 41 A141 A152 2 A172 1 A191 A201 1
75 | A11 36 A32 A46 1977 A65 A75 4 A93 A101 4 A124 40 A143 A152 1 A174 1 A192 A201 2
76 | A11 12 A34 A41 1526 A61 A75 4 A93 A101 4 A124 66 A143 A153 2 A174 1 A191 A201 1
77 | A11 42 A32 A43 3965 A61 A72 4 A93 A101 3 A123 34 A143 A152 1 A173 1 A191 A201 2
78 | A12 11 A33 A43 4771 A61 A74 2 A93 A101 4 A122 51 A143 A152 1 A173 1 A191 A201 1
79 | A14 54 A30 A41 9436 A65 A73 2 A93 A101 2 A122 39 A143 A152 1 A172 2 A191 A201 1
80 | A12 30 A32 A42 3832 A61 A72 2 A94 A101 1 A122 22 A143 A152 1 A173 1 A191 A201 1
81 | A14 24 A32 A43 5943 A65 A72 1 A92 A101 1 A123 44 A143 A152 2 A173 1 A192 A201 2
82 | A14 15 A32 A43 1213 A63 A75 4 A93 A101 3 A122 47 A142 A152 1 A173 1 A192 A201 1
83 | A14 18 A32 A49 1568 A62 A73 3 A92 A101 4 A122 24 A143 A151 1 A172 1 A191 A201 1
84 | A11 24 A32 A410 1755 A61 A75 4 A92 A103 4 A121 58 A143 A152 1 A172 1 A192 A201 1
85 | A11 10 A32 A43 2315 A61 A75 3 A93 A101 4 A121 52 A143 A152 1 A172 1 A191 A201 1
86 | A14 12 A34 A49 1412 A61 A73 4 A92 A103 2 A121 29 A143 A152 2 A174 1 A192 A201 1
87 | A12 18 A34 A42 1295 A61 A72 4 A92 A101 1 A122 27 A143 A152 2 A173 1 A191 A201 1
88 | A12 36 A32 A46 12612 A62 A73 1 A93 A101 4 A124 47 A143 A153 1 A173 2 A192 A201 2
89 | A11 18 A32 A40 2249 A62 A74 4 A93 A101 3 A123 30 A143 A152 1 A174 2 A192 A201 1
90 | A11 12 A30 A45 1108 A61 A74 4 A93 A101 3 A121 28 A143 A152 2 A173 1 A191 A201 2
91 | A14 12 A34 A43 618 A61 A75 4 A93 A101 4 A121 56 A143 A152 1 A173 1 A191 A201 1
92 | A11 12 A34 A41 1409 A61 A75 4 A93 A101 3 A121 54 A143 A152 1 A173 1 A191 A201 1
93 | A14 12 A34 A43 797 A65 A75 4 A92 A101 3 A122 33 A141 A152 1 A172 2 A191 A201 2
94 | A13 24 A34 A42 3617 A65 A75 4 A93 A102 4 A124 20 A143 A151 2 A173 1 A191 A201 1
95 | A12 12 A32 A40 1318 A64 A75 4 A93 A101 4 A121 54 A143 A152 1 A173 1 A192 A201 1
96 | A12 54 A30 A49 15945 A61 A72 3 A93 A101 4 A124 58 A143 A151 1 A173 1 A192 A201 2
97 | A14 12 A34 A46 2012 A65 A74 4 A92 A101 2 A123 61 A143 A152 1 A173 1 A191 A201 1
98 | A12 18 A32 A49 2622 A62 A73 4 A93 A101 4 A123 34 A143 A152 1 A173 1 A191 A201 1
99 | A12 36 A34 A43 2337 A61 A75 4 A93 A101 4 A121 36 A143 A152 1 A173 1 A191 A201 1
100 | A12 20 A33 A41 7057 A65 A74 3 A93 A101 4 A122 36 A141 A151 2 A174 2 A192 A201 1
101 | A14 24 A32 A40 1469 A62 A75 4 A94 A101 4 A121 41 A143 A151 1 A172 1 A191 A201 1
102 | A12 36 A32 A43 2323 A61 A74 4 A93 A101 4 A123 24 A143 A151 1 A173 1 A191 A201 1
103 | A14 6 A33 A43 932 A61 A73 3 A92 A101 2 A121 24 A143 A152 1 A173 1 A191 A201 1
104 | A12 9 A34 A42 1919 A61 A74 4 A93 A101 3 A123 35 A143 A151 1 A173 1 A192 A201 1
105 | A14 12 A32 A41 2445 A65 A72 2 A94 A101 4 A123 26 A143 A151 1 A173 1 A192 A201 1
106 | A12 24 A34 A410 11938 A61 A73 2 A93 A102 3 A123 39 A143 A152 2 A174 2 A192 A201 2
107 | A14 18 A31 A40 6458 A61 A75 2 A93 A101 4 A124 39 A141 A152 2 A174 2 A192 A201 2
108 | A12 12 A32 A40 6078 A61 A74 2 A93 A101 2 A123 32 A143 A152 1 A173 1 A191 A201 1
109 | A11 24 A32 A42 7721 A65 A72 1 A92 A101 2 A122 30 A143 A152 1 A173 1 A192 A202 1
110 | A12 14 A32 A49 1410 A63 A75 1 A94 A101 2 A121 35 A143 A152 1 A173 1 A192 A201 1
111 | A12 6 A33 A49 1449 A62 A75 1 A91 A101 2 A123 31 A141 A152 2 A173 2 A191 A201 1
112 | A13 15 A32 A46 392 A61 A72 4 A92 A101 4 A122 23 A143 A151 1 A173 1 A192 A201 1
113 | A12 18 A32 A40 6260 A61 A74 3 A93 A101 3 A121 28 A143 A151 1 A172 1 A191 A201 1
114 | A14 36 A34 A40 7855 A61 A73 4 A92 A101 2 A121 25 A142 A152 2 A173 1 A192 A201 2
115 | A11 12 A32 A43 1680 A63 A75 3 A94 A101 1 A121 35 A143 A152 1 A173 1 A191 A201 1
116 | A14 48 A34 A43 3578 A65 A75 4 A93 A101 1 A121 47 A143 A152 1 A173 1 A192 A201 1
117 | A11 42 A32 A43 7174 A65 A74 4 A92 A101 3 A123 30 A143 A152 1 A174 1 A192 A201 2
118 | A11 10 A34 A42 2132 A65 A72 2 A92 A102 3 A121 27 A143 A151 2 A173 1 A191 A202 1
119 | A11 33 A34 A42 4281 A63 A73 1 A92 A101 4 A123 23 A143 A152 2 A173 1 A191 A201 2
120 | A12 12 A34 A40 2366 A63 A74 3 A91 A101 3 A123 36 A143 A152 1 A174 1 A192 A201 1
121 | A11 21 A32 A43 1835 A61 A73 3 A92 A101 2 A121 25 A143 A152 2 A173 1 A192 A201 2
122 | A14 24 A34 A41 3868 A61 A75 4 A92 A101 2 A123 41 A143 A151 2 A174 1 A192 A201 1
123 | A14 12 A32 A42 1768 A61 A73 3 A93 A101 2 A121 24 A143 A151 1 A172 1 A191 A201 1
124 | A13 10 A34 A40 781 A61 A75 4 A93 A101 4 A124 63 A143 A153 2 A173 1 A192 A201 1
125 | A12 18 A32 A42 1924 A65 A72 4 A92 A101 3 A121 27 A143 A151 1 A173 1 A191 A201 2
126 | A11 12 A34 A40 2121 A61 A73 4 A93 A101 2 A122 30 A143 A152 2 A173 1 A191 A201 1
127 | A11 12 A32 A43 701 A61 A73 4 A94 A101 2 A121 40 A143 A152 1 A172 1 A191 A201 1
128 | A12 12 A32 A45 639 A61 A73 4 A93 A101 2 A123 30 A143 A152 1 A173 1 A191 A201 2
129 | A12 12 A34 A41 1860 A61 A71 4 A93 A101 2 A123 34 A143 A152 2 A174 1 A192 A201 1
130 | A11 12 A34 A40 3499 A61 A73 3 A92 A102 2 A121 29 A143 A152 2 A173 1 A191 A201 2
131 | A12 48 A32 A40 8487 A65 A74 1 A92 A101 2 A123 24 A143 A152 1 A173 1 A191 A201 1
132 | A11 36 A33 A46 6887 A61 A73 4 A93 A101 3 A122 29 A142 A152 1 A173 1 A192 A201 2
133 | A14 15 A32 A42 2708 A61 A72 2 A93 A101 3 A122 27 A141 A152 2 A172 1 A191 A201 1
134 | A14 18 A32 A42 1984 A61 A73 4 A93 A101 4 A124 47 A141 A153 2 A173 1 A191 A201 1
135 | A14 60 A32 A43 10144 A62 A74 2 A92 A101 4 A121 21 A143 A152 1 A173 1 A192 A201 1
136 | A14 12 A34 A43 1240 A65 A75 4 A92 A101 2 A121 38 A143 A152 2 A173 1 A192 A201 1
137 | A14 27 A33 A41 8613 A64 A73 2 A93 A101 2 A123 27 A143 A152 2 A173 1 A191 A201 1
138 | A12 12 A32 A43 766 A63 A73 4 A93 A101 3 A121 66 A143 A152 1 A172 1 A191 A201 2
139 | A12 15 A34 A43 2728 A65 A74 4 A93 A103 2 A121 35 A141 A152 3 A173 1 A192 A201 1
140 | A13 12 A32 A43 1881 A61 A73 2 A92 A101 2 A123 44 A143 A151 1 A172 1 A192 A201 1
141 | A13 6 A32 A40 709 A64 A72 2 A94 A101 2 A121 27 A143 A152 1 A171 1 A191 A202 1
142 | A12 36 A32 A43 4795 A61 A72 4 A92 A101 1 A124 30 A143 A152 1 A174 1 A192 A201 1
143 | A11 27 A32 A43 3416 A61 A73 3 A93 A101 2 A123 27 A143 A152 1 A174 1 A191 A201 1
144 | A11 18 A32 A42 2462 A61 A73 2 A93 A101 2 A123 22 A143 A152 1 A173 1 A191 A201 2
145 | A14 21 A34 A42 2288 A61 A72 4 A92 A101 4 A122 23 A143 A152 1 A173 1 A192 A201 1
146 | A12 48 A31 A49 3566 A62 A74 4 A93 A101 2 A123 30 A143 A152 1 A173 1 A191 A201 1
147 | A11 6 A34 A40 860 A61 A75 1 A92 A101 4 A124 39 A143 A152 2 A173 1 A192 A201 1
148 | A14 12 A34 A40 682 A62 A74 4 A92 A101 3 A123 51 A143 A152 2 A173 1 A192 A201 1
149 | A11 36 A34 A42 5371 A61 A73 3 A93 A103 2 A122 28 A143 A152 2 A173 1 A191 A201 1
150 | A14 18 A34 A43 1582 A64 A75 4 A93 A101 4 A123 46 A143 A152 2 A173 1 A191 A201 1
151 | A14 6 A32 A43 1346 A62 A75 2 A93 A101 4 A124 42 A141 A153 1 A173 2 A192 A201 1
152 | A14 10 A32 A43 1924 A61 A73 1 A93 A101 4 A122 38 A143 A152 1 A173 1 A192 A202 1
153 | A13 36 A32 A43 5848 A61 A73 4 A93 A101 1 A123 24 A143 A152 1 A173 1 A191 A201 1
154 | A12 24 A34 A41 7758 A64 A75 2 A92 A101 4 A124 29 A143 A151 1 A173 1 A191 A201 1
155 | A12 24 A33 A49 6967 A62 A74 4 A93 A101 4 A123 36 A143 A151 1 A174 1 A192 A201 1
156 | A11 12 A32 A42 1282 A61 A73 2 A92 A101 4 A123 20 A143 A151 1 A173 1 A191 A201 2
157 | A11 9 A34 A45 1288 A62 A75 3 A93 A103 4 A121 48 A143 A152 2 A173 2 A191 A202 1
158 | A11 12 A31 A48 339 A61 A75 4 A94 A101 1 A123 45 A141 A152 1 A172 1 A191 A201 1
159 | A12 24 A32 A40 3512 A62 A74 2 A93 A101 3 A123 38 A141 A152 2 A173 1 A192 A201 1
160 | A14 6 A34 A43 1898 A65 A73 1 A93 A101 2 A121 34 A143 A152 2 A172 2 A191 A201 1
161 | A14 24 A34 A43 2872 A62 A75 3 A93 A101 4 A121 36 A143 A152 1 A173 2 A192 A201 1
162 | A14 18 A34 A40 1055 A61 A72 4 A92 A101 1 A122 30 A143 A152 2 A173 1 A191 A201 1
163 | A14 15 A32 A44 1262 A63 A74 4 A93 A101 3 A122 36 A143 A152 2 A173 1 A192 A201 1
164 | A12 10 A32 A40 7308 A61 A71 2 A93 A101 4 A124 70 A141 A153 1 A174 1 A192 A201 1
165 | A14 36 A32 A40 909 A63 A75 4 A93 A101 4 A122 36 A143 A152 1 A173 1 A191 A201 1
166 | A14 6 A32 A42 2978 A63 A73 1 A93 A101 2 A123 32 A143 A152 1 A173 1 A192 A201 1
167 | A11 18 A32 A42 1131 A61 A71 4 A92 A101 2 A123 33 A143 A152 1 A173 1 A191 A201 2
168 | A12 11 A32 A42 1577 A64 A72 4 A92 A101 1 A121 20 A143 A152 1 A173 1 A191 A201 1
169 | A14 24 A32 A42 3972 A61 A74 2 A92 A101 4 A122 25 A143 A151 1 A173 1 A192 A201 1
170 | A12 24 A34 A49 1935 A61 A75 4 A91 A101 4 A121 31 A143 A152 2 A173 1 A192 A201 2
171 | A11 15 A30 A40 950 A61 A75 4 A93 A101 3 A123 33 A143 A151 2 A173 2 A191 A201 2
172 | A14 12 A32 A42 763 A61 A73 4 A92 A101 1 A121 26 A143 A152 1 A173 1 A192 A201 1
173 | A12 24 A33 A42 2064 A61 A71 3 A92 A101 2 A122 34 A143 A152 1 A174 1 A192 A201 2
174 | A12 8 A32 A43 1414 A61 A73 4 A93 A103 2 A121 33 A143 A152 1 A173 1 A191 A202 1
175 | A11 21 A33 A46 3414 A61 A72 2 A93 A101 1 A122 26 A143 A152 2 A173 1 A191 A201 2
176 | A14 30 A31 A41 7485 A65 A71 4 A92 A101 1 A121 53 A141 A152 1 A174 1 A192 A201 2
177 | A11 12 A32 A42 2577 A61 A73 2 A91 A101 1 A123 42 A143 A152 1 A173 1 A191 A201 1
178 | A11 6 A34 A43 338 A63 A75 4 A93 A101 4 A123 52 A143 A152 2 A173 1 A191 A201 1
179 | A14 12 A32 A43 1963 A61 A74 4 A93 A101 2 A123 31 A143 A151 2 A174 2 A192 A201 1
180 | A11 21 A34 A40 571 A61 A75 4 A93 A101 4 A121 65 A143 A152 2 A173 1 A191 A201 1
181 | A14 36 A33 A49 9572 A61 A72 1 A91 A101 1 A123 28 A143 A152 2 A173 1 A191 A201 2
182 | A12 36 A33 A49 4455 A61 A73 2 A91 A101 2 A121 30 A142 A152 2 A174 1 A192 A201 2
183 | A11 21 A31 A40 1647 A65 A73 4 A93 A101 2 A122 40 A143 A152 2 A172 2 A191 A201 2
184 | A14 24 A34 A42 3777 A64 A73 4 A93 A101 4 A121 50 A143 A152 1 A173 1 A192 A201 1
185 | A12 18 A34 A40 884 A61 A75 4 A93 A101 4 A123 36 A141 A152 1 A173 2 A192 A201 2
186 | A14 15 A34 A43 1360 A61 A73 4 A93 A101 2 A122 31 A143 A152 2 A173 1 A191 A201 1
187 | A12 9 A31 A41 5129 A61 A75 2 A92 A101 4 A124 74 A141 A153 1 A174 2 A192 A201 2
188 | A12 16 A34 A40 1175 A61 A71 2 A93 A101 3 A123 68 A143 A153 3 A171 1 A192 A201 1
189 | A11 12 A32 A43 674 A62 A74 4 A94 A101 1 A122 20 A143 A152 1 A173 1 A191 A201 2
190 | A12 18 A30 A42 3244 A61 A73 1 A92 A101 4 A123 33 A141 A152 2 A173 1 A192 A201 1
191 | A14 24 A32 A49 4591 A64 A73 2 A93 A101 3 A122 54 A143 A152 3 A174 1 A192 A201 2
192 | A12 48 A30 A49 3844 A62 A74 4 A93 A101 4 A124 34 A143 A153 1 A172 2 A191 A201 2
193 | A12 27 A32 A49 3915 A61 A73 4 A93 A101 2 A123 36 A143 A152 1 A173 2 A192 A201 2
194 | A14 6 A32 A43 2108 A61 A74 2 A94 A101 2 A121 29 A143 A151 1 A173 1 A191 A201 1
195 | A12 45 A32 A43 3031 A62 A73 4 A93 A103 4 A122 21 A143 A151 1 A173 1 A191 A201 2
196 | A12 9 A34 A46 1501 A61 A75 2 A92 A101 3 A123 34 A143 A152 2 A174 1 A192 A201 2
197 | A14 6 A34 A43 1382 A61 A73 1 A92 A101 1 A123 28 A143 A152 2 A173 1 A192 A201 1
198 | A12 12 A32 A42 951 A62 A72 4 A92 A101 4 A123 27 A141 A151 4 A173 1 A191 A201 2
199 | A12 24 A32 A41 2760 A65 A75 4 A93 A101 4 A124 36 A141 A153 1 A173 1 A192 A201 1
200 | A12 18 A33 A42 4297 A61 A75 4 A91 A101 3 A124 40 A143 A152 1 A174 1 A192 A201 2
201 | A14 9 A34 A46 936 A63 A75 4 A93 A101 2 A123 52 A143 A152 2 A173 1 A192 A201 1
202 | A11 12 A32 A40 1168 A61 A73 4 A94 A101 3 A121 27 A143 A152 1 A172 1 A191 A201 1
203 | A14 27 A33 A49 5117 A61 A74 3 A93 A101 4 A123 26 A143 A152 2 A173 1 A191 A201 1
204 | A11 12 A32 A48 902 A61 A74 4 A94 A101 4 A122 21 A143 A151 1 A173 1 A191 A201 2
205 | A14 12 A34 A40 1495 A61 A75 4 A93 A101 1 A121 38 A143 A152 2 A172 2 A191 A201 1
206 | A11 30 A34 A41 10623 A61 A75 3 A93 A101 4 A124 38 A143 A153 3 A174 2 A192 A201 1
207 | A14 12 A34 A42 1935 A61 A75 4 A93 A101 4 A121 43 A143 A152 3 A173 1 A192 A201 1
208 | A12 12 A34 A44 1424 A61 A74 4 A93 A101 3 A122 26 A143 A152 1 A173 1 A191 A201 1
209 | A11 24 A32 A49 6568 A61 A73 2 A94 A101 2 A123 21 A142 A152 1 A172 1 A191 A201 1
210 | A14 12 A32 A41 1413 A64 A74 3 A93 A101 2 A122 55 A143 A152 1 A173 1 A191 A202 1
211 | A14 9 A34 A43 3074 A65 A73 1 A93 A101 2 A121 33 A143 A152 2 A173 2 A191 A201 1
212 | A14 36 A32 A43 3835 A65 A75 2 A92 A101 4 A121 45 A143 A152 1 A172 1 A192 A201 1
213 | A11 27 A30 A49 5293 A61 A71 2 A93 A101 4 A122 50 A142 A152 2 A173 1 A192 A201 2
214 | A13 30 A33 A49 1908 A61 A75 4 A93 A101 4 A121 66 A143 A152 1 A174 1 A192 A201 2
215 | A14 36 A34 A43 3342 A65 A75 4 A93 A101 2 A123 51 A143 A152 1 A173 1 A192 A201 1
216 | A12 6 A34 A48 932 A65 A74 1 A92 A101 3 A122 39 A143 A152 2 A172 1 A191 A201 1
217 | A11 18 A30 A49 3104 A61 A74 3 A93 A101 1 A122 31 A141 A152 1 A173 1 A192 A201 1
218 | A13 36 A32 A43 3913 A61 A73 2 A93 A101 2 A121 23 A143 A152 1 A173 1 A192 A201 1
219 | A11 24 A32 A42 3021 A61 A73 2 A91 A101 2 A121 24 A143 A151 1 A172 1 A191 A201 1
220 | A14 10 A32 A40 1364 A61 A73 2 A92 A101 4 A123 64 A143 A152 1 A173 1 A192 A201 1
221 | A12 12 A32 A43 625 A61 A72 4 A94 A103 1 A121 26 A141 A152 1 A172 1 A191 A201 1
222 | A11 12 A32 A46 1200 A65 A73 4 A92 A101 4 A122 23 A141 A151 1 A173 1 A192 A201 1
223 | A14 12 A32 A43 707 A61 A73 4 A93 A101 2 A121 30 A141 A152 2 A173 1 A191 A201 1
224 | A14 24 A33 A49 2978 A65 A73 4 A93 A101 4 A121 32 A143 A152 2 A173 2 A192 A201 1
225 | A14 15 A32 A41 4657 A61 A73 3 A93 A101 2 A123 30 A143 A152 1 A173 1 A192 A201 1
226 | A14 36 A30 A45 2613 A61 A73 4 A93 A101 2 A123 27 A143 A152 2 A173 1 A191 A201 1
227 | A12 48 A32 A43 10961 A64 A74 1 A93 A102 2 A124 27 A141 A152 2 A173 1 A192 A201 2
228 | A11 12 A32 A42 7865 A61 A75 4 A93 A101 4 A124 53 A143 A153 1 A174 1 A192 A201 2
229 | A14 9 A32 A43 1478 A61 A74 4 A93 A101 2 A123 22 A143 A152 1 A173 1 A191 A201 2
230 | A11 24 A32 A42 3149 A61 A72 4 A93 A101 1 A124 22 A141 A153 1 A173 1 A191 A201 1
231 | A13 36 A32 A43 4210 A61 A73 4 A93 A101 2 A123 26 A143 A152 1 A173 1 A191 A201 2
232 | A14 9 A32 A40 2507 A63 A75 2 A93 A101 4 A124 51 A143 A153 1 A172 1 A191 A201 1
233 | A14 12 A32 A43 2141 A62 A74 3 A93 A101 1 A124 35 A143 A152 1 A173 1 A191 A201 1
234 | A12 18 A32 A43 866 A61 A73 4 A94 A103 2 A121 25 A143 A152 1 A172 1 A191 A201 1
235 | A14 4 A34 A43 1544 A61 A74 2 A93 A101 1 A121 42 A143 A152 3 A172 2 A191 A201 1
236 | A11 24 A32 A43 1823 A61 A71 4 A93 A101 2 A123 30 A142 A152 1 A174 2 A191 A201 2
237 | A12 6 A32 A40 14555 A65 A71 1 A93 A101 2 A122 23 A143 A152 1 A171 1 A192 A201 2
238 | A12 21 A32 A49 2767 A62 A75 4 A91 A101 2 A123 61 A141 A151 2 A172 1 A191 A201 2
239 | A14 12 A34 A43 1291 A61 A73 4 A92 A101 2 A122 35 A143 A152 2 A173 1 A191 A201 1
240 | A11 30 A32 A43 2522 A61 A75 1 A93 A103 3 A122 39 A143 A152 1 A173 2 A191 A201 1
241 | A11 24 A32 A40 915 A65 A75 4 A92 A101 2 A123 29 A141 A152 1 A173 1 A191 A201 2
242 | A14 6 A32 A43 1595 A61 A74 3 A93 A101 2 A122 51 A143 A152 1 A173 2 A191 A201 1
243 | A11 48 A30 A41 4605 A61 A75 3 A93 A101 4 A124 24 A143 A153 2 A173 2 A191 A201 2
244 | A14 12 A34 A49 1185 A61 A73 3 A92 A101 2 A121 27 A143 A152 2 A173 1 A191 A201 1
245 | A14 12 A31 A48 3447 A63 A73 4 A92 A101 3 A121 35 A143 A152 1 A172 2 A191 A201 1
246 | A14 24 A32 A49 1258 A61 A74 4 A93 A101 1 A121 25 A143 A152 1 A173 1 A192 A201 1
247 | A14 12 A34 A43 717 A61 A75 4 A93 A101 4 A121 52 A143 A152 3 A173 1 A191 A201 1
248 | A14 6 A30 A40 1204 A62 A73 4 A93 A101 1 A124 35 A141 A151 1 A173 1 A191 A202 1
249 | A13 24 A32 A42 1925 A61 A73 2 A93 A101 2 A121 26 A143 A152 1 A173 1 A191 A201 1
250 | A14 18 A32 A43 433 A61 A71 3 A92 A102 4 A121 22 A143 A151 1 A173 1 A191 A201 2
251 | A11 6 A34 A40 666 A64 A74 3 A92 A101 4 A121 39 A143 A152 2 A172 1 A192 A201 1
252 | A13 12 A32 A42 2251 A61 A73 1 A92 A101 2 A123 46 A143 A152 1 A172 1 A191 A201 1
253 | A12 30 A32 A40 2150 A61 A73 4 A92 A103 2 A124 24 A141 A152 1 A173 1 A191 A201 2
254 | A14 24 A33 A42 4151 A62 A73 2 A93 A101 3 A122 35 A143 A152 2 A173 1 A191 A201 1
255 | A12 9 A32 A42 2030 A65 A74 2 A93 A101 1 A123 24 A143 A152 1 A173 1 A192 A201 1
256 | A12 60 A33 A43 7418 A65 A73 1 A93 A101 1 A121 27 A143 A152 1 A172 1 A191 A201 1
257 | A14 24 A34 A43 2684 A61 A73 4 A93 A101 2 A121 35 A143 A152 2 A172 1 A191 A201 1
258 | A11 12 A31 A43 2149 A61 A73 4 A91 A101 1 A124 29 A143 A153 1 A173 1 A191 A201 2
259 | A14 15 A32 A41 3812 A62 A72 1 A92 A101 4 A123 23 A143 A152 1 A173 1 A192 A201 1
260 | A14 11 A34 A43 1154 A62 A71 4 A92 A101 4 A121 57 A143 A152 3 A172 1 A191 A201 1
261 | A11 12 A32 A42 1657 A61 A73 2 A93 A101 2 A121 27 A143 A152 1 A173 1 A191 A201 1
262 | A11 24 A32 A43 1603 A61 A75 4 A92 A101 4 A123 55 A143 A152 1 A173 1 A191 A201 1
263 | A11 18 A34 A40 5302 A61 A75 2 A93 A101 4 A124 36 A143 A153 3 A174 1 A192 A201 1
264 | A14 12 A34 A46 2748 A61 A75 2 A92 A101 4 A124 57 A141 A153 3 A172 1 A191 A201 1
265 | A14 10 A34 A40 1231 A61 A75 3 A93 A101 4 A121 32 A143 A152 2 A172 2 A191 A202 1
266 | A12 15 A32 A43 802 A61 A75 4 A93 A101 3 A123 37 A143 A152 1 A173 2 A191 A201 2
267 | A14 36 A34 A49 6304 A65 A75 4 A93 A101 4 A121 36 A143 A152 2 A173 1 A191 A201 1
268 | A14 24 A32 A43 1533 A61 A72 4 A92 A101 3 A123 38 A142 A152 1 A173 1 A192 A201 1
269 | A11 14 A32 A40 8978 A61 A75 1 A91 A101 4 A122 45 A143 A152 1 A174 1 A192 A202 2
270 | A14 24 A32 A43 999 A65 A75 4 A93 A101 2 A123 25 A143 A152 2 A173 1 A191 A201 1
271 | A14 18 A32 A40 2662 A65 A74 4 A93 A101 3 A122 32 A143 A152 1 A173 1 A191 A202 1
272 | A14 12 A34 A42 1402 A63 A74 3 A92 A101 4 A123 37 A143 A151 1 A173 1 A192 A201 1
273 | A12 48 A31 A40 12169 A65 A71 4 A93 A102 4 A124 36 A143 A153 1 A174 1 A192 A201 1
274 | A12 48 A32 A43 3060 A61 A74 4 A93 A101 4 A121 28 A143 A152 2 A173 1 A191 A201 2
275 | A11 30 A32 A45 11998 A61 A72 1 A91 A101 1 A124 34 A143 A152 1 A172 1 A192 A201 2
276 | A14 9 A32 A43 2697 A61 A73 1 A93 A101 2 A121 32 A143 A152 1 A173 2 A191 A201 1
277 | A14 18 A34 A43 2404 A61 A73 2 A92 A101 2 A123 26 A143 A152 2 A173 1 A191 A201 1
278 | A11 12 A32 A42 1262 A65 A75 2 A91 A101 4 A122 49 A143 A152 1 A172 1 A192 A201 1
279 | A14 6 A32 A42 4611 A61 A72 1 A92 A101 4 A122 32 A143 A152 1 A173 1 A191 A201 2
280 | A14 24 A32 A43 1901 A62 A73 4 A93 A101 4 A123 29 A143 A151 1 A174 1 A192 A201 1
281 | A14 15 A34 A41 3368 A64 A75 3 A93 A101 4 A124 23 A143 A151 2 A173 1 A192 A201 1
282 | A14 12 A32 A42 1574 A61 A73 4 A93 A101 2 A121 50 A143 A152 1 A173 1 A191 A201 1
283 | A13 18 A31 A43 1445 A65 A74 4 A93 A101 4 A123 49 A141 A152 1 A172 1 A191 A201 1
284 | A14 15 A34 A42 1520 A65 A75 4 A93 A101 4 A122 63 A143 A152 1 A173 1 A191 A201 1
285 | A12 24 A34 A40 3878 A62 A72 4 A91 A101 2 A123 37 A143 A152 1 A173 1 A192 A201 1
286 | A11 47 A32 A40 10722 A61 A72 1 A92 A101 1 A121 35 A143 A152 1 A172 1 A192 A201 1
287 | A11 48 A32 A41 4788 A61 A74 4 A93 A101 3 A122 26 A143 A152 1 A173 2 A191 A201 1
288 | A12 48 A33 A410 7582 A62 A71 2 A93 A101 4 A124 31 A143 A153 1 A174 1 A192 A201 1
289 | A12 12 A32 A43 1092 A61 A73 4 A92 A103 4 A121 49 A143 A152 2 A173 1 A192 A201 1
290 | A11 24 A33 A43 1024 A61 A72 4 A94 A101 4 A121 48 A142 A152 1 A173 1 A191 A201 2
291 | A14 12 A32 A49 1076 A61 A73 2 A94 A101 2 A121 26 A143 A152 1 A173 1 A192 A202 1
292 | A12 36 A32 A41 9398 A61 A72 1 A94 A101 4 A123 28 A143 A151 1 A174 1 A192 A201 2
293 | A11 24 A34 A41 6419 A61 A75 2 A92 A101 4 A124 44 A143 A153 2 A174 2 A192 A201 1
294 | A13 42 A34 A41 4796 A61 A75 4 A93 A101 4 A124 56 A143 A153 1 A173 1 A191 A201 1
295 | A14 48 A34 A49 7629 A65 A75 4 A91 A101 2 A123 46 A141 A152 2 A174 2 A191 A201 1
296 | A12 48 A32 A42 9960 A61 A72 1 A92 A101 2 A123 26 A143 A152 1 A173 1 A192 A201 2
297 | A14 12 A32 A41 4675 A65 A72 1 A92 A101 4 A123 20 A143 A151 1 A173 1 A191 A201 1
298 | A14 10 A32 A40 1287 A65 A75 4 A93 A102 2 A122 45 A143 A152 1 A172 1 A191 A202 1
299 | A14 18 A32 A42 2515 A61 A73 3 A93 A101 4 A121 43 A143 A152 1 A173 1 A192 A201 1
300 | A12 21 A34 A42 2745 A64 A74 3 A93 A101 2 A123 32 A143 A152 2 A173 1 A192 A201 1
301 | A14 6 A32 A40 672 A61 A71 1 A92 A101 4 A121 54 A143 A152 1 A171 1 A192 A201 1
302 | A12 36 A30 A43 3804 A61 A73 4 A92 A101 1 A123 42 A143 A152 1 A173 1 A192 A201 2
303 | A13 24 A34 A40 1344 A65 A74 4 A93 A101 2 A121 37 A141 A152 2 A172 2 A191 A201 2
304 | A11 10 A34 A40 1038 A61 A74 4 A93 A102 3 A122 49 A143 A152 2 A173 1 A192 A201 1
305 | A14 48 A34 A40 10127 A63 A73 2 A93 A101 2 A124 44 A141 A153 1 A173 1 A191 A201 2
306 | A14 6 A32 A42 1543 A64 A73 4 A91 A101 2 A121 33 A143 A152 1 A173 1 A191 A201 1
307 | A14 30 A32 A41 4811 A65 A74 2 A92 A101 4 A122 24 A142 A151 1 A172 1 A191 A201 1
308 | A11 12 A32 A43 727 A62 A72 4 A94 A101 3 A124 33 A143 A152 1 A172 1 A192 A201 2
309 | A12 8 A32 A42 1237 A61 A73 3 A92 A101 4 A121 24 A143 A152 1 A173 1 A191 A201 2
310 | A12 9 A32 A40 276 A61 A73 4 A94 A101 4 A121 22 A143 A151 1 A172 1 A191 A201 1
311 | A12 48 A32 A410 5381 A65 A71 3 A93 A101 4 A124 40 A141 A153 1 A171 1 A192 A201 1
312 | A14 24 A32 A42 5511 A62 A73 4 A93 A101 1 A123 25 A142 A152 1 A173 1 A191 A201 1
313 | A13 24 A32 A42 3749 A61 A72 2 A92 A101 4 A123 26 A143 A152 1 A173 1 A191 A201 1
314 | A12 12 A32 A40 685 A61 A74 2 A94 A101 3 A123 25 A141 A152 1 A172 1 A191 A201 2
315 | A13 4 A32 A40 1494 A65 A72 1 A93 A101 2 A121 29 A143 A152 1 A172 2 A191 A202 1
316 | A11 36 A31 A42 2746 A61 A75 4 A93 A101 4 A123 31 A141 A152 1 A173 1 A191 A201 2
317 | A11 12 A32 A42 708 A61 A73 2 A93 A103 3 A122 38 A143 A152 1 A172 2 A191 A201 1
318 | A12 24 A32 A42 4351 A65 A73 1 A92 A101 4 A122 48 A143 A152 1 A172 1 A192 A201 1
319 | A14 12 A34 A46 701 A61 A73 4 A93 A101 2 A123 32 A143 A152 2 A173 1 A191 A201 1
320 | A11 15 A33 A42 3643 A61 A75 1 A92 A101 4 A122 27 A143 A152 2 A172 1 A191 A201 1
321 | A12 30 A34 A40 4249 A61 A71 4 A94 A101 2 A123 28 A143 A152 2 A174 1 A191 A201 2
322 | A11 24 A32 A43 1938 A61 A72 4 A91 A101 3 A122 32 A143 A152 1 A173 1 A191 A201 2
323 | A11 24 A32 A41 2910 A61 A74 2 A93 A101 1 A124 34 A143 A153 1 A174 1 A192 A201 1
324 | A11 18 A32 A42 2659 A64 A73 4 A93 A101 2 A123 28 A143 A152 1 A173 1 A191 A201 1
325 | A14 18 A34 A40 1028 A61 A73 4 A92 A101 3 A121 36 A143 A152 2 A173 1 A191 A201 1
326 | A11 8 A34 A40 3398 A61 A74 1 A93 A101 4 A121 39 A143 A152 2 A172 1 A191 A202 1
327 | A14 12 A34 A42 5801 A65 A75 2 A93 A101 4 A122 49 A143 A151 1 A173 1 A192 A201 1
328 | A14 24 A32 A40 1525 A64 A74 4 A92 A101 3 A123 34 A143 A152 1 A173 2 A192 A201 1
329 | A13 36 A32 A43 4473 A61 A75 4 A93 A101 2 A123 31 A143 A152 1 A173 1 A191 A201 1
330 | A12 6 A32 A43 1068 A61 A75 4 A93 A101 4 A123 28 A143 A152 1 A173 2 A191 A201 1
331 | A11 24 A34 A41 6615 A61 A71 2 A93 A101 4 A124 75 A143 A153 2 A174 1 A192 A201 1
332 | A14 18 A34 A46 1864 A62 A73 4 A92 A101 2 A121 30 A143 A152 2 A173 1 A191 A201 2
333 | A12 60 A32 A40 7408 A62 A72 4 A92 A101 2 A122 24 A143 A152 1 A174 1 A191 A201 2
334 | A14 48 A34 A41 11590 A62 A73 2 A92 A101 4 A123 24 A141 A151 2 A172 1 A191 A201 2
335 | A11 24 A30 A42 4110 A61 A75 3 A93 A101 4 A124 23 A141 A151 2 A173 2 A191 A201 2
336 | A11 6 A34 A42 3384 A61 A73 1 A91 A101 4 A121 44 A143 A151 1 A174 1 A192 A201 2
337 | A12 13 A32 A43 2101 A61 A72 2 A92 A103 4 A122 23 A143 A152 1 A172 1 A191 A201 1
338 | A11 15 A32 A44 1275 A65 A73 4 A92 A101 2 A123 24 A143 A151 1 A173 1 A191 A201 2
339 | A11 24 A32 A42 4169 A61 A73 4 A93 A101 4 A122 28 A143 A152 1 A173 1 A191 A201 1
340 | A12 10 A32 A42 1521 A61 A73 4 A91 A101 2 A123 31 A143 A152 1 A172 1 A191 A201 1
341 | A12 24 A34 A46 5743 A61 A72 2 A92 A101 4 A124 24 A143 A153 2 A173 1 A192 A201 1
342 | A11 21 A32 A42 3599 A61 A74 1 A92 A101 4 A123 26 A143 A151 1 A172 1 A191 A201 1
343 | A12 18 A32 A43 3213 A63 A72 1 A94 A101 3 A121 25 A143 A151 1 A173 1 A191 A201 1
344 | A12 18 A32 A49 4439 A61 A75 1 A93 A102 1 A121 33 A141 A152 1 A174 1 A192 A201 1
345 | A13 10 A32 A40 3949 A61 A72 1 A93 A103 1 A122 37 A143 A152 1 A172 2 A191 A201 1
346 | A14 15 A34 A43 1459 A61 A73 4 A92 A101 2 A123 43 A143 A152 1 A172 1 A191 A201 1
347 | A12 13 A34 A43 882 A61 A72 4 A93 A103 4 A121 23 A143 A152 2 A173 1 A191 A201 1
348 | A12 24 A32 A43 3758 A63 A71 1 A92 A101 4 A124 23 A143 A151 1 A171 1 A191 A201 1
349 | A14 6 A33 A49 1743 A62 A73 1 A93 A101 2 A121 34 A143 A152 2 A172 1 A191 A201 1
350 | A12 9 A34 A46 1136 A64 A75 4 A93 A101 3 A124 32 A143 A153 2 A173 2 A191 A201 2
351 | A14 9 A32 A44 1236 A61 A72 1 A92 A101 4 A121 23 A143 A151 1 A173 1 A192 A201 1
352 | A12 9 A32 A42 959 A61 A73 1 A92 A101 2 A123 29 A143 A152 1 A173 1 A191 A202 2
353 | A14 18 A34 A41 3229 A65 A71 2 A93 A101 4 A124 38 A143 A152 1 A174 1 A192 A201 1
354 | A11 12 A30 A43 6199 A61 A73 4 A93 A101 2 A122 28 A143 A151 2 A173 1 A192 A201 2
355 | A14 10 A32 A46 727 A63 A75 4 A93 A101 4 A124 46 A143 A153 1 A173 1 A192 A201 1
356 | A12 24 A32 A40 1246 A61 A72 4 A93 A101 2 A121 23 A142 A152 1 A172 1 A191 A201 2
357 | A14 12 A34 A43 2331 A65 A75 1 A93 A102 4 A121 49 A143 A152 1 A173 1 A192 A201 1
358 | A14 36 A33 A43 4463 A61 A73 4 A93 A101 2 A123 26 A143 A152 2 A174 1 A192 A201 2
359 | A14 12 A32 A43 776 A61 A73 4 A94 A101 2 A121 28 A143 A152 1 A173 1 A191 A201 1
360 | A11 30 A32 A42 2406 A61 A74 4 A92 A101 4 A121 23 A143 A151 1 A173 1 A191 A201 2
361 | A12 18 A32 A46 1239 A65 A73 4 A93 A101 4 A124 61 A143 A153 1 A173 1 A191 A201 1
362 | A13 12 A32 A43 3399 A65 A75 2 A93 A101 3 A123 37 A143 A152 1 A174 1 A191 A201 1
363 | A13 12 A33 A40 2247 A61 A73 2 A92 A101 2 A123 36 A142 A152 2 A173 1 A192 A201 1
364 | A14 6 A32 A42 1766 A61 A73 1 A94 A101 2 A122 21 A143 A151 1 A173 1 A191 A201 1
365 | A11 18 A32 A42 2473 A61 A71 4 A93 A101 1 A123 25 A143 A152 1 A171 1 A191 A201 2
366 | A14 12 A32 A49 1542 A61 A74 2 A93 A101 4 A123 36 A143 A152 1 A173 1 A192 A201 1
367 | A14 18 A34 A41 3850 A61 A74 3 A93 A101 1 A123 27 A143 A152 2 A173 1 A191 A201 1
368 | A11 18 A32 A42 3650 A61 A72 1 A92 A101 4 A123 22 A143 A151 1 A173 1 A191 A201 1
369 | A11 36 A32 A42 3446 A61 A75 4 A93 A101 2 A123 42 A143 A152 1 A173 2 A191 A201 2
370 | A12 18 A32 A42 3001 A61 A74 2 A92 A101 4 A121 40 A143 A151 1 A173 1 A191 A201 1
371 | A14 36 A32 A40 3079 A65 A73 4 A93 A101 4 A121 36 A143 A152 1 A173 1 A191 A201 1
372 | A14 18 A34 A43 6070 A61 A75 3 A93 A101 4 A123 33 A143 A152 2 A173 1 A192 A201 1
373 | A14 10 A34 A42 2146 A61 A72 1 A92 A101 3 A121 23 A143 A151 2 A173 1 A191 A201 1
374 | A14 60 A34 A40 13756 A65 A75 2 A93 A101 4 A124 63 A141 A153 1 A174 1 A192 A201 1
375 | A12 60 A31 A410 14782 A62 A75 3 A92 A101 4 A124 60 A141 A153 2 A174 1 A192 A201 2
376 | A11 48 A31 A49 7685 A61 A74 2 A92 A103 4 A123 37 A143 A151 1 A173 1 A191 A201 2
377 | A14 18 A33 A43 2320 A61 A71 2 A94 A101 3 A121 34 A143 A152 2 A173 1 A191 A201 1
378 | A14 7 A33 A43 846 A65 A75 3 A93 A101 4 A124 36 A143 A153 1 A173 1 A191 A201 1
379 | A12 36 A32 A40 14318 A61 A75 4 A93 A101 2 A124 57 A143 A153 1 A174 1 A192 A201 2
380 | A14 6 A34 A40 362 A62 A73 4 A92 A101 4 A123 52 A143 A152 2 A172 1 A191 A201 1
381 | A11 20 A32 A42 2212 A65 A74 4 A93 A101 4 A123 39 A143 A152 1 A173 1 A192 A201 1
382 | A12 18 A32 A41 12976 A61 A71 3 A92 A101 4 A124 38 A143 A153 1 A174 1 A192 A201 2
383 | A14 22 A32 A40 1283 A65 A74 4 A92 A101 4 A122 25 A143 A151 1 A173 1 A191 A201 1
384 | A13 12 A32 A40 1330 A61 A72 4 A93 A101 1 A121 26 A143 A152 1 A173 1 A191 A201 1
385 | A14 30 A33 A49 4272 A62 A73 2 A93 A101 2 A122 26 A143 A152 2 A172 1 A191 A201 1
386 | A14 18 A34 A43 2238 A61 A73 2 A92 A101 1 A123 25 A143 A152 2 A173 1 A191 A201 1
387 | A14 18 A32 A43 1126 A65 A72 4 A92 A101 2 A121 21 A143 A151 1 A173 1 A192 A201 1
388 | A12 18 A34 A42 7374 A61 A71 4 A93 A101 4 A122 40 A142 A152 2 A174 1 A192 A201 1
389 | A12 15 A34 A49 2326 A63 A73 2 A93 A101 4 A123 27 A141 A152 1 A173 1 A191 A201 1
390 | A14 9 A32 A49 1449 A61 A74 3 A92 A101 2 A123 27 A143 A152 2 A173 1 A191 A201 1
391 | A14 18 A32 A40 1820 A61 A73 2 A94 A101 2 A122 30 A143 A152 1 A174 1 A192 A201 1
392 | A12 12 A32 A42 983 A64 A72 1 A92 A101 4 A121 19 A143 A151 1 A172 1 A191 A201 1
393 | A11 36 A32 A40 3249 A61 A74 2 A93 A101 4 A124 39 A141 A153 1 A174 2 A192 A201 1
394 | A11 6 A34 A43 1957 A61 A74 1 A92 A101 4 A123 31 A143 A152 1 A173 1 A191 A201 1
395 | A14 9 A34 A42 2406 A61 A71 2 A93 A101 3 A123 31 A143 A152 1 A174 1 A191 A201 1
396 | A12 39 A33 A46 11760 A62 A74 2 A93 A101 3 A124 32 A143 A151 1 A173 1 A192 A201 1
397 | A11 12 A32 A42 2578 A61 A71 3 A92 A101 4 A124 55 A143 A153 1 A174 1 A191 A201 1
398 | A11 36 A34 A42 2348 A61 A73 3 A94 A101 2 A122 46 A143 A152 2 A173 1 A192 A201 1
399 | A12 12 A32 A40 1223 A61 A75 1 A91 A101 1 A121 46 A143 A151 2 A173 1 A191 A201 2
400 | A14 24 A34 A43 1516 A64 A73 4 A92 A101 1 A121 43 A143 A152 2 A172 1 A191 A201 1
401 | A14 18 A32 A43 1473 A61 A72 3 A94 A101 4 A121 39 A143 A152 1 A173 1 A192 A201 1
402 | A12 18 A34 A49 1887 A65 A73 4 A94 A101 4 A121 28 A141 A152 2 A173 1 A191 A201 1
403 | A14 24 A33 A49 8648 A61 A72 2 A93 A101 2 A123 27 A141 A152 2 A173 1 A192 A201 2
404 | A14 14 A33 A40 802 A61 A73 4 A93 A101 2 A123 27 A143 A152 2 A172 1 A191 A201 1
405 | A12 18 A33 A40 2899 A65 A75 4 A93 A101 4 A123 43 A143 A152 1 A173 2 A191 A201 1
406 | A12 24 A32 A43 2039 A61 A72 1 A94 A101 1 A122 22 A143 A152 1 A173 1 A192 A201 2
407 | A14 24 A34 A41 2197 A65 A74 4 A93 A101 4 A123 43 A143 A152 2 A173 2 A192 A201 1
408 | A11 15 A32 A43 1053 A61 A72 4 A94 A101 2 A121 27 A143 A152 1 A173 1 A191 A202 1
409 | A14 24 A32 A43 3235 A63 A75 3 A91 A101 2 A123 26 A143 A152 1 A174 1 A192 A201 1
410 | A13 12 A34 A40 939 A63 A74 4 A94 A101 2 A121 28 A143 A152 3 A173 1 A192 A201 2
411 | A12 24 A32 A43 1967 A61 A75 4 A92 A101 4 A123 20 A143 A152 1 A173 1 A192 A201 1
412 | A14 33 A34 A41 7253 A61 A74 3 A93 A101 2 A123 35 A143 A152 2 A174 1 A192 A201 1
413 | A14 12 A34 A49 2292 A61 A71 4 A93 A101 2 A123 42 A142 A152 2 A174 1 A192 A201 2
414 | A14 10 A32 A40 1597 A63 A73 3 A93 A101 2 A124 40 A143 A151 1 A172 2 A191 A202 1
415 | A11 24 A32 A40 1381 A65 A73 4 A92 A101 2 A122 35 A143 A152 1 A173 1 A191 A201 2
416 | A14 36 A34 A41 5842 A61 A75 2 A93 A101 2 A122 35 A143 A152 2 A173 2 A192 A201 1
417 | A11 12 A32 A40 2579 A61 A72 4 A93 A101 1 A121 33 A143 A152 1 A172 2 A191 A201 2
418 | A11 18 A33 A46 8471 A65 A73 1 A92 A101 2 A123 23 A143 A151 2 A173 1 A192 A201 1
419 | A14 21 A32 A40 2782 A63 A74 1 A92 A101 2 A123 31 A141 A152 1 A174 1 A191 A201 1
420 | A12 18 A32 A40 1042 A65 A73 4 A92 A101 2 A122 33 A143 A152 1 A173 1 A191 A201 2
421 | A14 15 A32 A40 3186 A64 A74 2 A92 A101 3 A123 20 A143 A151 1 A173 1 A191 A201 1
422 | A12 12 A32 A41 2028 A65 A73 4 A93 A101 2 A123 30 A143 A152 1 A173 1 A191 A201 1
423 | A12 12 A34 A40 958 A61 A74 2 A93 A101 3 A121 47 A143 A152 2 A172 2 A191 A201 1
424 | A14 21 A33 A42 1591 A62 A74 4 A93 A101 3 A121 34 A143 A152 2 A174 1 A191 A201 1
425 | A12 12 A32 A42 2762 A65 A75 1 A92 A101 2 A122 25 A141 A152 1 A173 1 A192 A201 2
426 | A12 18 A32 A41 2779 A61 A73 1 A94 A101 3 A123 21 A143 A151 1 A173 1 A192 A201 1
427 | A14 28 A34 A43 2743 A61 A75 4 A93 A101 2 A123 29 A143 A152 2 A173 1 A191 A201 1
428 | A14 18 A34 A43 1149 A64 A73 4 A93 A101 3 A121 46 A143 A152 2 A173 1 A191 A201 1
429 | A14 9 A32 A42 1313 A61 A75 1 A93 A101 4 A123 20 A143 A152 1 A173 1 A191 A201 1
430 | A11 18 A34 A45 1190 A61 A71 2 A92 A101 4 A124 55 A143 A153 3 A171 2 A191 A201 2
431 | A14 5 A32 A49 3448 A61 A74 1 A93 A101 4 A121 74 A143 A152 1 A172 1 A191 A201 1
432 | A12 24 A32 A410 11328 A61 A73 2 A93 A102 3 A123 29 A141 A152 2 A174 1 A192 A201 2
433 | A11 6 A34 A42 1872 A61 A71 4 A93 A101 4 A124 36 A143 A153 3 A174 1 A192 A201 1
434 | A14 24 A34 A45 2058 A61 A73 4 A91 A101 2 A121 33 A143 A152 2 A173 1 A192 A201 1
435 | A11 9 A32 A42 2136 A61 A73 3 A93 A101 2 A121 25 A143 A152 1 A173 1 A191 A201 1
436 | A12 12 A32 A43 1484 A65 A73 2 A94 A101 1 A121 25 A143 A152 1 A173 1 A192 A201 2
437 | A14 6 A32 A45 660 A63 A74 2 A94 A101 4 A121 23 A143 A151 1 A172 1 A191 A201 1
438 | A14 24 A34 A40 1287 A64 A75 4 A92 A101 4 A121 37 A143 A152 2 A173 1 A192 A201 1
439 | A11 42 A34 A45 3394 A61 A71 4 A93 A102 4 A123 65 A143 A152 2 A171 1 A191 A201 1
440 | A13 12 A31 A49 609 A61 A72 4 A92 A101 1 A121 26 A143 A152 1 A171 1 A191 A201 2
441 | A14 12 A32 A40 1884 A61 A75 4 A93 A101 4 A123 39 A143 A152 1 A174 1 A192 A201 1
442 | A11 12 A32 A42 1620 A61 A73 2 A92 A102 3 A122 30 A143 A152 1 A173 1 A191 A201 1
443 | A12 20 A33 A410 2629 A61 A73 2 A93 A101 3 A123 29 A141 A152 2 A173 1 A192 A201 1
444 | A14 12 A32 A46 719 A61 A75 4 A93 A101 4 A123 41 A141 A152 1 A172 2 A191 A201 2
445 | A12 48 A34 A42 5096 A61 A73 2 A92 A101 3 A123 30 A143 A152 1 A174 1 A192 A201 2
446 | A14 9 A34 A46 1244 A65 A75 4 A92 A101 4 A122 41 A143 A151 2 A172 1 A191 A201 1
447 | A11 36 A32 A40 1842 A61 A72 4 A92 A101 4 A123 34 A143 A152 1 A173 1 A192 A201 2
448 | A12 7 A32 A43 2576 A61 A73 2 A93 A103 2 A121 35 A143 A152 1 A173 1 A191 A201 1
449 | A13 12 A32 A42 1424 A65 A75 3 A92 A101 4 A121 55 A143 A152 1 A174 1 A192 A201 1
450 | A12 15 A33 A45 1512 A64 A73 3 A94 A101 3 A122 61 A142 A152 2 A173 1 A191 A201 2
451 | A14 36 A34 A41 11054 A65 A73 4 A93 A101 2 A123 30 A143 A152 1 A174 1 A192 A201 1
452 | A14 6 A32 A43 518 A61 A73 3 A92 A101 1 A121 29 A143 A152 1 A173 1 A191 A201 1
453 | A14 12 A30 A42 2759 A61 A75 2 A93 A101 4 A122 34 A143 A152 2 A173 1 A191 A201 1
454 | A14 24 A32 A41 2670 A61 A75 4 A93 A101 4 A123 35 A143 A152 1 A174 1 A192 A201 1
455 | A11 24 A32 A40 4817 A61 A74 2 A93 A102 3 A122 31 A143 A152 1 A173 1 A192 A201 2
456 | A14 24 A32 A41 2679 A61 A72 4 A92 A101 1 A124 29 A143 A152 1 A174 1 A192 A201 1
457 | A11 11 A34 A40 3905 A61 A73 2 A93 A101 2 A121 36 A143 A151 2 A173 2 A191 A201 1
458 | A11 12 A32 A41 3386 A61 A75 3 A93 A101 4 A124 35 A143 A153 1 A173 1 A192 A201 2
459 | A11 6 A32 A44 343 A61 A72 4 A92 A101 1 A121 27 A143 A152 1 A173 1 A191 A201 1
460 | A14 18 A32 A43 4594 A61 A72 3 A93 A101 2 A123 32 A143 A152 1 A173 1 A192 A201 1
461 | A11 36 A32 A42 3620 A61 A73 1 A93 A103 2 A122 37 A143 A152 1 A173 2 A191 A201 1
462 | A11 15 A32 A40 1721 A61 A72 2 A93 A101 3 A121 36 A143 A152 1 A173 1 A191 A201 1
463 | A12 12 A32 A42 3017 A61 A72 3 A92 A101 1 A121 34 A143 A151 1 A174 1 A191 A201 1
464 | A12 12 A32 A48 754 A65 A75 4 A93 A101 4 A122 38 A143 A152 2 A173 1 A191 A201 1
465 | A14 18 A32 A49 1950 A61 A74 4 A93 A101 1 A123 34 A142 A152 2 A173 1 A192 A201 1
466 | A11 24 A32 A41 2924 A61 A73 3 A93 A103 4 A124 63 A141 A152 1 A173 2 A192 A201 1
467 | A11 24 A33 A43 1659 A61 A72 4 A92 A101 2 A123 29 A143 A151 1 A172 1 A192 A201 2
468 | A14 48 A33 A43 7238 A65 A75 3 A93 A101 3 A123 32 A141 A152 2 A173 2 A191 A201 1
469 | A14 33 A33 A49 2764 A61 A73 2 A92 A101 2 A123 26 A143 A152 2 A173 1 A192 A201 1
470 | A14 24 A33 A41 4679 A61 A74 3 A93 A101 3 A123 35 A143 A152 2 A172 1 A192 A201 1
471 | A12 24 A32 A43 3092 A62 A72 3 A94 A101 2 A123 22 A143 A151 1 A173 1 A192 A201 2
472 | A11 6 A32 A46 448 A61 A72 4 A92 A101 4 A122 23 A143 A152 1 A173 1 A191 A201 2
473 | A11 9 A32 A40 654 A61 A73 4 A93 A101 3 A123 28 A143 A152 1 A172 1 A191 A201 2
474 | A14 6 A32 A48 1238 A65 A71 4 A93 A101 4 A122 36 A143 A152 1 A174 2 A192 A201 1
475 | A12 18 A34 A43 1245 A61 A73 4 A94 A101 2 A123 33 A143 A152 1 A173 1 A191 A201 2
476 | A11 18 A30 A42 3114 A61 A72 1 A92 A101 4 A122 26 A143 A151 1 A173 1 A191 A201 2
477 | A14 39 A32 A41 2569 A63 A73 4 A93 A101 4 A123 24 A143 A152 1 A173 1 A191 A201 1
478 | A13 24 A32 A43 5152 A61 A74 4 A93 A101 2 A123 25 A141 A152 1 A173 1 A191 A201 1
479 | A12 12 A32 A49 1037 A62 A74 3 A93 A101 4 A121 39 A143 A152 1 A172 1 A191 A201 1
480 | A11 15 A34 A42 1478 A61 A75 4 A93 A101 4 A123 44 A143 A152 2 A173 2 A192 A201 1
481 | A12 12 A34 A43 3573 A61 A73 1 A92 A101 1 A121 23 A143 A152 1 A172 1 A191 A201 1
482 | A12 24 A32 A40 1201 A61 A72 4 A93 A101 1 A122 26 A143 A152 1 A173 1 A191 A201 1
483 | A11 30 A32 A42 3622 A64 A75 4 A92 A101 4 A122 57 A143 A151 2 A173 1 A192 A201 1
484 | A14 15 A33 A42 960 A64 A74 3 A92 A101 2 A122 30 A143 A152 2 A173 1 A191 A201 1
485 | A14 12 A34 A40 1163 A63 A73 4 A93 A101 4 A121 44 A143 A152 1 A173 1 A192 A201 1
486 | A12 6 A33 A40 1209 A61 A71 4 A93 A101 4 A122 47 A143 A152 1 A174 1 A192 A201 2
487 | A14 12 A32 A43 3077 A61 A73 2 A93 A101 4 A123 52 A143 A152 1 A173 1 A192 A201 1
488 | A14 24 A32 A40 3757 A61 A75 4 A92 A102 4 A124 62 A143 A153 1 A173 1 A192 A201 1
489 | A14 10 A32 A40 1418 A62 A73 3 A93 A101 2 A121 35 A143 A151 1 A172 1 A191 A202 1
490 | A14 6 A32 A40 3518 A61 A73 2 A93 A103 3 A122 26 A143 A151 1 A173 1 A191 A201 1
491 | A14 12 A34 A43 1934 A61 A75 2 A93 A101 2 A124 26 A143 A152 2 A173 1 A191 A201 1
492 | A12 27 A30 A49 8318 A61 A75 2 A92 A101 4 A124 42 A143 A153 2 A174 1 A192 A201 2
493 | A14 6 A34 A43 1237 A62 A73 1 A92 A101 1 A122 27 A143 A152 2 A173 1 A191 A201 1
494 | A12 6 A32 A43 368 A65 A75 4 A93 A101 4 A122 38 A143 A152 1 A173 1 A191 A201 1
495 | A11 12 A34 A40 2122 A61 A73 3 A93 A101 2 A121 39 A143 A151 2 A172 2 A191 A202 1
496 | A11 24 A32 A42 2996 A65 A73 2 A94 A101 4 A123 20 A143 A152 1 A173 1 A191 A201 2
497 | A12 36 A32 A42 9034 A62 A72 4 A93 A102 1 A124 29 A143 A151 1 A174 1 A192 A201 2
498 | A14 24 A34 A42 1585 A61 A74 4 A93 A101 3 A122 40 A143 A152 2 A173 1 A191 A201 1
499 | A12 18 A32 A43 1301 A61 A75 4 A94 A103 2 A121 32 A143 A152 1 A172 1 A191 A201 1
500 | A13 6 A34 A40 1323 A62 A75 2 A91 A101 4 A123 28 A143 A152 2 A173 2 A192 A201 1
501 | A11 24 A32 A40 3123 A61 A72 4 A92 A101 1 A122 27 A143 A152 1 A173 1 A191 A201 2
502 | A11 36 A32 A41 5493 A61 A75 2 A93 A101 4 A124 42 A143 A153 1 A173 2 A191 A201 1
503 | A13 9 A32 A43 1126 A62 A75 2 A91 A101 4 A121 49 A143 A152 1 A173 1 A191 A201 1
504 | A12 24 A34 A43 1216 A62 A72 4 A93 A101 4 A124 38 A141 A152 2 A173 2 A191 A201 2
505 | A11 24 A32 A40 1207 A61 A72 4 A92 A101 4 A122 24 A143 A151 1 A173 1 A191 A201 2
506 | A14 10 A32 A40 1309 A65 A73 4 A93 A103 4 A122 27 A143 A152 1 A172 1 A191 A201 2
507 | A13 15 A34 A41 2360 A63 A73 2 A93 A101 2 A123 36 A143 A152 1 A173 1 A192 A201 1
508 | A12 15 A31 A40 6850 A62 A71 1 A93 A101 2 A122 34 A143 A152 1 A174 2 A192 A201 2
509 | A14 24 A32 A43 1413 A61 A73 4 A94 A101 2 A122 28 A143 A152 1 A173 1 A191 A201 1
510 | A14 39 A32 A41 8588 A62 A75 4 A93 A101 2 A123 45 A143 A152 1 A174 1 A192 A201 1
511 | A11 12 A32 A40 759 A61 A74 4 A93 A101 2 A121 26 A143 A152 1 A173 1 A191 A201 2
512 | A14 36 A32 A41 4686 A61 A73 2 A93 A101 2 A124 32 A143 A153 1 A174 1 A192 A201 1
513 | A13 15 A32 A49 2687 A61 A74 2 A93 A101 4 A122 26 A143 A151 1 A173 1 A192 A201 1
514 | A12 12 A33 A43 585 A61 A73 4 A94 A102 4 A121 20 A143 A151 2 A173 1 A191 A201 1
515 | A14 24 A32 A40 2255 A65 A72 4 A93 A101 1 A122 54 A143 A152 1 A173 1 A191 A201 1
516 | A11 6 A34 A40 609 A61 A74 4 A92 A101 3 A122 37 A143 A152 2 A173 1 A191 A202 1
517 | A11 6 A34 A40 1361 A61 A72 2 A93 A101 4 A121 40 A143 A152 1 A172 2 A191 A202 1
518 | A14 36 A34 A42 7127 A61 A72 2 A92 A101 4 A122 23 A143 A151 2 A173 1 A192 A201 2
519 | A11 6 A32 A40 1203 A62 A75 3 A93 A101 2 A122 43 A143 A152 1 A173 1 A192 A201 1
520 | A14 6 A34 A43 700 A65 A75 4 A93 A101 4 A124 36 A143 A153 2 A173 1 A191 A201 1
521 | A14 24 A34 A45 5507 A61 A75 3 A93 A101 4 A124 44 A143 A153 2 A173 1 A191 A201 1
522 | A11 18 A32 A43 3190 A61 A73 2 A92 A101 2 A121 24 A143 A152 1 A173 1 A191 A201 2
523 | A11 48 A30 A42 7119 A61 A73 3 A93 A101 4 A124 53 A143 A153 2 A173 2 A191 A201 2
524 | A14 24 A32 A41 3488 A62 A74 3 A92 A101 4 A123 23 A143 A152 1 A173 1 A191 A201 1
525 | A12 18 A32 A43 1113 A61 A73 4 A92 A103 4 A121 26 A143 A152 1 A172 2 A191 A201 1
526 | A12 26 A32 A41 7966 A61 A72 2 A93 A101 3 A123 30 A143 A152 2 A173 1 A191 A201 1
527 | A14 15 A34 A46 1532 A62 A73 4 A92 A101 3 A123 31 A143 A152 1 A173 1 A191 A201 1
528 | A14 4 A34 A43 1503 A61 A74 2 A93 A101 1 A121 42 A143 A152 2 A172 2 A191 A201 1
529 | A11 36 A32 A43 2302 A61 A73 4 A91 A101 4 A123 31 A143 A151 1 A173 1 A191 A201 2
530 | A11 6 A32 A40 662 A61 A72 3 A93 A101 4 A121 41 A143 A152 1 A172 2 A192 A201 1
531 | A12 36 A32 A46 2273 A61 A74 3 A93 A101 1 A123 32 A143 A152 2 A173 2 A191 A201 1
532 | A12 15 A32 A40 2631 A62 A73 2 A92 A101 4 A123 28 A143 A151 2 A173 1 A192 A201 2
533 | A14 12 A33 A41 1503 A61 A73 4 A94 A101 4 A121 41 A143 A151 1 A173 1 A191 A201 1
534 | A14 24 A32 A43 1311 A62 A74 4 A94 A101 3 A122 26 A143 A152 1 A173 1 A192 A201 1
535 | A14 24 A32 A43 3105 A65 A72 4 A93 A101 2 A123 25 A143 A152 2 A173 1 A191 A201 1
536 | A13 21 A34 A46 2319 A61 A72 2 A91 A101 1 A123 33 A143 A151 1 A173 1 A191 A201 2
537 | A11 6 A32 A40 1374 A65 A71 4 A92 A101 3 A122 75 A143 A152 1 A174 1 A192 A201 1
538 | A12 18 A34 A42 3612 A61 A75 3 A92 A101 4 A122 37 A143 A152 1 A173 1 A192 A201 1
539 | A11 48 A32 A40 7763 A61 A75 4 A93 A101 4 A124 42 A141 A153 1 A174 1 A191 A201 2
540 | A13 18 A32 A42 3049 A61 A72 1 A92 A101 1 A122 45 A142 A152 1 A172 1 A191 A201 1
541 | A12 12 A32 A43 1534 A61 A72 1 A94 A101 1 A121 23 A143 A151 1 A173 1 A191 A201 2
542 | A14 24 A33 A40 2032 A61 A75 4 A93 A101 4 A124 60 A143 A153 2 A173 1 A192 A201 1
543 | A11 30 A32 A42 6350 A65 A75 4 A93 A101 4 A122 31 A143 A152 1 A173 1 A191 A201 2
544 | A13 18 A32 A42 2864 A61 A73 2 A93 A101 1 A121 34 A143 A152 1 A172 2 A191 A201 2
545 | A14 12 A34 A40 1255 A61 A75 4 A93 A101 4 A121 61 A143 A152 2 A172 1 A191 A201 1
546 | A11 24 A33 A40 1333 A61 A71 4 A93 A101 2 A121 43 A143 A153 2 A173 2 A191 A201 2
547 | A14 24 A34 A40 2022 A61 A73 4 A92 A101 4 A123 37 A143 A152 1 A173 1 A192 A201 1
548 | A14 24 A32 A43 1552 A61 A74 3 A93 A101 1 A123 32 A141 A152 1 A173 2 A191 A201 1
549 | A11 12 A31 A43 626 A61 A73 4 A92 A101 4 A121 24 A141 A152 1 A172 1 A191 A201 2
550 | A14 48 A34 A41 8858 A65 A74 2 A93 A101 1 A124 35 A143 A153 2 A173 1 A192 A201 1
551 | A14 12 A34 A45 996 A65 A74 4 A92 A101 4 A121 23 A143 A152 2 A173 1 A191 A201 1
552 | A14 6 A31 A43 1750 A63 A75 2 A93 A101 4 A122 45 A141 A152 1 A172 2 A191 A201 1
553 | A11 48 A32 A43 6999 A61 A74 1 A94 A103 1 A121 34 A143 A152 2 A173 1 A192 A201 2
554 | A12 12 A34 A40 1995 A62 A72 4 A93 A101 1 A123 27 A143 A152 1 A173 1 A191 A201 1
555 | A12 9 A32 A46 1199 A61 A74 4 A92 A101 4 A122 67 A143 A152 2 A174 1 A192 A201 1
556 | A12 12 A32 A43 1331 A61 A72 2 A93 A101 1 A123 22 A142 A152 1 A173 1 A191 A201 2
557 | A12 18 A30 A40 2278 A62 A72 3 A92 A101 3 A123 28 A143 A152 2 A173 1 A191 A201 2
558 | A14 21 A30 A40 5003 A65 A73 1 A92 A101 4 A122 29 A141 A152 2 A173 1 A192 A201 2
559 | A11 24 A31 A42 3552 A61 A74 3 A93 A101 4 A123 27 A141 A152 1 A173 1 A191 A201 2
560 | A12 18 A34 A42 1928 A61 A72 2 A93 A101 2 A121 31 A143 A152 2 A172 1 A191 A201 2
561 | A11 24 A32 A41 2964 A65 A75 4 A93 A101 4 A124 49 A141 A153 1 A173 2 A192 A201 1
562 | A11 24 A31 A43 1546 A61 A74 4 A93 A103 4 A123 24 A141 A151 1 A172 1 A191 A201 2
563 | A13 6 A33 A43 683 A61 A72 2 A92 A101 1 A122 29 A141 A152 1 A173 1 A191 A201 1
564 | A12 36 A32 A40 12389 A65 A73 1 A93 A101 4 A124 37 A143 A153 1 A173 1 A192 A201 2
565 | A12 24 A33 A49 4712 A65 A73 4 A93 A101 2 A122 37 A141 A152 2 A174 1 A192 A201 1
566 | A12 24 A33 A43 1553 A62 A74 3 A92 A101 2 A122 23 A143 A151 2 A173 1 A192 A201 1
567 | A11 12 A32 A40 1372 A61 A74 2 A91 A101 3 A123 36 A143 A152 1 A173 1 A191 A201 2
568 | A14 24 A34 A43 2578 A64 A75 2 A93 A101 2 A123 34 A143 A152 1 A173 1 A191 A201 1
569 | A12 48 A32 A43 3979 A65 A74 4 A93 A101 1 A123 41 A143 A152 2 A173 2 A192 A201 1
570 | A11 48 A32 A43 6758 A61 A73 3 A92 A101 2 A123 31 A143 A152 1 A173 1 A192 A201 2
571 | A11 24 A32 A42 3234 A61 A72 4 A92 A101 4 A121 23 A143 A151 1 A172 1 A192 A201 2
572 | A14 30 A34 A43 5954 A61 A74 3 A93 A102 2 A123 38 A143 A152 1 A173 1 A191 A201 1
573 | A14 24 A32 A41 5433 A65 A71 2 A92 A101 4 A122 26 A143 A151 1 A174 1 A192 A201 1
574 | A11 15 A32 A49 806 A61 A73 4 A92 A101 4 A122 22 A143 A152 1 A172 1 A191 A201 1
575 | A12 9 A32 A43 1082 A61 A75 4 A93 A101 4 A123 27 A143 A152 2 A172 1 A191 A201 1
576 | A14 15 A34 A42 2788 A61 A74 2 A92 A102 3 A123 24 A141 A152 2 A173 1 A191 A201 1
577 | A12 12 A32 A43 2930 A61 A74 2 A92 A101 1 A121 27 A143 A152 1 A173 1 A191 A201 1
578 | A14 24 A34 A46 1927 A65 A73 3 A92 A101 2 A123 33 A143 A152 2 A173 1 A192 A201 1
579 | A12 36 A34 A40 2820 A61 A72 4 A91 A101 4 A123 27 A143 A152 2 A173 1 A191 A201 2
580 | A14 24 A32 A48 937 A61 A72 4 A94 A101 3 A123 27 A143 A152 2 A172 1 A191 A201 1
581 | A12 18 A34 A40 1056 A61 A75 3 A93 A103 3 A121 30 A141 A152 2 A173 1 A191 A201 2
582 | A12 12 A34 A40 3124 A61 A72 1 A93 A101 3 A121 49 A141 A152 2 A172 2 A191 A201 1
583 | A14 9 A32 A42 1388 A61 A73 4 A92 A101 2 A121 26 A143 A151 1 A173 1 A191 A201 1
584 | A12 36 A32 A45 2384 A61 A72 4 A93 A101 1 A124 33 A143 A151 1 A172 1 A191 A201 2
585 | A14 12 A32 A40 2133 A65 A75 4 A92 A101 4 A124 52 A143 A153 1 A174 1 A192 A201 1
586 | A11 18 A32 A42 2039 A61 A73 1 A92 A101 4 A121 20 A141 A151 1 A173 1 A191 A201 2
587 | A11 9 A34 A40 2799 A61 A73 2 A93 A101 2 A121 36 A143 A151 2 A173 2 A191 A201 1
588 | A11 12 A32 A42 1289 A61 A73 4 A93 A103 1 A122 21 A143 A152 1 A172 1 A191 A201 1
589 | A11 18 A32 A44 1217 A61 A73 4 A94 A101 3 A121 47 A143 A152 1 A172 1 A192 A201 2
590 | A11 12 A34 A42 2246 A61 A75 3 A93 A101 3 A122 60 A143 A152 2 A173 1 A191 A201 2
591 | A11 12 A34 A43 385 A61 A74 4 A92 A101 3 A121 58 A143 A152 4 A172 1 A192 A201 1
592 | A12 24 A33 A40 1965 A65 A73 4 A92 A101 4 A123 42 A143 A151 2 A173 1 A192 A201 1
593 | A14 21 A32 A49 1572 A64 A75 4 A92 A101 4 A121 36 A141 A152 1 A172 1 A191 A201 1
594 | A12 24 A32 A40 2718 A61 A73 3 A92 A101 4 A122 20 A143 A151 1 A172 1 A192 A201 2
595 | A11 24 A31 A410 1358 A65 A75 4 A93 A101 3 A123 40 A142 A152 1 A174 1 A192 A201 2
596 | A12 6 A31 A40 931 A62 A72 1 A92 A101 1 A122 32 A142 A152 1 A172 1 A191 A201 2
597 | A11 24 A32 A40 1442 A61 A74 4 A92 A101 4 A123 23 A143 A151 2 A173 1 A191 A201 2
598 | A12 24 A30 A49 4241 A61 A73 1 A93 A101 4 A121 36 A143 A152 3 A172 1 A192 A201 2
599 | A14 18 A34 A40 2775 A61 A74 2 A93 A101 2 A122 31 A141 A152 2 A173 1 A191 A201 2
600 | A14 24 A33 A49 3863 A61 A73 1 A93 A101 2 A124 32 A143 A153 1 A173 1 A191 A201 1
601 | A12 7 A32 A43 2329 A61 A72 1 A92 A103 1 A121 45 A143 A152 1 A173 1 A191 A201 1
602 | A12 9 A32 A42 918 A61 A73 4 A92 A101 1 A122 30 A143 A152 1 A173 1 A191 A201 2
603 | A12 24 A31 A46 1837 A61 A74 4 A92 A101 4 A124 34 A141 A153 1 A172 1 A191 A201 2
604 | A14 36 A32 A42 3349 A61 A73 4 A92 A101 2 A123 28 A143 A152 1 A174 1 A192 A201 2
605 | A13 10 A32 A42 1275 A61 A72 4 A92 A101 2 A122 23 A143 A152 1 A173 1 A191 A201 1
606 | A11 24 A31 A42 2828 A63 A73 4 A93 A101 4 A121 22 A142 A152 1 A173 1 A192 A201 1
607 | A14 24 A34 A49 4526 A61 A73 3 A93 A101 2 A121 74 A143 A152 1 A174 1 A192 A201 1
608 | A12 36 A32 A43 2671 A62 A73 4 A92 A102 4 A124 50 A143 A153 1 A173 1 A191 A201 2
609 | A14 18 A32 A43 2051 A61 A72 4 A93 A101 1 A121 33 A143 A152 1 A173 1 A191 A201 1
610 | A14 15 A32 A41 1300 A65 A75 4 A93 A101 4 A124 45 A141 A153 1 A173 2 A191 A201 1
611 | A11 12 A32 A44 741 A62 A71 4 A92 A101 3 A122 22 A143 A152 1 A173 1 A191 A201 2
612 | A13 10 A32 A40 1240 A62 A75 1 A92 A101 4 A124 48 A143 A153 1 A172 2 A191 A201 2
613 | A11 21 A32 A43 3357 A64 A72 4 A92 A101 2 A123 29 A141 A152 1 A173 1 A191 A201 1
614 | A11 24 A31 A41 3632 A61 A73 1 A92 A103 4 A123 22 A141 A151 1 A173 1 A191 A202 1
615 | A14 18 A33 A42 1808 A61 A74 4 A92 A101 1 A121 22 A143 A152 1 A173 1 A191 A201 2
616 | A12 48 A30 A49 12204 A65 A73 2 A93 A101 2 A123 48 A141 A152 1 A174 1 A192 A201 1
617 | A12 60 A33 A43 9157 A65 A73 2 A93 A101 2 A124 27 A143 A153 1 A174 1 A191 A201 1
618 | A11 6 A34 A40 3676 A61 A73 1 A93 A101 3 A121 37 A143 A151 3 A173 2 A191 A201 1
619 | A12 30 A32 A42 3441 A62 A73 2 A92 A102 4 A123 21 A143 A151 1 A173 1 A191 A201 2
620 | A14 12 A32 A40 640 A61 A73 4 A91 A101 2 A121 49 A143 A152 1 A172 1 A191 A201 1
621 | A12 21 A34 A49 3652 A61 A74 2 A93 A101 3 A122 27 A143 A152 2 A173 1 A191 A201 1
622 | A14 18 A34 A40 1530 A61 A73 3 A93 A101 2 A122 32 A141 A152 2 A173 1 A191 A201 2
623 | A14 48 A32 A49 3914 A65 A73 4 A91 A101 2 A121 38 A141 A152 1 A173 1 A191 A201 2
624 | A11 12 A32 A42 1858 A61 A72 4 A92 A101 1 A123 22 A143 A151 1 A173 1 A191 A201 1
625 | A11 18 A32 A43 2600 A61 A73 4 A93 A101 4 A124 65 A143 A153 2 A173 1 A191 A201 2
626 | A14 15 A32 A43 1979 A65 A75 4 A93 A101 2 A123 35 A143 A152 1 A173 1 A191 A201 1
627 | A13 6 A32 A42 2116 A61 A73 2 A93 A101 2 A121 41 A143 A152 1 A173 1 A192 A201 1
628 | A12 9 A31 A40 1437 A62 A74 2 A93 A101 3 A124 29 A143 A152 1 A173 1 A191 A201 2
629 | A14 42 A34 A42 4042 A63 A73 4 A93 A101 4 A121 36 A143 A152 2 A173 1 A192 A201 1
630 | A14 9 A32 A46 3832 A65 A75 1 A93 A101 4 A121 64 A143 A152 1 A172 1 A191 A201 1
631 | A11 24 A32 A43 3660 A61 A73 2 A92 A101 4 A123 28 A143 A152 1 A173 1 A191 A201 1
632 | A11 18 A31 A42 1553 A61 A73 4 A93 A101 3 A123 44 A141 A152 1 A173 1 A191 A201 2
633 | A12 15 A32 A43 1444 A65 A72 4 A93 A101 1 A122 23 A143 A152 1 A173 1 A191 A201 1
634 | A14 9 A32 A42 1980 A61 A72 2 A92 A102 2 A123 19 A143 A151 2 A173 1 A191 A201 2
635 | A12 24 A32 A40 1355 A61 A72 3 A92 A101 4 A123 25 A143 A152 1 A172 1 A192 A201 2
636 | A14 12 A32 A46 1393 A61 A75 4 A93 A101 4 A122 47 A141 A152 3 A173 2 A192 A201 1
637 | A14 24 A32 A43 1376 A63 A74 4 A92 A101 1 A123 28 A143 A152 1 A173 1 A191 A201 1
638 | A14 60 A33 A43 15653 A61 A74 2 A93 A101 4 A123 21 A143 A152 2 A173 1 A192 A201 1
639 | A14 12 A32 A43 1493 A61 A72 4 A92 A101 3 A123 34 A143 A152 1 A173 2 A191 A201 1
640 | A11 42 A33 A43 4370 A61 A74 3 A93 A101 2 A122 26 A141 A152 2 A173 2 A192 A201 2
641 | A11 18 A32 A46 750 A61 A71 4 A92 A101 1 A121 27 A143 A152 1 A171 1 A191 A201 2
642 | A12 15 A32 A45 1308 A61 A75 4 A93 A101 4 A123 38 A143 A152 2 A172 1 A191 A201 1
643 | A14 15 A32 A46 4623 A62 A73 3 A93 A101 2 A122 40 A143 A152 1 A174 1 A192 A201 2
644 | A14 24 A34 A43 1851 A61 A74 4 A94 A103 2 A123 33 A143 A152 2 A173 1 A192 A201 1
645 | A11 18 A34 A43 1880 A61 A74 4 A94 A101 1 A122 32 A143 A152 2 A174 1 A192 A201 1
646 | A14 36 A33 A49 7980 A65 A72 4 A93 A101 4 A123 27 A143 A151 2 A173 1 A192 A201 2
647 | A11 30 A30 A42 4583 A61 A73 2 A91 A103 2 A121 32 A143 A152 2 A173 1 A191 A201 1
648 | A14 12 A32 A40 1386 A63 A73 2 A92 A101 2 A122 26 A143 A152 1 A173 1 A191 A201 2
649 | A13 24 A32 A40 947 A61 A74 4 A93 A101 3 A124 38 A141 A153 1 A173 2 A191 A201 2
650 | A11 12 A32 A46 684 A61 A73 4 A93 A101 4 A123 40 A143 A151 1 A172 2 A191 A201 2
651 | A11 48 A32 A46 7476 A61 A74 4 A93 A101 1 A124 50 A143 A153 1 A174 1 A192 A201 1
652 | A12 12 A32 A42 1922 A61 A73 4 A93 A101 2 A122 37 A143 A152 1 A172 1 A191 A201 2
653 | A11 24 A32 A40 2303 A61 A75 4 A93 A102 1 A121 45 A143 A152 1 A173 1 A191 A201 2
654 | A12 36 A33 A40 8086 A62 A75 2 A93 A101 4 A123 42 A143 A152 4 A174 1 A192 A201 2
655 | A14 24 A34 A41 2346 A61 A74 4 A93 A101 3 A123 35 A143 A152 2 A173 1 A192 A201 1
656 | A11 14 A32 A40 3973 A61 A71 1 A93 A101 4 A124 22 A143 A153 1 A173 1 A191 A201 1
657 | A12 12 A32 A40 888 A61 A75 4 A93 A101 4 A123 41 A141 A152 1 A172 2 A191 A201 2
658 | A14 48 A32 A43 10222 A65 A74 4 A93 A101 3 A123 37 A142 A152 1 A173 1 A192 A201 1
659 | A12 30 A30 A49 4221 A61 A73 2 A92 A101 1 A123 28 A143 A152 2 A173 1 A191 A201 1
660 | A12 18 A34 A42 6361 A61 A75 2 A93 A101 1 A124 41 A143 A152 1 A173 1 A192 A201 1
661 | A13 12 A32 A43 1297 A61 A73 3 A94 A101 4 A121 23 A143 A151 1 A173 1 A191 A201 1
662 | A11 12 A32 A40 900 A65 A73 4 A94 A101 2 A123 23 A143 A152 1 A173 1 A191 A201 2
663 | A14 21 A32 A42 2241 A61 A75 4 A93 A101 2 A121 50 A143 A152 2 A173 1 A191 A201 1
664 | A12 6 A33 A42 1050 A61 A71 4 A93 A101 1 A122 35 A142 A152 2 A174 1 A192 A201 1
665 | A13 6 A34 A46 1047 A61 A73 2 A92 A101 4 A122 50 A143 A152 1 A172 1 A191 A201 1
666 | A14 24 A34 A410 6314 A61 A71 4 A93 A102 2 A124 27 A141 A152 2 A174 1 A192 A201 1
667 | A12 30 A31 A42 3496 A64 A73 4 A93 A101 2 A123 34 A142 A152 1 A173 2 A192 A201 1
668 | A14 48 A31 A49 3609 A61 A73 1 A92 A101 1 A121 27 A142 A152 1 A173 1 A191 A201 1
669 | A11 12 A34 A40 4843 A61 A75 3 A93 A102 4 A122 43 A143 A151 2 A173 1 A192 A201 2
670 | A13 30 A34 A43 3017 A61 A75 4 A93 A101 4 A122 47 A143 A152 1 A173 1 A191 A201 1
671 | A14 24 A34 A49 4139 A62 A73 3 A93 A101 3 A122 27 A143 A152 2 A172 1 A192 A201 1
672 | A14 36 A32 A49 5742 A62 A74 2 A93 A101 2 A123 31 A143 A152 2 A173 1 A192 A201 1
673 | A14 60 A32 A40 10366 A61 A75 2 A93 A101 4 A122 42 A143 A152 1 A174 1 A192 A201 1
674 | A14 6 A34 A40 2080 A63 A73 1 A94 A101 2 A123 24 A143 A152 1 A173 1 A191 A201 1
675 | A14 21 A33 A49 2580 A63 A72 4 A93 A101 2 A121 41 A141 A152 1 A172 2 A191 A201 2
676 | A14 30 A34 A43 4530 A61 A74 4 A92 A101 4 A123 26 A143 A151 1 A174 1 A192 A201 1
677 | A14 24 A34 A42 5150 A61 A75 4 A93 A101 4 A123 33 A143 A152 1 A173 1 A192 A201 1
678 | A12 72 A32 A43 5595 A62 A73 2 A94 A101 2 A123 24 A143 A152 1 A173 1 A191 A201 2
679 | A11 24 A32 A43 2384 A61 A75 4 A93 A101 4 A121 64 A141 A151 1 A172 1 A191 A201 1
680 | A14 18 A32 A43 1453 A61 A72 3 A92 A101 1 A121 26 A143 A152 1 A173 1 A191 A201 1
681 | A14 6 A32 A46 1538 A61 A72 1 A92 A101 2 A124 56 A143 A152 1 A173 1 A191 A201 1
682 | A14 12 A32 A43 2279 A65 A73 4 A93 A101 4 A124 37 A143 A153 1 A173 1 A192 A201 1
683 | A14 15 A33 A43 1478 A61 A73 4 A94 A101 3 A121 33 A141 A152 2 A173 1 A191 A201 1
684 | A14 24 A34 A43 5103 A61 A72 3 A94 A101 3 A124 47 A143 A153 3 A173 1 A192 A201 1
685 | A12 36 A33 A49 9857 A62 A74 1 A93 A101 3 A122 31 A143 A152 2 A172 2 A192 A201 1
686 | A14 60 A32 A40 6527 A65 A73 4 A93 A101 4 A124 34 A143 A153 1 A173 2 A192 A201 1
687 | A13 10 A34 A43 1347 A65 A74 4 A93 A101 2 A122 27 A143 A152 2 A173 1 A192 A201 1
688 | A12 36 A33 A40 2862 A62 A75 4 A93 A101 3 A124 30 A143 A153 1 A173 1 A191 A201 1
689 | A14 9 A32 A43 2753 A62 A75 3 A93 A102 4 A123 35 A143 A152 1 A173 1 A192 A201 1
690 | A11 12 A32 A40 3651 A64 A73 1 A93 A101 3 A122 31 A143 A152 1 A173 2 A191 A201 1
691 | A11 15 A34 A42 975 A61 A73 2 A91 A101 3 A122 25 A143 A152 2 A173 1 A191 A201 1
692 | A12 15 A32 A45 2631 A62 A73 3 A92 A101 2 A121 25 A143 A152 1 A172 1 A191 A201 1
693 | A12 24 A32 A43 2896 A62 A72 2 A93 A101 1 A123 29 A143 A152 1 A173 1 A191 A201 1
694 | A11 6 A34 A40 4716 A65 A72 1 A93 A101 3 A121 44 A143 A152 2 A172 2 A191 A201 1
695 | A14 24 A32 A43 2284 A61 A74 4 A93 A101 2 A123 28 A143 A152 1 A173 1 A192 A201 1
696 | A14 6 A32 A41 1236 A63 A73 2 A93 A101 4 A122 50 A143 A151 1 A173 1 A191 A201 1
697 | A12 12 A32 A43 1103 A61 A74 4 A93 A103 3 A121 29 A143 A152 2 A173 1 A191 A202 1
698 | A14 12 A34 A40 926 A61 A71 1 A92 A101 2 A122 38 A143 A152 1 A171 1 A191 A201 1
699 | A14 18 A34 A43 1800 A61 A73 4 A93 A101 2 A123 24 A143 A152 2 A173 1 A191 A201 1
700 | A13 15 A32 A46 1905 A61 A75 4 A93 A101 4 A123 40 A143 A151 1 A174 1 A192 A201 1
701 | A14 12 A32 A42 1123 A63 A73 4 A92 A101 4 A123 29 A143 A151 1 A172 1 A191 A201 2
702 | A11 48 A34 A41 6331 A61 A75 4 A93 A101 4 A124 46 A143 A153 2 A173 1 A192 A201 2
703 | A13 24 A32 A43 1377 A62 A75 4 A92 A101 2 A124 47 A143 A153 1 A173 1 A192 A201 1
704 | A12 30 A33 A49 2503 A62 A75 4 A93 A101 2 A122 41 A142 A152 2 A173 1 A191 A201 1
705 | A12 27 A32 A49 2528 A61 A72 4 A92 A101 1 A122 32 A143 A152 1 A173 2 A192 A201 1
706 | A14 15 A32 A40 5324 A63 A75 1 A92 A101 4 A124 35 A143 A153 1 A173 1 A191 A201 1
707 | A12 48 A32 A40 6560 A62 A74 3 A93 A101 2 A122 24 A143 A152 1 A173 1 A191 A201 2
708 | A12 12 A30 A42 2969 A61 A72 4 A92 A101 3 A122 25 A143 A151 2 A173 1 A191 A201 2
709 | A12 9 A32 A43 1206 A61 A75 4 A92 A101 4 A121 25 A143 A152 1 A173 1 A191 A201 1
710 | A12 9 A32 A43 2118 A61 A73 2 A93 A101 2 A121 37 A143 A152 1 A172 2 A191 A201 1
711 | A14 18 A34 A43 629 A63 A75 4 A93 A101 3 A122 32 A141 A152 2 A174 1 A192 A201 1
712 | A11 6 A31 A46 1198 A61 A75 4 A92 A101 4 A124 35 A143 A153 1 A173 1 A191 A201 2
713 | A14 21 A32 A41 2476 A65 A75 4 A93 A101 4 A121 46 A143 A152 1 A174 1 A192 A201 1
714 | A11 9 A34 A43 1138 A61 A73 4 A93 A101 4 A121 25 A143 A152 2 A172 1 A191 A201 1
715 | A12 60 A32 A40 14027 A61 A74 4 A93 A101 2 A124 27 A143 A152 1 A174 1 A192 A201 2
716 | A14 30 A34 A41 7596 A65 A75 1 A93 A101 4 A123 63 A143 A152 2 A173 1 A191 A201 1
717 | A14 30 A34 A43 3077 A65 A75 3 A93 A101 2 A123 40 A143 A152 2 A173 2 A192 A201 1
718 | A14 18 A32 A43 1505 A61 A73 4 A93 A101 2 A124 32 A143 A153 1 A174 1 A192 A201 1
719 | A13 24 A34 A43 3148 A65 A73 3 A93 A101 2 A123 31 A143 A152 2 A173 1 A192 A201 1
720 | A12 20 A30 A41 6148 A62 A75 3 A94 A101 4 A123 31 A141 A152 2 A173 1 A192 A201 1
721 | A13 9 A30 A43 1337 A61 A72 4 A93 A101 2 A123 34 A143 A152 2 A174 1 A192 A201 2
722 | A12 6 A31 A46 433 A64 A72 4 A92 A101 2 A122 24 A141 A151 1 A173 2 A191 A201 2
723 | A11 12 A32 A40 1228 A61 A73 4 A92 A101 2 A121 24 A143 A152 1 A172 1 A191 A201 2
724 | A12 9 A32 A43 790 A63 A73 4 A92 A101 3 A121 66 A143 A152 1 A172 1 A191 A201 1
725 | A14 27 A32 A40 2570 A61 A73 3 A92 A101 3 A121 21 A143 A151 1 A173 1 A191 A201 2
726 | A14 6 A34 A40 250 A64 A73 2 A92 A101 2 A121 41 A141 A152 2 A172 1 A191 A201 1
727 | A14 15 A34 A43 1316 A63 A73 2 A94 A101 2 A122 47 A143 A152 2 A172 1 A191 A201 1
728 | A11 18 A32 A43 1882 A61 A73 4 A92 A101 4 A123 25 A141 A151 2 A173 1 A191 A201 2
729 | A12 48 A31 A49 6416 A61 A75 4 A92 A101 3 A124 59 A143 A151 1 A173 1 A191 A201 2
730 | A13 24 A34 A49 1275 A64 A73 2 A91 A101 4 A121 36 A143 A152 2 A173 1 A192 A201 1
731 | A12 24 A33 A43 6403 A61 A72 1 A93 A101 2 A123 33 A143 A152 1 A173 1 A191 A201 1
732 | A11 24 A32 A43 1987 A61 A73 2 A93 A101 4 A121 21 A143 A151 1 A172 2 A191 A201 2
733 | A12 8 A32 A43 760 A61 A74 4 A92 A103 2 A121 44 A143 A152 1 A172 1 A191 A201 1
734 | A14 24 A32 A41 2603 A64 A73 2 A92 A101 4 A123 28 A143 A151 1 A173 1 A192 A201 1
735 | A14 4 A34 A40 3380 A61 A74 1 A92 A101 1 A121 37 A143 A152 1 A173 2 A191 A201 1
736 | A12 36 A31 A44 3990 A65 A72 3 A92 A101 2 A124 29 A141 A152 1 A171 1 A191 A201 1
737 | A12 24 A32 A41 11560 A61 A73 1 A92 A101 4 A123 23 A143 A151 2 A174 1 A191 A201 2
738 | A11 18 A32 A40 4380 A62 A73 3 A93 A101 4 A123 35 A143 A152 1 A172 2 A192 A201 1
739 | A14 6 A34 A40 6761 A61 A74 1 A93 A101 3 A124 45 A143 A152 2 A174 2 A192 A201 1
740 | A12 30 A30 A49 4280 A62 A73 4 A92 A101 4 A123 26 A143 A151 2 A172 1 A191 A201 2
741 | A11 24 A31 A40 2325 A62 A74 2 A93 A101 3 A123 32 A141 A152 1 A173 1 A191 A201 1
742 | A12 10 A31 A43 1048 A61 A73 4 A93 A101 4 A121 23 A142 A152 1 A172 1 A191 A201 1
743 | A14 21 A32 A43 3160 A65 A75 4 A93 A101 3 A122 41 A143 A152 1 A173 1 A192 A201 1
744 | A11 24 A31 A42 2483 A63 A73 4 A93 A101 4 A121 22 A142 A152 1 A173 1 A192 A201 1
745 | A11 39 A34 A42 14179 A65 A74 4 A93 A101 4 A122 30 A143 A152 2 A174 1 A192 A201 1
746 | A11 13 A34 A49 1797 A61 A72 3 A93 A101 1 A122 28 A141 A152 2 A172 1 A191 A201 1
747 | A11 15 A32 A40 2511 A61 A71 1 A92 A101 4 A123 23 A143 A151 1 A173 1 A191 A201 1
748 | A11 12 A32 A40 1274 A61 A72 3 A92 A101 1 A121 37 A143 A152 1 A172 1 A191 A201 2
749 | A14 21 A32 A41 5248 A65 A73 1 A93 A101 3 A123 26 A143 A152 1 A173 1 A191 A201 1
750 | A14 15 A32 A41 3029 A61 A74 2 A93 A101 2 A123 33 A143 A152 1 A173 1 A191 A201 1
751 | A11 6 A32 A42 428 A61 A75 2 A92 A101 1 A122 49 A141 A152 1 A173 1 A192 A201 1
752 | A11 18 A32 A40 976 A61 A72 1 A92 A101 2 A123 23 A143 A152 1 A172 1 A191 A201 2
753 | A12 12 A32 A49 841 A62 A74 2 A92 A101 4 A121 23 A143 A151 1 A172 1 A191 A201 1
754 | A14 30 A34 A43 5771 A61 A74 4 A92 A101 2 A123 25 A143 A152 2 A173 1 A191 A201 1
755 | A14 12 A33 A45 1555 A64 A75 4 A93 A101 4 A124 55 A143 A153 2 A173 2 A191 A201 2
756 | A11 24 A32 A40 1285 A65 A74 4 A92 A101 4 A124 32 A143 A151 1 A173 1 A191 A201 2
757 | A13 6 A34 A40 1299 A61 A73 1 A93 A101 1 A121 74 A143 A152 3 A171 2 A191 A202 1
758 | A13 15 A34 A43 1271 A65 A73 3 A93 A101 4 A124 39 A143 A153 2 A173 1 A192 A201 2
759 | A14 24 A32 A40 1393 A61 A73 2 A93 A103 2 A121 31 A143 A152 1 A173 1 A192 A201 1
760 | A11 12 A34 A40 691 A61 A75 4 A93 A101 3 A122 35 A143 A152 2 A173 1 A191 A201 2
761 | A14 15 A34 A40 5045 A65 A75 1 A92 A101 4 A123 59 A143 A152 1 A173 1 A192 A201 1
762 | A11 18 A34 A42 2124 A61 A73 4 A92 A101 4 A121 24 A143 A151 2 A173 1 A191 A201 2
763 | A11 12 A32 A43 2214 A61 A73 4 A93 A101 3 A122 24 A143 A152 1 A172 1 A191 A201 1
764 | A14 21 A34 A40 12680 A65 A75 4 A93 A101 4 A124 30 A143 A153 1 A174 1 A192 A201 2
765 | A14 24 A34 A40 2463 A62 A74 4 A94 A101 3 A122 27 A143 A152 2 A173 1 A192 A201 1
766 | A12 12 A32 A43 1155 A61 A75 3 A94 A103 3 A121 40 A141 A152 2 A172 1 A191 A201 1
767 | A11 30 A32 A42 3108 A61 A72 2 A91 A101 4 A122 31 A143 A152 1 A172 1 A191 A201 2
768 | A14 10 A32 A41 2901 A65 A72 1 A92 A101 4 A121 31 A143 A151 1 A173 1 A191 A201 1
769 | A12 12 A34 A42 3617 A61 A75 1 A93 A101 4 A123 28 A143 A151 3 A173 1 A192 A201 1
770 | A14 12 A34 A43 1655 A61 A75 2 A93 A101 4 A121 63 A143 A152 2 A172 1 A192 A201 1
771 | A11 24 A32 A41 2812 A65 A75 2 A92 A101 4 A121 26 A143 A151 1 A173 1 A191 A201 1
772 | A11 36 A34 A46 8065 A61 A73 3 A92 A101 2 A124 25 A143 A152 2 A174 1 A192 A201 2
773 | A14 21 A34 A41 3275 A61 A75 1 A93 A101 4 A123 36 A143 A152 1 A174 1 A192 A201 1
774 | A14 24 A34 A43 2223 A62 A75 4 A93 A101 4 A122 52 A141 A152 2 A173 1 A191 A201 1
775 | A13 12 A34 A40 1480 A63 A71 2 A93 A101 4 A124 66 A141 A153 3 A171 1 A191 A201 1
776 | A11 24 A32 A40 1371 A65 A73 4 A92 A101 4 A121 25 A143 A151 1 A173 1 A191 A201 2
777 | A14 36 A34 A40 3535 A61 A74 4 A93 A101 4 A123 37 A143 A152 2 A173 1 A192 A201 1
778 | A11 18 A32 A43 3509 A61 A74 4 A92 A103 1 A121 25 A143 A152 1 A173 1 A191 A201 1
779 | A14 36 A34 A41 5711 A64 A75 4 A93 A101 2 A123 38 A143 A152 2 A174 1 A192 A201 1
780 | A12 18 A32 A45 3872 A61 A71 2 A92 A101 4 A123 67 A143 A152 1 A173 1 A192 A201 1
781 | A12 39 A34 A43 4933 A61 A74 2 A93 A103 2 A121 25 A143 A152 2 A173 1 A191 A201 2
782 | A14 24 A34 A40 1940 A64 A75 4 A93 A101 4 A121 60 A143 A152 1 A173 1 A192 A201 1
783 | A12 12 A30 A48 1410 A61 A73 2 A93 A101 2 A121 31 A143 A152 1 A172 1 A192 A201 1
784 | A12 12 A32 A40 836 A62 A72 4 A92 A101 2 A122 23 A141 A152 1 A172 1 A191 A201 2
785 | A12 20 A32 A41 6468 A65 A71 1 A91 A101 4 A121 60 A143 A152 1 A174 1 A192 A201 1
786 | A12 18 A32 A49 1941 A64 A73 4 A93 A101 2 A122 35 A143 A152 1 A172 1 A192 A201 1
787 | A14 22 A32 A43 2675 A63 A75 3 A93 A101 4 A123 40 A143 A152 1 A173 1 A191 A201 1
788 | A14 48 A34 A41 2751 A65 A75 4 A93 A101 3 A123 38 A143 A152 2 A173 2 A192 A201 1
789 | A12 48 A33 A46 6224 A61 A75 4 A93 A101 4 A124 50 A143 A153 1 A173 1 A191 A201 2
790 | A11 40 A34 A46 5998 A61 A73 4 A93 A101 3 A124 27 A141 A152 1 A173 1 A192 A201 2
791 | A12 21 A32 A49 1188 A61 A75 2 A92 A101 4 A122 39 A143 A152 1 A173 2 A191 A201 2
792 | A14 24 A32 A41 6313 A65 A75 3 A93 A101 4 A123 41 A143 A152 1 A174 2 A192 A201 1
793 | A14 6 A34 A42 1221 A65 A73 1 A94 A101 2 A122 27 A143 A152 2 A173 1 A191 A201 1
794 | A13 24 A32 A42 2892 A61 A75 3 A91 A101 4 A124 51 A143 A153 1 A173 1 A191 A201 1
795 | A14 24 A32 A42 3062 A63 A75 4 A93 A101 3 A124 32 A143 A151 1 A173 1 A192 A201 1
796 | A14 9 A32 A42 2301 A62 A72 2 A92 A101 4 A122 22 A143 A151 1 A173 1 A191 A201 1
797 | A11 18 A32 A41 7511 A65 A75 1 A93 A101 4 A122 51 A143 A153 1 A173 2 A192 A201 2
798 | A14 12 A34 A42 1258 A61 A72 2 A92 A101 4 A122 22 A143 A151 2 A172 1 A191 A201 1
799 | A14 24 A33 A40 717 A65 A75 4 A94 A101 4 A123 54 A143 A152 2 A173 1 A192 A201 1
800 | A12 9 A32 A40 1549 A65 A72 4 A93 A101 2 A121 35 A143 A152 1 A171 1 A191 A201 1
801 | A14 24 A34 A46 1597 A61 A75 4 A93 A101 4 A124 54 A143 A153 2 A173 2 A191 A201 1
802 | A12 18 A34 A43 1795 A61 A75 3 A92 A103 4 A121 48 A141 A151 2 A172 1 A192 A201 1
803 | A11 20 A34 A42 4272 A61 A75 1 A92 A101 4 A122 24 A143 A152 2 A173 1 A191 A201 1
804 | A14 12 A34 A43 976 A65 A75 4 A93 A101 4 A123 35 A143 A152 2 A173 1 A191 A201 1
805 | A12 12 A32 A40 7472 A65 A71 1 A92 A101 2 A121 24 A143 A151 1 A171 1 A191 A201 1
806 | A11 36 A32 A40 9271 A61 A74 2 A93 A101 1 A123 24 A143 A152 1 A173 1 A192 A201 2
807 | A12 6 A32 A43 590 A61 A72 3 A94 A101 3 A121 26 A143 A152 1 A172 1 A191 A202 1
808 | A14 12 A34 A43 930 A65 A75 4 A93 A101 4 A121 65 A143 A152 4 A173 1 A191 A201 1
809 | A12 42 A31 A41 9283 A61 A71 1 A93 A101 2 A124 55 A141 A153 1 A174 1 A192 A201 1
810 | A12 15 A30 A40 1778 A61 A72 2 A92 A101 1 A121 26 A143 A151 2 A171 1 A191 A201 2
811 | A12 8 A32 A49 907 A61 A72 3 A94 A101 2 A121 26 A143 A152 1 A173 1 A192 A201 1
812 | A12 6 A32 A43 484 A61 A74 3 A94 A103 3 A121 28 A141 A152 1 A172 1 A191 A201 1
813 | A11 36 A34 A41 9629 A61 A74 4 A93 A101 4 A123 24 A143 A152 2 A173 1 A192 A201 2
814 | A11 48 A32 A44 3051 A61 A73 3 A93 A101 4 A123 54 A143 A152 1 A173 1 A191 A201 2
815 | A11 48 A32 A40 3931 A61 A74 4 A93 A101 4 A124 46 A143 A153 1 A173 2 A191 A201 2
816 | A12 36 A33 A40 7432 A61 A73 2 A92 A101 2 A122 54 A143 A151 1 A173 1 A191 A201 1
817 | A14 6 A32 A44 1338 A63 A73 1 A91 A101 4 A121 62 A143 A152 1 A173 1 A191 A201 1
818 | A14 6 A34 A43 1554 A61 A74 1 A92 A101 2 A123 24 A143 A151 2 A173 1 A192 A201 1
819 | A11 36 A32 A410 15857 A61 A71 2 A91 A102 3 A123 43 A143 A152 1 A174 1 A191 A201 1
820 | A11 18 A32 A43 1345 A61 A73 4 A94 A101 3 A121 26 A141 A152 1 A173 1 A191 A201 2
821 | A14 12 A32 A40 1101 A61 A73 3 A94 A101 2 A121 27 A143 A152 2 A173 1 A192 A201 1
822 | A13 12 A32 A43 3016 A61 A73 3 A94 A101 1 A123 24 A143 A152 1 A173 1 A191 A201 1
823 | A11 36 A32 A42 2712 A61 A75 2 A93 A101 2 A122 41 A141 A152 1 A173 2 A191 A201 2
824 | A11 8 A34 A40 731 A61 A75 4 A93 A101 4 A121 47 A143 A152 2 A172 1 A191 A201 1
825 | A14 18 A34 A42 3780 A61 A72 3 A91 A101 2 A123 35 A143 A152 2 A174 1 A192 A201 1
826 | A11 21 A34 A40 1602 A61 A75 4 A94 A101 3 A123 30 A143 A152 2 A173 1 A192 A201 1
827 | A11 18 A34 A40 3966 A61 A75 1 A92 A101 4 A121 33 A141 A151 3 A173 1 A192 A201 2
828 | A14 18 A30 A49 4165 A61 A73 2 A93 A101 2 A123 36 A142 A152 2 A173 2 A191 A201 2
829 | A11 36 A32 A41 8335 A65 A75 3 A93 A101 4 A124 47 A143 A153 1 A173 1 A191 A201 2
830 | A12 48 A33 A49 6681 A65 A73 4 A93 A101 4 A124 38 A143 A153 1 A173 2 A192 A201 1
831 | A14 24 A33 A49 2375 A63 A73 4 A93 A101 2 A123 44 A143 A152 2 A173 2 A192 A201 1
832 | A11 18 A32 A40 1216 A61 A72 4 A92 A101 3 A123 23 A143 A151 1 A173 1 A192 A201 2
833 | A11 45 A30 A49 11816 A61 A75 2 A93 A101 4 A123 29 A143 A151 2 A173 1 A191 A201 2
834 | A12 24 A32 A43 5084 A65 A75 2 A92 A101 4 A123 42 A143 A152 1 A173 1 A192 A201 1
835 | A13 15 A32 A43 2327 A61 A72 2 A92 A101 3 A121 25 A143 A152 1 A172 1 A191 A201 2
836 | A11 12 A30 A40 1082 A61 A73 4 A93 A101 4 A123 48 A141 A152 2 A173 1 A191 A201 2
837 | A14 12 A32 A43 886 A65 A73 4 A92 A101 2 A123 21 A143 A152 1 A173 1 A191 A201 1
838 | A14 4 A32 A42 601 A61 A72 1 A92 A101 3 A121 23 A143 A151 1 A172 2 A191 A201 1
839 | A11 24 A34 A41 2957 A61 A75 4 A93 A101 4 A122 63 A143 A152 2 A173 1 A192 A201 1
840 | A14 24 A34 A43 2611 A61 A75 4 A94 A102 3 A121 46 A143 A152 2 A173 1 A191 A201 1
841 | A11 36 A32 A42 5179 A61 A74 4 A93 A101 2 A122 29 A143 A152 1 A173 1 A191 A201 2
842 | A14 21 A33 A41 2993 A61 A73 3 A93 A101 2 A121 28 A142 A152 2 A172 1 A191 A201 1
843 | A14 18 A32 A45 1943 A61 A72 4 A92 A101 4 A121 23 A143 A152 1 A173 1 A191 A201 2
844 | A14 24 A31 A49 1559 A61 A74 4 A93 A101 4 A123 50 A141 A152 1 A173 1 A192 A201 1
845 | A14 18 A32 A42 3422 A61 A75 4 A93 A101 4 A122 47 A141 A152 3 A173 2 A192 A201 1
846 | A12 21 A32 A42 3976 A65 A74 2 A93 A101 3 A123 35 A143 A152 1 A173 1 A192 A201 1
847 | A14 18 A32 A40 6761 A65 A73 2 A93 A101 4 A123 68 A143 A151 2 A173 1 A191 A201 2
848 | A14 24 A32 A40 1249 A61 A72 4 A94 A101 2 A121 28 A143 A152 1 A173 1 A191 A201 1
849 | A11 9 A32 A43 1364 A61 A74 3 A93 A101 4 A121 59 A143 A152 1 A173 1 A191 A201 1
850 | A11 12 A32 A43 709 A61 A75 4 A93 A101 4 A121 57 A142 A152 1 A172 1 A191 A201 2
851 | A11 20 A34 A40 2235 A61 A73 4 A94 A103 2 A122 33 A141 A151 2 A173 1 A191 A202 2
852 | A14 24 A34 A41 4042 A65 A74 3 A93 A101 4 A122 43 A143 A152 2 A173 1 A192 A201 1
853 | A14 15 A34 A43 1471 A61 A73 4 A93 A101 4 A124 35 A143 A153 2 A173 1 A192 A201 1
854 | A11 18 A31 A40 1442 A61 A74 4 A93 A101 4 A124 32 A143 A153 2 A172 2 A191 A201 2
855 | A14 36 A33 A40 10875 A61 A75 2 A93 A101 2 A123 45 A143 A152 2 A173 2 A192 A201 1
856 | A14 24 A32 A40 1474 A62 A72 4 A94 A101 3 A121 33 A143 A152 1 A173 1 A192 A201 1
857 | A14 10 A32 A48 894 A65 A74 4 A92 A101 3 A122 40 A143 A152 1 A173 1 A192 A201 1
858 | A14 15 A34 A42 3343 A61 A73 4 A93 A101 2 A124 28 A143 A153 1 A173 1 A192 A201 1
859 | A11 15 A32 A40 3959 A61 A73 3 A92 A101 2 A122 29 A143 A152 1 A173 1 A192 A201 2
860 | A14 9 A32 A40 3577 A62 A73 1 A93 A103 2 A121 26 A143 A151 1 A173 2 A191 A202 1
861 | A14 24 A34 A41 5804 A64 A73 4 A93 A101 2 A121 27 A143 A152 2 A173 1 A191 A201 1
862 | A14 18 A33 A49 2169 A61 A73 4 A94 A101 2 A123 28 A143 A152 1 A173 1 A192 A201 2
863 | A11 24 A32 A43 2439 A61 A72 4 A92 A101 4 A121 35 A143 A152 1 A173 1 A192 A201 2
864 | A14 27 A34 A42 4526 A64 A72 4 A93 A101 2 A121 32 A142 A152 2 A172 2 A192 A201 1
865 | A14 10 A32 A42 2210 A61 A73 2 A93 A101 2 A121 25 A141 A151 1 A172 1 A191 A201 2
866 | A14 15 A32 A42 2221 A63 A73 2 A92 A101 4 A123 20 A143 A151 1 A173 1 A191 A201 1
867 | A11 18 A32 A43 2389 A61 A72 4 A92 A101 1 A123 27 A142 A152 1 A173 1 A191 A201 1
868 | A14 12 A34 A42 3331 A61 A75 2 A93 A101 4 A122 42 A142 A152 1 A173 1 A191 A201 1
869 | A14 36 A32 A49 7409 A65 A75 3 A93 A101 2 A122 37 A143 A152 2 A173 1 A191 A201 1
870 | A11 12 A32 A42 652 A61 A75 4 A92 A101 4 A122 24 A143 A151 1 A173 1 A191 A201 1
871 | A14 36 A33 A42 7678 A63 A74 2 A92 A101 4 A123 40 A143 A152 2 A173 1 A192 A201 1
872 | A13 6 A34 A40 1343 A61 A75 1 A93 A101 4 A121 46 A143 A152 2 A173 2 A191 A202 1
873 | A11 24 A34 A49 1382 A62 A74 4 A93 A101 1 A121 26 A143 A152 2 A173 1 A192 A201 1
874 | A14 15 A32 A44 874 A65 A72 4 A92 A101 1 A121 24 A143 A152 1 A173 1 A191 A201 1
875 | A11 12 A32 A42 3590 A61 A73 2 A93 A102 2 A122 29 A143 A152 1 A172 2 A191 A201 1
876 | A12 11 A34 A40 1322 A64 A73 4 A92 A101 4 A123 40 A143 A152 2 A173 1 A191 A201 1
877 | A11 18 A31 A43 1940 A61 A72 3 A93 A102 4 A124 36 A141 A153 1 A174 1 A192 A201 1
878 | A14 36 A32 A43 3595 A61 A75 4 A93 A101 2 A123 28 A143 A152 1 A173 1 A191 A201 1
879 | A11 9 A32 A40 1422 A61 A72 3 A93 A101 2 A124 27 A143 A153 1 A174 1 A192 A201 2
880 | A14 30 A34 A43 6742 A65 A74 2 A93 A101 3 A122 36 A143 A152 2 A173 1 A191 A201 1
881 | A14 24 A32 A41 7814 A61 A74 3 A93 A101 3 A123 38 A143 A152 1 A174 1 A192 A201 1
882 | A14 24 A32 A41 9277 A65 A73 2 A91 A101 4 A124 48 A143 A153 1 A173 1 A192 A201 1
883 | A12 30 A34 A40 2181 A65 A75 4 A93 A101 4 A121 36 A143 A152 2 A173 1 A191 A201 1
884 | A14 18 A34 A43 1098 A61 A71 4 A92 A101 4 A123 65 A143 A152 2 A171 1 A191 A201 1
885 | A12 24 A32 A42 4057 A61 A74 3 A91 A101 3 A123 43 A143 A152 1 A173 1 A192 A201 2
886 | A11 12 A32 A46 795 A61 A72 4 A92 A101 4 A122 53 A143 A152 1 A173 1 A191 A201 2
887 | A12 24 A34 A49 2825 A65 A74 4 A93 A101 3 A124 34 A143 A152 2 A173 2 A192 A201 1
888 | A12 48 A32 A49 15672 A61 A73 2 A93 A101 2 A123 23 A143 A152 1 A173 1 A192 A201 2
889 | A14 36 A34 A40 6614 A61 A75 4 A93 A101 4 A123 34 A143 A152 2 A174 1 A192 A201 1
890 | A14 28 A31 A41 7824 A65 A72 3 A93 A103 4 A121 40 A141 A151 2 A173 2 A192 A201 1
891 | A11 27 A34 A49 2442 A61 A75 4 A93 A101 4 A123 43 A142 A152 4 A174 2 A192 A201 1
892 | A14 15 A34 A43 1829 A61 A75 4 A93 A101 4 A123 46 A143 A152 2 A173 1 A192 A201 1
893 | A11 12 A34 A40 2171 A61 A73 4 A93 A101 4 A122 38 A141 A152 2 A172 1 A191 A202 1
894 | A12 36 A34 A41 5800 A61 A73 3 A93 A101 4 A123 34 A143 A152 2 A173 1 A192 A201 1
895 | A14 18 A34 A43 1169 A65 A73 4 A93 A101 3 A122 29 A143 A152 2 A173 1 A192 A201 1
896 | A14 36 A33 A41 8947 A65 A74 3 A93 A101 2 A123 31 A142 A152 1 A174 2 A192 A201 1
897 | A11 21 A32 A43 2606 A61 A72 4 A92 A101 4 A122 28 A143 A151 1 A174 1 A192 A201 1
898 | A14 12 A34 A42 1592 A64 A74 3 A92 A101 2 A122 35 A143 A152 1 A173 1 A191 A202 1
899 | A14 15 A32 A42 2186 A65 A74 1 A92 A101 4 A121 33 A141 A151 1 A172 1 A191 A201 1
900 | A11 18 A32 A42 4153 A61 A73 2 A93 A102 3 A123 42 A143 A152 1 A173 1 A191 A201 2
901 | A11 16 A34 A40 2625 A61 A75 2 A93 A103 4 A122 43 A141 A151 1 A173 1 A192 A201 2
902 | A14 20 A34 A40 3485 A65 A72 2 A91 A101 4 A121 44 A143 A152 2 A173 1 A192 A201 1
903 | A14 36 A34 A41 10477 A65 A75 2 A93 A101 4 A124 42 A143 A153 2 A173 1 A191 A201 1
904 | A14 15 A32 A43 1386 A65 A73 4 A94 A101 2 A121 40 A143 A151 1 A173 1 A192 A201 1
905 | A14 24 A32 A43 1278 A61 A75 4 A93 A101 1 A121 36 A143 A152 1 A174 1 A192 A201 1
906 | A11 12 A32 A43 1107 A61 A73 2 A93 A101 2 A121 20 A143 A151 1 A174 2 A192 A201 1
907 | A11 21 A32 A40 3763 A65 A74 2 A93 A102 2 A121 24 A143 A152 1 A172 1 A191 A202 1
908 | A12 36 A32 A46 3711 A65 A73 2 A94 A101 2 A123 27 A143 A152 1 A173 1 A191 A201 1
909 | A14 15 A33 A41 3594 A61 A72 1 A92 A101 2 A122 46 A143 A152 2 A172 1 A191 A201 1
910 | A12 9 A32 A40 3195 A65 A73 1 A92 A101 2 A121 33 A143 A152 1 A172 1 A191 A201 1
911 | A14 36 A33 A43 4454 A61 A73 4 A92 A101 4 A121 34 A143 A152 2 A173 1 A191 A201 1
912 | A12 24 A34 A42 4736 A61 A72 2 A92 A101 4 A123 25 A141 A152 1 A172 1 A191 A201 2
913 | A12 30 A32 A43 2991 A65 A75 2 A92 A101 4 A123 25 A143 A152 1 A173 1 A191 A201 1
914 | A14 11 A32 A49 2142 A64 A75 1 A91 A101 2 A121 28 A143 A152 1 A173 1 A192 A201 1
915 | A11 24 A31 A49 3161 A61 A73 4 A93 A101 2 A122 31 A143 A151 1 A173 1 A192 A201 2
916 | A12 48 A30 A410 18424 A61 A73 1 A92 A101 2 A122 32 A141 A152 1 A174 1 A192 A202 2
917 | A14 10 A32 A41 2848 A62 A73 1 A93 A102 2 A121 32 A143 A152 1 A173 2 A191 A201 1
918 | A11 6 A32 A40 14896 A61 A75 1 A93 A101 4 A124 68 A141 A152 1 A174 1 A192 A201 2
919 | A11 24 A32 A42 2359 A62 A71 1 A91 A101 1 A122 33 A143 A152 1 A173 1 A191 A201 2
920 | A11 24 A32 A42 3345 A61 A75 4 A93 A101 2 A122 39 A143 A151 1 A174 1 A192 A201 2
921 | A14 18 A34 A42 1817 A61 A73 4 A92 A101 2 A124 28 A143 A152 2 A173 1 A191 A201 1
922 | A14 48 A33 A43 12749 A63 A74 4 A93 A101 1 A123 37 A143 A152 1 A174 1 A192 A201 1
923 | A11 9 A32 A43 1366 A61 A72 3 A92 A101 4 A122 22 A143 A151 1 A173 1 A191 A201 2
924 | A12 12 A32 A40 2002 A61 A74 3 A93 A101 4 A122 30 A143 A151 1 A173 2 A192 A201 1
925 | A11 24 A31 A42 6872 A61 A72 2 A91 A101 1 A122 55 A141 A152 1 A173 1 A192 A201 2
926 | A11 12 A31 A40 697 A61 A72 4 A93 A101 2 A123 46 A141 A152 2 A173 1 A192 A201 2
927 | A11 18 A34 A42 1049 A61 A72 4 A92 A101 4 A122 21 A143 A151 1 A173 1 A191 A201 1
928 | A11 48 A32 A41 10297 A61 A74 4 A93 A101 4 A124 39 A142 A153 3 A173 2 A192 A201 2
929 | A14 30 A32 A43 1867 A65 A75 4 A93 A101 4 A123 58 A143 A152 1 A173 1 A192 A201 1
930 | A11 12 A33 A40 1344 A61 A73 4 A93 A101 2 A121 43 A143 A152 2 A172 2 A191 A201 1
931 | A11 24 A32 A42 1747 A61 A72 4 A93 A102 1 A122 24 A143 A152 1 A172 1 A191 A202 1
932 | A12 9 A32 A43 1670 A61 A72 4 A92 A101 2 A123 22 A143 A152 1 A173 1 A192 A201 2
933 | A14 9 A34 A40 1224 A61 A73 3 A93 A101 1 A121 30 A143 A152 2 A173 1 A191 A201 1
934 | A14 12 A34 A43 522 A63 A75 4 A93 A101 4 A122 42 A143 A152 2 A173 2 A192 A201 1
935 | A11 12 A32 A43 1498 A61 A73 4 A92 A101 1 A123 23 A141 A152 1 A173 1 A191 A201 1
936 | A12 30 A33 A43 1919 A62 A72 4 A93 A101 3 A124 30 A142 A152 2 A174 1 A191 A201 2
937 | A13 9 A32 A43 745 A61 A73 3 A92 A101 2 A121 28 A143 A152 1 A172 1 A191 A201 2
938 | A12 6 A32 A43 2063 A61 A72 4 A94 A101 3 A123 30 A143 A151 1 A174 1 A192 A201 1
939 | A12 60 A32 A46 6288 A61 A73 4 A93 A101 4 A124 42 A143 A153 1 A173 1 A191 A201 2
940 | A14 24 A34 A41 6842 A65 A73 2 A93 A101 4 A122 46 A143 A152 2 A174 2 A192 A201 1
941 | A14 12 A32 A40 3527 A65 A72 2 A93 A101 3 A122 45 A143 A152 1 A174 2 A192 A201 1
942 | A14 10 A32 A40 1546 A61 A73 3 A93 A101 2 A121 31 A143 A152 1 A172 2 A191 A202 1
943 | A14 24 A32 A42 929 A65 A74 4 A93 A101 2 A123 31 A142 A152 1 A173 1 A192 A201 1
944 | A14 4 A34 A40 1455 A61 A74 2 A93 A101 1 A121 42 A143 A152 3 A172 2 A191 A201 1
945 | A11 15 A32 A42 1845 A61 A72 4 A92 A103 1 A122 46 A143 A151 1 A173 1 A191 A201 1
946 | A12 48 A30 A40 8358 A63 A72 1 A92 A101 1 A123 30 A143 A152 2 A173 1 A191 A201 1
947 | A11 24 A31 A42 3349 A63 A72 4 A93 A101 4 A124 30 A143 A153 1 A173 2 A192 A201 2
948 | A14 12 A32 A40 2859 A65 A71 4 A93 A101 4 A124 38 A143 A152 1 A174 1 A192 A201 1
949 | A14 18 A32 A42 1533 A61 A72 4 A94 A102 1 A122 43 A143 A152 1 A172 2 A191 A201 2
950 | A14 24 A32 A43 3621 A62 A75 2 A93 A101 4 A123 31 A143 A152 2 A173 1 A191 A201 2
951 | A12 18 A34 A49 3590 A61 A71 3 A94 A101 3 A123 40 A143 A152 3 A171 2 A192 A201 1
952 | A11 36 A33 A49 2145 A61 A74 2 A93 A101 1 A123 24 A143 A152 2 A173 1 A192 A201 2
953 | A12 24 A32 A41 4113 A63 A72 3 A92 A101 4 A123 28 A143 A151 1 A173 1 A191 A201 2
954 | A14 36 A32 A42 10974 A61 A71 4 A92 A101 2 A123 26 A143 A152 2 A174 1 A192 A201 2
955 | A11 12 A32 A40 1893 A61 A73 4 A92 A103 4 A122 29 A143 A152 1 A173 1 A192 A201 1
956 | A11 24 A34 A43 1231 A64 A75 4 A92 A101 4 A122 57 A143 A151 2 A174 1 A192 A201 1
957 | A13 30 A34 A43 3656 A65 A75 4 A93 A101 4 A122 49 A142 A152 2 A172 1 A191 A201 1
958 | A12 9 A34 A43 1154 A61 A75 2 A93 A101 4 A121 37 A143 A152 3 A172 1 A191 A201 1
959 | A11 28 A32 A40 4006 A61 A73 3 A93 A101 2 A123 45 A143 A152 1 A172 1 A191 A201 2
960 | A12 24 A32 A42 3069 A62 A75 4 A93 A101 4 A124 30 A143 A153 1 A173 1 A191 A201 1
961 | A14 6 A34 A43 1740 A61 A75 2 A94 A101 2 A121 30 A143 A151 2 A173 1 A191 A201 1
962 | A12 21 A33 A40 2353 A61 A73 1 A91 A101 4 A122 47 A143 A152 2 A173 1 A191 A201 1
963 | A14 15 A32 A40 3556 A65 A73 3 A93 A101 2 A124 29 A143 A152 1 A173 1 A191 A201 1
964 | A14 24 A32 A43 2397 A63 A75 3 A93 A101 2 A123 35 A141 A152 2 A173 1 A192 A201 2
965 | A12 6 A32 A45 454 A61 A72 3 A94 A101 1 A122 22 A143 A152 1 A172 1 A191 A201 1
966 | A12 30 A32 A43 1715 A65 A73 4 A92 A101 1 A123 26 A143 A152 1 A173 1 A191 A201 1
967 | A12 27 A34 A43 2520 A63 A73 4 A93 A101 2 A122 23 A143 A152 2 A172 1 A191 A201 2
968 | A14 15 A32 A43 3568 A61 A75 4 A92 A101 2 A123 54 A141 A151 1 A174 1 A192 A201 1
969 | A14 42 A32 A43 7166 A65 A74 2 A94 A101 4 A122 29 A143 A151 1 A173 1 A192 A201 1
970 | A11 11 A34 A40 3939 A61 A73 1 A93 A101 2 A121 40 A143 A152 2 A172 2 A191 A201 1
971 | A12 15 A32 A45 1514 A62 A73 4 A93 A103 2 A121 22 A143 A152 1 A173 1 A191 A201 1
972 | A14 24 A32 A40 7393 A61 A73 1 A93 A101 4 A122 43 A143 A152 1 A172 2 A191 A201 1
973 | A11 24 A31 A40 1193 A61 A71 1 A92 A102 4 A124 29 A143 A151 2 A171 1 A191 A201 2
974 | A11 60 A32 A49 7297 A61 A75 4 A93 A102 4 A124 36 A143 A151 1 A173 1 A191 A201 2
975 | A14 30 A34 A43 2831 A61 A73 4 A92 A101 2 A123 33 A143 A152 1 A173 1 A192 A201 1
976 | A13 24 A32 A43 1258 A63 A73 3 A92 A101 3 A123 57 A143 A152 1 A172 1 A191 A201 1
977 | A12 6 A32 A43 753 A61 A73 2 A92 A103 3 A121 64 A143 A152 1 A173 1 A191 A201 1
978 | A12 18 A33 A49 2427 A65 A75 4 A93 A101 2 A122 42 A143 A152 2 A173 1 A191 A201 1
979 | A14 24 A33 A40 2538 A61 A75 4 A93 A101 4 A123 47 A143 A152 2 A172 2 A191 A201 2
980 | A12 15 A31 A40 1264 A62 A73 2 A94 A101 2 A122 25 A143 A151 1 A173 1 A191 A201 2
981 | A12 30 A34 A42 8386 A61 A74 2 A93 A101 2 A122 49 A143 A152 1 A173 1 A191 A201 2
982 | A14 48 A32 A49 4844 A61 A71 3 A93 A101 2 A123 33 A141 A151 1 A174 1 A192 A201 2
983 | A13 21 A32 A40 2923 A62 A73 1 A92 A101 1 A123 28 A141 A152 1 A174 1 A192 A201 1
984 | A11 36 A32 A41 8229 A61 A73 2 A93 A101 2 A122 26 A143 A152 1 A173 2 A191 A201 2
985 | A14 24 A34 A42 2028 A61 A74 2 A93 A101 2 A122 30 A143 A152 2 A172 1 A191 A201 1
986 | A11 15 A34 A42 1433 A61 A73 4 A92 A101 3 A122 25 A143 A151 2 A173 1 A191 A201 1
987 | A13 42 A30 A49 6289 A61 A72 2 A91 A101 1 A122 33 A143 A152 2 A173 1 A191 A201 1
988 | A14 13 A32 A43 1409 A62 A71 2 A92 A101 4 A121 64 A143 A152 1 A173 1 A191 A201 1
989 | A11 24 A32 A41 6579 A61 A71 4 A93 A101 2 A124 29 A143 A153 1 A174 1 A192 A201 1
990 | A12 24 A34 A43 1743 A61 A75 4 A93 A101 2 A122 48 A143 A152 2 A172 1 A191 A201 1
991 | A14 12 A34 A46 3565 A65 A72 2 A93 A101 1 A122 37 A143 A152 2 A172 2 A191 A201 1
992 | A14 15 A31 A43 1569 A62 A75 4 A93 A101 4 A123 34 A141 A152 1 A172 2 A191 A201 1
993 | A11 18 A32 A43 1936 A65 A74 2 A94 A101 4 A123 23 A143 A151 2 A172 1 A191 A201 1
994 | A11 36 A32 A42 3959 A61 A71 4 A93 A101 3 A122 30 A143 A152 1 A174 1 A192 A201 1
995 | A14 12 A32 A40 2390 A65 A75 4 A93 A101 3 A123 50 A143 A152 1 A173 1 A192 A201 1
996 | A14 12 A32 A42 1736 A61 A74 3 A92 A101 4 A121 31 A143 A152 1 A172 1 A191 A201 1
997 | A11 30 A32 A41 3857 A61 A73 4 A91 A101 4 A122 40 A143 A152 1 A174 1 A192 A201 1
998 | A14 12 A32 A43 804 A61 A75 4 A93 A101 4 A123 38 A143 A152 1 A173 1 A191 A201 1
999 | A11 45 A32 A43 1845 A61 A73 4 A93 A101 4 A124 23 A143 A153 1 A173 1 A192 A201 2
1000 | A12 45 A34 A41 4576 A62 A71 3 A93 A101 4 A123 27 A143 A152 1 A173 1 A191 A201 1
1001 |
--------------------------------------------------------------------------------
/riskModel/data/germancredit.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | import pandas as pd
4 | import pkg_resources
5 | import numpy as np
6 |
7 | class Germancredit(object):
8 | # 所有变量
9 | def __init__(self):
10 | self.all_feature = ['status_of_existing_checking_account', 'duration_in_month', 'credit_history', 'purpose', 'credit_amount',
11 | 'savings_account_and_bonds',
12 | 'present_employment_since', 'installment_rate_in_percentage_of_disposable_income',
13 | 'personal_status_and_sex', 'other_debtors_or_guarantors',
14 | 'present_residence_since', 'property', 'age_in_years', 'other_installment_plans', 'housing',
15 | 'number_of_existing_credits_at_this_bank', 'job',
16 | 'number_of_people_being_liable_to_provide_maintenance_for', 'telephone', 'foreign_worker']
17 | # 类别变量
18 | self.cat_col = ['purpose', 'personal_status_and_sex', 'other_debtors_or_guarantors', 'property', 'other_installment_plans',
19 | 'housing', 'telephone', 'foreign_worker']
20 | # 数值变量
21 | self.num_col = [i for i in self.all_feature if i not in self.cat_col]
22 | # 整型变量
23 | self.int_col = self.cat_col + ['status_of_existing_checking_account', 'credit_history', 'savings_account_and_bonds', 'job']
24 | # 需要处理的数值变量
25 | self.sub_col = ['status_of_existing_checking_account', 'credit_history', 'savings_account_and_bonds',
26 | 'present_employment_since', 'job']
27 | # 需要替换的变量
28 | self.rep_dict = {
29 | 'status_of_existing_checking_account': {4: 0},
30 | 'savings_account_and_bonds': {5: np.nan},
31 | 'purpose': {'A124': np.nan}
32 | }
33 |
34 | def get_data(self):
35 | DATA_FILE = pkg_resources.resource_filename('riskModel', 'data/germancredit.csv')
36 | data = pd.read_csv(DATA_FILE,encoding='utf-8', sep=' ', header=None,names= self.all_feature + ['target'])
37 | return data
38 |
39 | def get_describe(self):
40 | DATA_FILE = pkg_resources.resource_filename('riskModel', 'data/german.txt')
41 | with open(DATA_FILE,'r+') as f:
42 | print(f.read())
43 |
--------------------------------------------------------------------------------
/riskModel/utils/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huangxianyang/risk-model/468b57af341f6f9e887d284cc551b2428f709fe3/riskModel/utils/.DS_Store
--------------------------------------------------------------------------------
/riskModel/utils/PltFunction.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """
3 | 画图函数
4 | """
5 |
6 | import numpy as np
7 | import matplotlib.pyplot as plt
8 | plt.rcParams['backend'] = 'Agg'
9 | import seaborn as sns
10 | from sklearn.metrics import roc_curve,confusion_matrix,auc
11 | import itertools
12 | from .tools import best_prob
13 |
14 | class PlotFeatureEn(object):
15 | """特征工程作图函数"""
16 |
17 | def draw_IV(self,IV_dict, path, xlabel=None, figsize=(15, 7), is_save=False):
18 | """
19 | 信息值IV柱状图
20 | ---------------------
21 | param
22 | IV_dict: dict IV值字典
23 | path: str 文件存储地址
24 | xlabel: list x轴标签
25 | figsize: tupe 图片大小
26 | _____________________
27 | return
28 | draw_iv
29 | """
30 | IV_dict_sorted = sorted(IV_dict.items(), key=lambda x: x[1], reverse=True)
31 | ivlist = [i[1] for i in IV_dict_sorted]
32 | index = [i[0] for i in IV_dict_sorted]
33 | fig1 = plt.figure(figsize=figsize)
34 | ax1 = fig1.add_subplot(1, 1, 1)
35 | x = np.arange(len(index)) + 1
36 | ax1.bar(x, ivlist, width=0.5) # 生成柱状图
37 | ax1.set_xticks(x)
38 | if xlabel:
39 | ax1.set_xticklabels(index, rotation=0, fontsize=8)
40 |
41 | ax1.set_ylabel('IV(Information Value)', fontsize=14)
42 | # 在柱状图上添加数字标签
43 | for a, b in zip(x, ivlist):
44 | plt.text(a, b + 0.01, '%.4f' % b, ha='center', va='bottom', fontsize=10)
45 |
46 | if is_save:
47 | plt.savefig(path + "high_iv.png")
48 | plt.show()
49 | plt.close()
50 |
51 | def draw_importance(self,importance, features, figsize, path):
52 | """特征重要度"""
53 | plt.style.use('fivethirtyeight')
54 | plt.rcParams['figure.figsize'] = figsize
55 | sns.set_style("darkgrid", {"font.sans-serif": ["simhei", "Arial"]})
56 | indices = np.argsort(importance)[::-1]
57 | plt.figure(figsize=figsize)
58 | plt.title("feature importance")
59 | plt.bar(range(len(indices)), importance[indices], color='lightblue', align="center")
60 | plt.step(range(len(indices)), np.cumsum(importance[indices]), where='mid', label='Cumulative')
61 | plt.xticks(range(len(indices)), features[indices], rotation='vertical', fontsize=14)
62 | plt.xlim([-1, len(indices)])
63 | plt.savefig(path + "feature_importance.png")
64 | plt.show()
65 | plt.close()
66 |
67 | def draw_corr(self,df, figsize: tuple, path: str):
68 | """
69 | 特征相关系数
70 | ------------------------
71 | parameter:
72 | data_new: dataFrame,columns must be number
73 | figsize: tupe,two number
74 | return:
75 | heatmap
76 | """
77 | # 相关系数分析
78 | colormap = plt.cm.viridis
79 | plt.figure(figsize=figsize)
80 | plt.title('皮尔森相关性系数', y=1.05, size=8)
81 | mask = np.zeros_like(df.corr(), dtype=np.bool)
82 | mask[np.triu_indices_from(mask)] = True
83 | sns.heatmap(df.corr(), linewidths=0.1, vmax=1.0, square=True, cmap=colormap, linecolor='white', annot=True,
84 | mask=mask)
85 | plt.savefig(path + "feature_corr.png")
86 | plt.show()
87 | plt.close()
88 |
89 | class PlotModel(object):
90 | """模型作图"""
91 | def __init__(self,y_true,y_prob):
92 | """
93 | :param y_true:array, 真实y
94 | :param y_prob: array, 预测概率y
95 | """
96 | self.y_true = y_true
97 | self.y_prob = y_prob
98 |
99 | def plot_roc_curve(self,filename='./'):
100 | """
101 | """
102 | fpr, tpr, _ = roc_curve(self.y_true, self.y_prob)
103 | c_stats = auc(fpr, tpr)
104 | plt.plot([0, 1], [0, 1], 'r--')
105 | plt.plot(fpr, tpr, label="ROC curve")
106 | auc_value = "AUC = %.3f" % c_stats
107 | plt.text(0.8, 0.2, auc_value, bbox=dict(facecolor='r', alpha=0.5))
108 | plt.xlabel('False positive rate') # 假正率
109 | plt.ylabel('True positive rate') # 真正率
110 | plt.title('ROC curve') # ROC 曲线
111 | plt.legend(loc='best')
112 | plt.savefig(filename+"roc_curve.png")
113 | plt.show()
114 | plt.close()
115 | return auc_value
116 |
117 | def plot_ks_curve(self,filename='./'):
118 | """
119 | """
120 | fpr, tpr, thr = roc_curve(self.y_true, self.y_prob) # 假正率 真正率 概率阈值
121 | thr = np.array(sorted(thr))
122 | ks = abs(fpr - tpr) # ks 序列
123 | ks_value = "KS = %.3f" % max(ks) # ks值
124 | cut_prob = best_prob(self.y_true, self.y_prob) # 最佳切分概率
125 | plt.plot(thr, fpr, label='cum_good', color='blue', linestyle='-', linewidth=2) # 假正率 累计好
126 | plt.plot(thr, tpr, label='cum_bad', color='red', linestyle='-', linewidth=2) # 真正率,累计坏
127 | plt.plot(thr, ks, label='ks', color='green', linestyle='-', linewidth=2) # ks曲线
128 | plt.plot(thr, [max(ks)] * len(thr), color='green', linestyle='--') # ks值直线
129 | plt.axvline(cut_prob, color='gray', linestyle='--') # 最佳切分概率直线
130 | plt.title('{}'.format(ks_value), fontsize=15)
131 | plt.xlim((0.0, 1))
132 | plt.savefig(filename+"ks_curve.png") # 保存
133 | plt.show()
134 | plt.close()
135 | return ks_value
136 |
137 | def plot_confusion_matrix(self,labels:list,normalize=False,filename='./'):
138 | """
139 | 混淆矩阵
140 | ------------------------------------------
141 | Params
142 | labels: list, labels class
143 | normalize: bool, True means trans results to percent
144 | """
145 | cut_prob = best_prob(self.y_true, self.y_prob) # 最佳切分概率
146 | y_pred = np.array([1 if i >= cut_prob else 0 for i in self.y_prob])
147 | matrix = confusion_matrix(y_true=self.y_true, y_pred=y_pred, labels=labels)
148 | plt.imshow(matrix, interpolation='nearest', cmap=plt.cm.Blues_r) # 在指定的轴上展示图像
149 | plt.colorbar() # 增加色柱
150 | tick_marks = np.arange(len(labels))
151 | plt.xticks(tick_marks, labels, rotation=45) # 设置坐标轴标签
152 | plt.yticks(tick_marks, labels)
153 |
154 | if normalize:
155 | matrix = matrix.astype('float') / matrix.sum(axis=1)[:, np.newaxis]
156 | thresh = matrix.max() / 2.
157 | for i, j in itertools.product(range(matrix.shape[0]), range(matrix.shape[1])):
158 | plt.text(j, i, matrix[i, j], fontsize=12,
159 | horizontalalignment="center",
160 | color="white" if matrix[i, j] > thresh else "black")
161 |
162 | plt.tight_layout()
163 | plt.ylabel('True')
164 | plt.xlabel('Predicted')
165 | plt.title("confusion matrix")
166 | plt.savefig(filename+"matrix.png")
167 | plt.show()
168 | plt.close()
--------------------------------------------------------------------------------
/riskModel/utils/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huangxianyang/risk-model/468b57af341f6f9e887d284cc551b2428f709fe3/riskModel/utils/__init__.py
--------------------------------------------------------------------------------
/riskModel/utils/__pycache__/PltFunction.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huangxianyang/risk-model/468b57af341f6f9e887d284cc551b2428f709fe3/riskModel/utils/__pycache__/PltFunction.cpython-37.pyc
--------------------------------------------------------------------------------
/riskModel/utils/__pycache__/__init__.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huangxianyang/risk-model/468b57af341f6f9e887d284cc551b2428f709fe3/riskModel/utils/__pycache__/__init__.cpython-37.pyc
--------------------------------------------------------------------------------
/riskModel/utils/__pycache__/tools.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huangxianyang/risk-model/468b57af341f6f9e887d284cc551b2428f709fe3/riskModel/utils/__pycache__/tools.cpython-37.pyc
--------------------------------------------------------------------------------
/riskModel/utils/btl/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huangxianyang/risk-model/468b57af341f6f9e887d284cc551b2428f709fe3/riskModel/utils/btl/.DS_Store
--------------------------------------------------------------------------------
/riskModel/utils/btl/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huangxianyang/risk-model/468b57af341f6f9e887d284cc551b2428f709fe3/riskModel/utils/btl/__init__.py
--------------------------------------------------------------------------------
/riskModel/utils/btl/__pycache__/__init__.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huangxianyang/risk-model/468b57af341f6f9e887d284cc551b2428f709fe3/riskModel/utils/btl/__pycache__/__init__.cpython-37.pyc
--------------------------------------------------------------------------------
/riskModel/utils/btl/__pycache__/merge.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huangxianyang/risk-model/468b57af341f6f9e887d284cc551b2428f709fe3/riskModel/utils/btl/__pycache__/merge.cpython-37.pyc
--------------------------------------------------------------------------------
/riskModel/utils/btl/__pycache__/monotous.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huangxianyang/risk-model/468b57af341f6f9e887d284cc551b2428f709fe3/riskModel/utils/btl/__pycache__/monotous.cpython-37.pyc
--------------------------------------------------------------------------------
/riskModel/utils/btl/merge.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """
3 | 单调性检验之合并,分箱
4 | """
5 |
6 | from .monotous import (_FeatureMonotone,_BinBadRate,_BadRateMonotone,_AssignBin)
7 | import numpy as np
8 |
9 | def monotone_merge(df, target, col):
10 | '''
11 | 合并方案
12 | :return:将数据集df中,不满足坏样本率单调性的变量col进行合并,使得合并后的新的变量中,坏样本率单调,输出合并方案。
13 | 例如,col=[Bin0, Bin1, Bin2, Bin3, Bin4]是不满足坏样本率单调性的。合并后的col是:
14 | [Bin0&Bin1, Bin2, Bin3, Bin4].
15 | 合并只能在相邻的箱中进行。
16 | 迭代地寻找最优合并方案。每一步迭代时,都尝试将所有非单调的箱进行合并,每一次尝试的合并都是跟前后箱进行合并再做比较
17 | '''
18 | def _merge_matrix(m, i,j,k):
19 | '''
20 | :param m: 需要合并行的矩阵
21 | :param i,j: 合并第i和j行
22 | :param k: 删除第k行
23 | :return: 合并后的矩阵
24 | '''
25 | m[i, :] = m[i, :] + m[j, :]
26 | m = np.delete(m, k, axis=0)
27 | return m
28 |
29 | def _merge_adjacent_rows(i, bad_by_bin_current, bins_list_current, not_monotone_count_current):
30 | '''
31 | :param i: 需要将第i行与前、后的行分别进行合并,比较哪种合并方案最佳。判断准则是,合并后非单调性程度减轻,且更加均匀
32 | :param bad_by_bin_current:合并前的分箱矩阵,包括每一箱的样本个数、坏样本个数和坏样本率
33 | :param bins_list_current: 合并前的分箱方案
34 | :param not_monotone_count_current:合并前的非单调性元素个数
35 | :return:分箱后的分箱矩阵、分箱方案、非单调性元素个数和衡量均匀性的指标balance
36 | '''
37 | i_prev = i - 1
38 | i_next = i + 1
39 | bins_list = bins_list_current.copy()
40 | bad_by_bin = bad_by_bin_current.copy()
41 | #合并方案a:将第i箱与前一箱进行合并
42 | bad_by_bin2a = _merge_matrix(bad_by_bin.copy(), i_prev, i, i)
43 | bad_by_bin2a[i_prev, -1] = bad_by_bin2a[i_prev, -2] / bad_by_bin2a[i_prev, -3]
44 | not_monotone_count2a = _FeatureMonotone(bad_by_bin2a[:, -1])['count_of_nonmonotone']
45 | # 合并方案b:将第i行与后一行进行合并
46 | bad_by_bin2b = _merge_matrix(bad_by_bin.copy(), i, i_next, i_next)
47 | bad_by_bin2b[i, -1] = bad_by_bin2b[i, -2] / bad_by_bin2b[i, -3]
48 | not_monotone_count2b = _FeatureMonotone(bad_by_bin2b[:, -1])['count_of_nonmonotone']
49 | # balance = ((bad_by_bin[:, 1] / N).T * (bad_by_bin[:, 1] / N))[0, 0]
50 | balance_a = ((bad_by_bin2a[:, 1] / N).T * (bad_by_bin2a[:, 1] / N))[0, 0]
51 | balance_b = ((bad_by_bin2b[:, 1] / N).T * (bad_by_bin2b[:, 1] / N))[0, 0]
52 | # 满足下述2种情况时返回方案a:(1)方案a能减轻非单调性而方案b不能;(2)方案a和b都能减轻非单调性,但是方案a的样本均匀性优于方案b
53 | if not_monotone_count2a < not_monotone_count_current and not_monotone_count2b >= not_monotone_count_current or \
54 | not_monotone_count2a < not_monotone_count_current and not_monotone_count2b < not_monotone_count_current and balance_a < balance_b:
55 | bins_list[i_prev] = bins_list[i_prev] + bins_list[i]
56 | bins_list.remove(bins_list[i])
57 | bad_by_bin = bad_by_bin2a
58 | not_monotone_count = not_monotone_count2a
59 | balance = balance_a
60 | # 同样地,满足下述2种情况时返回方案b:(1)方案b能减轻非单调性而方案a不能;(2)方案a和b都能减轻非单调性,但是方案b的样本均匀性优于方案a
61 | elif not_monotone_count2a >= not_monotone_count_current and not_monotone_count2b < not_monotone_count_current or \
62 | not_monotone_count2a < not_monotone_count_current and not_monotone_count2b < not_monotone_count_current and balance_a > balance_b:
63 | bins_list[i] = bins_list[i] + bins_list[i_next]
64 | bins_list.remove(bins_list[i_next])
65 | bad_by_bin = bad_by_bin2b
66 | not_monotone_count = not_monotone_count2b
67 | balance = balance_b
68 | # 如果方案a和b都不能减轻非单调性,返回均匀性更优的合并方案
69 | else:
70 | if balance_a< balance_b:
71 | bins_list[i] = bins_list[i] + bins_list[i_next]
72 | bins_list.remove(bins_list[i_next])
73 | bad_by_bin = bad_by_bin2b
74 | not_monotone_count = not_monotone_count2b
75 | balance = balance_b
76 | else:
77 | bins_list[i] = bins_list[i] + bins_list[i_next]
78 | bins_list.remove(bins_list[i_next])
79 | bad_by_bin = bad_by_bin2b
80 | not_monotone_count = not_monotone_count2b
81 | balance = balance_b
82 | return {'bins_list': bins_list, 'bad_by_bin': bad_by_bin, 'not_monotone_count': not_monotone_count,
83 | 'balance': balance}
84 |
85 |
86 | N = df.shape[0]
87 | [badrate_bin, bad_by_bin] = _BinBadRate(df, col, target)
88 | bins = list(bad_by_bin[col])
89 | bins_list = [[i] for i in bins]
90 | badRate = sorted(badrate_bin.items(), key=lambda x: x[0])
91 | badRate = [i[1] for i in badRate]
92 | not_monotone_count, not_monotone_position = _FeatureMonotone(badRate)['count_of_nonmonotone'], _FeatureMonotone(badRate)['index_of_nonmonotone']
93 | # 迭代地寻找最优合并方案,终止条件是:当前的坏样本率已经单调,或者当前只有2箱
94 | while (not_monotone_count > 0 and len(bins_list)>2):
95 | # 当非单调的箱的个数超过1个时,每一次迭代中都尝试每一个箱的最优合并方案
96 | all_possible_merging = []
97 | for i in not_monotone_position:
98 | merge_adjacent_rows = _merge_adjacent_rows(i, np.mat(bad_by_bin), bins_list, not_monotone_count)
99 | all_possible_merging.append(merge_adjacent_rows)
100 | balance_list = [i['balance'] for i in all_possible_merging]
101 | not_monotone_count_new = [i['not_monotone_count'] for i in all_possible_merging]
102 | # 如果所有的合并方案都不能减轻当前的非单调性,就选择更加均匀的合并方案
103 | if min(not_monotone_count_new) >= not_monotone_count:
104 | best_merging_position = balance_list.index(min(balance_list))
105 | # 如果有多个合并方案都能减轻当前的非单调性,也选择更加均匀的合并方案
106 | else:
107 | better_merging_index = [i for i in range(len(not_monotone_count_new)) if not_monotone_count_new[i] < not_monotone_count]
108 | better_balance = [balance_list[i] for i in better_merging_index]
109 | best_balance_index = better_balance.index(min(better_balance))
110 | best_merging_position = better_merging_index[best_balance_index]
111 | bins_list = all_possible_merging[best_merging_position]['bins_list']
112 | bad_by_bin = all_possible_merging[best_merging_position]['bad_by_bin']
113 | not_monotone_count = all_possible_merging[best_merging_position]['not_monotone_count']
114 | not_monotone_position = _FeatureMonotone(bad_by_bin[:, 3])['index_of_nonmonotone']
115 | return bins_list
116 |
117 |
118 | def monotonous_bin(df,col,cutOffPoints,target,special_values):
119 |
120 | #单调性检验
121 | var_cutoff = {}
122 | col1 = col + '_Bin' # 检验单调性
123 | df[col1] = df[col].map(lambda x: _AssignBin(x, cutOffPoints=cutOffPoints,special_attribute=special_values))
124 | BRM = _BadRateMonotone(df, col1, target, special_attribute=special_values) # 是否单调
125 | if not BRM:
126 | # 合并方案
127 | if special_values == []:
128 | bin_merged = monotone_merge(df, target, col1)
129 | removed_index = []
130 | for bin in bin_merged:
131 | if len(bin) > 1:
132 | indices = [int(b.replace('Bin', '')) for b in bin]
133 | removed_index = removed_index + indices[0:-1]
134 | removed_point = [cutOffPoints[k] for k in range(len(cutOffPoints)) if k in removed_index]
135 | # removed_point = [cutOffPoints[k] for k in removed_index]
136 | for p in removed_point:
137 | cutOffPoints.remove(p)
138 | var_cutoff[col] = cutOffPoints
139 | else:
140 | cutOffPoints2 = [i for i in cutOffPoints if i not in special_values]
141 | temp = df.loc[~df[col].isin(special_values)]
142 | bin_merged = monotone_merge(temp, target, col1)
143 | removed_index = []
144 | for bin in bin_merged:
145 | if len(bin) > 1:
146 | indices = [int(b.replace('Bin', '')) for b in bin]
147 | removed_index = removed_index + indices[0:-1]
148 | # print("removed_index:",removed_index) # 调试
149 | # print("cutOffPoints2:",cutOffPoints2) # 调试
150 | removed_point = [cutOffPoints2[k] for k in range(len(cutOffPoints2)) if k in removed_index]
151 | # removed_point = [cutOffPoints2[k] for k in removed_index]
152 | for p in removed_point:
153 | cutOffPoints2.remove(p)
154 | # cutOffPoints2 = cutOffPoints2 + special_values
155 | var_cutoff[col] = cutOffPoints2 # 单调性检验结果
156 | return var_cutoff
157 |
--------------------------------------------------------------------------------
/riskModel/utils/btl/monotous.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """
3 | 单调性检验工具
4 | """
5 |
6 | import pandas as pd
7 |
8 |
9 | def _AssignBin(x, cutOffPoints, special_attribute=None):
10 |
11 | '''
12 | 分箱转换
13 | :param x: 某个变量的某个取值
14 | :param cutOffPoints: list 上述变量的分箱结果,用切分点表示
15 | :param special_attribute:list 不参与分箱的特殊取值
16 | :return: 分箱后的对应的第几个箱,从0开始
17 | 例如, cutOffPoints = [10,20,30], 对于 x = 7, 返回 Bin0;对于x=23,返回Bin2; 对于x = 35, return Bin3。
18 | 对于特殊值,返回的序列数前加"-"
19 | '''
20 | cutOffPoints2 = [i for i in cutOffPoints if i not in special_attribute]
21 | numBin = len(cutOffPoints2)
22 | if x in special_attribute:
23 | i = special_attribute.index(x)+1
24 | return 'Bin{}'.format(0-i)
25 | if x<=cutOffPoints2[0]:
26 | return 'Bin0'
27 | elif x > cutOffPoints2[-1]:
28 | return 'Bin{}'.format(numBin)
29 | else:
30 | for i in range(0,numBin):
31 | if cutOffPoints2[i] < x <= cutOffPoints2[i+1]:
32 | return 'Bin{}'.format(i+1)
33 |
34 |
35 | def _FeatureMonotone(x):
36 | '''
37 | 检验BadRate单调性
38 | Param x: list cut off list
39 | :return: 返回序列x中有几个元素不满足单调性,以及这些元素的位置。
40 | 例如,x=[1,3,2,5], 元素3比前后两个元素都大,不满足单调性;元素2比前后两个元素都小,也不满足单调性。
41 | 故返回的不满足单调性的元素个数为2,位置为1和2.
42 | '''
43 | monotone = [x[i]x[i+1] and x[i] > x[i-1] for i in range(1,len(x)-1)]
44 | index_of_nonmonotone = [i+1 for i in range(len(monotone)) if monotone[i]]
45 | return {'count_of_nonmonotone':monotone.count(True), 'index_of_nonmonotone':index_of_nonmonotone}
46 |
47 |
48 | def _BinBadRate(df, col, target, grantRateIndicator=0):
49 | '''
50 | 标签类别计数统计
51 | :param df: 需要计算好坏比率的数据集
52 | :param col: 需要计算好坏比率的特征
53 | :param target: 好坏标签
54 | :param grantRateIndicator: 1返回总体的坏样本率,0不返回
55 | :return: 每箱的坏样本率,以及总体的坏样本率(当grantRateIndicator==1时)
56 | '''
57 | total = df.groupby([col])[target].count()
58 | total = pd.DataFrame({'total': total})
59 | bad = df.groupby([col])[target].sum()
60 | bad = pd.DataFrame({'bad': bad})
61 | regroup = total.merge(bad, left_index=True, right_index=True, how='left')
62 | regroup.reset_index(drop=False, inplace=True)
63 | regroup['bad_rate'] = regroup.apply(lambda x: x.bad / x.total, axis=1)
64 | dicts = dict(zip(regroup[col],regroup['bad_rate']))
65 | if grantRateIndicator==0:
66 | return (dicts, regroup)
67 | N = sum(regroup['total'])
68 | B = sum(regroup['bad'])
69 | overallRate = B * 1.0 / N
70 | return (dicts, regroup, overallRate)
71 |
72 | def _BadRateMonotone(df, sortByVar, target,special_attribute = []):
73 | '''
74 | 返回是否单调结果
75 | :param df: 包含检验坏样本率的变量,和目标变量
76 | :param sortByVar: 需要检验坏样本率的变量
77 | :param target: 目标变量,0、1表示好、坏
78 | :param special_attribute: 不参与检验的特殊值
79 | :return: 坏样本率单调与否
80 | '''
81 | df2 = df.loc[~df[sortByVar].isin(special_attribute)]
82 | if len(set(df2[sortByVar])) <= 2:
83 | return True
84 | regroup = _BinBadRate(df2, sortByVar, target)[1]
85 | combined = zip(regroup['total'],regroup['bad'])
86 | badRate = [x[1]*1.0/x[0] for x in combined]
87 | badRateNotMonotone = _FeatureMonotone(badRate)['count_of_nonmonotone']
88 | if badRateNotMonotone > 0:
89 | return False
90 | else:
91 | return True
--------------------------------------------------------------------------------
/riskModel/utils/tools.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """
3 | 小工具类
4 | """
5 | import math
6 | import pandas as pd
7 | import numpy as np
8 | from sklearn.metrics import roc_curve,auc,f1_score,recall_score,precision_score,accuracy_score
9 |
10 | def Prob2Score(prob,basePoint=600,PDO=50,odds=20):
11 | # 将概率转化成分数且为正整数
12 | y = np.log(prob/(1-prob))
13 | a = basePoint - y * np.log(odds)
14 | y2 = a - PDO/np.log(2)*(y)
15 | score = y2.astype('int')
16 | return score
17 |
18 | def str2num(s):
19 | """
20 | 字符转换为数字
21 | """
22 | try:
23 | if '.' in str(s):
24 | return float(s)
25 | else:
26 | return int(s)
27 | except:
28 | return s
29 |
30 | def feature_subgroup(df, index,columns):
31 |
32 | """
33 | 特征分组
34 | :param index:list
35 | :param columns:list
36 | :return: df
37 | """
38 | g = df.groupby(index).agg({col: 'nunique' for col in columns})
39 | if g[g > 1].dropna().shape[0] != 0:
40 | print("index非唯一值.")
41 | return df.groupby(index).agg({col: 'max' for col in columns})
42 |
43 | def groupby_key(df,user_id,content,label):
44 | """
45 | 根据user_id 合并content 和label列
46 | :param data: dataframe
47 | :param user_id:
48 | :param content: 文本列
49 | :param label:目标文件
50 | :return: dataframe
51 | """
52 | df[content] = df[content].astype("str")
53 | content_Series = df.groupby(by=user_id)[content].sum()
54 | content_df = pd.DataFrame({"user_id":content_Series.index,"content":content_Series.values})
55 | label_df = df[[user_id,label]].drop_duplicates()
56 | df= pd.merge(content_df,label_df,on=user_id,how="inner")
57 | return df
58 |
59 |
60 | def best_prob(y_true,y_prob):
61 | """
62 | cut best prob
63 | :param y_prob: y of prediction
64 | :param y_true: real y
65 | :return: ks_value and draw ks
66 | """
67 | fpr, tpr, thr = roc_curve(y_true, y_prob)
68 | max_ks = 0
69 | cut_prob = 0.5
70 | for i in range(len(thr)):
71 | if abs(fpr[i] - tpr[i]) > max_ks:
72 | max_ks = abs(fpr[i] - tpr[i])
73 | cut_prob = thr[i]
74 | return cut_prob
75 |
76 | def model_norm(y_true,y_prob):
77 | """
78 | 计算模型指标,auc,ks,f1,recall,precision,accuracy,cut_prob
79 | :param y_true:like-array
80 | :param y_prob:like-array
81 | :return:norm dict
82 | """
83 | norm = dict()
84 | fpr, tpr, thr = roc_curve(y_true, y_prob)
85 | KS = 0
86 | cut_prob = 0.5
87 | for i in range(len(thr)):
88 | if abs(fpr[i] - tpr[i]) > KS:
89 | KS = abs(fpr[i] - tpr[i])
90 | cut_prob = thr[i]
91 | norm["AUC"] = auc(fpr, tpr)
92 | norm["KS"] = KS
93 | norm["cut_prob"] = cut_prob
94 | y_pred = np.array([1 if i > cut_prob else 0 for i in y_prob])
95 | norm["recall"] = recall_score(y_true=y_true,y_pred=y_pred,pos_label=1,average='binary')
96 | norm["precision"] = precision_score(y_true=y_true,y_pred=y_pred,pos_label=1,average='binary')
97 | norm["accuracy"] = accuracy_score(y_true=y_true,y_pred=y_pred)
98 | norm["f1"] = f1_score(y_true=y_true,y_pred=y_pred,pos_label=1,average='binary')
99 | return norm
100 |
101 | def calculate_AIC(X,y_true,y_prob):
102 | """
103 | 赤池信息准则AIC计算
104 | :param X: like-array
105 | :param y_true:like-array
106 | :param y_prob:like-array
107 | :return: float AIC
108 | """
109 | aic = 2 * X.shape[1] + X.shape[0] * math.log(pow(y_true - y_prob,2).sum() / X.shape[1])
110 | return aic
111 |
112 |
113 |
114 |
115 |
--------------------------------------------------------------------------------
/setup.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | #############################################
4 | # Author: huangsir
5 | # Mail: hxysir@163.com
6 | # Created Time: 2019-10-22 18:00
7 | #############################################
8 |
9 | from setuptools import setup,find_packages
10 |
11 | setup(
12 | name = "riskModel",
13 | version = "1.0.6",
14 | author="huangsir",
15 | author_email="hxysir@163.com",
16 | url = "https://github.com/huangxianyang/risk-model",
17 | license = "MIT License",
18 | description = "build credit score model",
19 | long_description = "build rsik score model, including eda, preprocessing, featureengineering, trainmodel, riskstragety eg.",
20 | platforms = "any",
21 | keywords = ["pip", "EDA","Preprocessing", "FeatureEngineering", "Modeling","RiskStragety"],
22 |
23 | packages = find_packages(),# 所有包含__init__.py文件的目录
24 | package_data={'riskModel':['data/*.csv','data/*.txt']},
25 | # include_package_data = True,
26 | install_requires = ['pandas-profiling>=2.4.0','numpy>=1.18.1',
27 | 'matplotlib>=3.1.3','pandas>=1.0.3','scikit-learn>=0.23.1','imbalanced-learn==0.5.0',
28 | 'statsmodels>=0.11.1','scorecardpy>=0.1.9.2','seaborn>=0.10.1','scipy>=1.4.1','toad>=0.0.60'
29 | ]
30 | )
--------------------------------------------------------------------------------