挑战五
构建信用评分预测分类模型
信用评分预测任务
问题
- 对于分类问题,可以在统计学函数
pandas.Series.value_counts()
中传入normalize=True
参数,Pandas 会帮我们将数据标准化为比例,不需要由我们执行series.value_counts() / len(series)
的操作。
区间估计
-
问题:对延迟还款的客户的平均年龄进行间隔估计,置信水平设为 90%。区间估计结果是多少?
# 指定随机种子 np.random.seed(0) def bootstrap_samples(data: np.ndarray, n_samples: np.int): """ 用 BootStrap 法生成样本 Parameters ---------- data: np.ndarray 用于抽样的原始数据集 n_samples: np.int 生成样本的数据量 Returns ------- bs_data: np.ndarray 抽样完成后的数据集 """ indices = np.random.randint(0, data.shape[0], (n_samples, data.shape[0])) return data[indices] def stat_intervals(stat: np.ndarray, alpha: np.float): """ 执行区间估计 Parameters ---------- stat: np.ndarray 数据集 alpha: np.float 1 - 置信度 """ return np.percentile( stat, [100 * alpha / 2, 100 * (1 - alpha / 2)] ) # 获取违约用户的年龄数据 churn = data[data['SeriousDlqin2yrs'] == 1]['age'].values churn_mean_scores = [np.mean(sample) for sample in bootstrap_samples(churn, 1000)] print('平均值的置信区间为', stat_intervals(churn_mean_scores, 0.1))
平均值间隔估计的流程:
- 对原始数据集进行 Bootstrap 抽样
- 对抽样后的扩增数据集分别求平均值,生成由平均值组成的新数据集
- 使用
numpy.percentile()
获取置信区间边界
逻辑回归分类器
-
问题:请使用
scoring='roc_auc'
作为评估指标,并运用网格搜索方法来搜索最佳 C 参数,最优值为多少?grid_search = GridSearchCV( estimator=lr, param_grid=parameters, scoring='roc_auc', n_jobs=-1, cv=skf, verbose=2, return_train_score=True ) grid_search.fit(X, y)
-
问题:如果模型测试集上的标准差小于 0.005,则认为模型是稳定的。上面得到的最佳 C 值能否保证模型稳定?
# 三个正则化参数对应的测试集评分标准差 grid_search.cv_results_['std_test_score']
我们得到的 3 个值都大于 0.005 ,因此用于网格搜索的 3 个正则化系数都无法保证模型稳定。
特征重要性
-
问题:特征重要性由其相应系数的绝对值定义。首先,您需要使用
StandardScaler
规范化所有特征值以便于正确比较。那么,上面得到的最佳逻辑回归模型中,哪个特征最为重要?from sklearn.preprocessing import StandardScaler # 标准规范化 X_scaled = StandardScaler().fit_transform(X) # 构建并训练逻辑回归模型 lr = LogisticRegression(C=0.001, random_state=5, class_weight='balanced') lr.fit(X_scaled, y) # 导出特征相关性排名 pd.DataFrame({ 'Feature': independent_columns_names, 'Coefficent': lr.coef_.flatten() }).sort_values(by='Coefficent', ascending=False)
特征的重要性可以从逻辑回归模型的 相关系数
.coef_
中得出,此参数会得到一个格式的二维数组,需要调用 .flatten()
进行降维。
随机森林
-
问题:使用随机森林方法得到的最佳参数比上文中逻辑回归最佳参数在 ROC AUC 指标上高多少?
grid_search_rfc = GridSearchCV( estimator=rf, param_grid=parameters, scoring='roc_auc', n_jobs=-1, cv=skf, verbose=1, return_train_score=True ) grid_search_rfc.fit(X, y) grid_search_rfc.best_score_ - grid_search.best_score_
计算结果约为 0.02673。
-
问题:随机森林方法最优模型中,特征重要性最弱的是哪一项?
independent_columns_names[np.argmin( grid_search_rfc.best_estimator_.feature_importances_ )]
- 对于网格搜索实例对象,我们可以调用
.best_estimator_
获取最优模型 - 在最优模型上,调用
.feature_importances_
获取各特征的重要性指数 - 调用
np.argmin()
函数获取数组中最小值的索引 - 通过下标索引还原为列名
- 对于网格搜索实例对象,我们可以调用
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 纱雾の闺房!