我正在从事信用风险分析。我想预测每家公司与虚构公司产生债务的风险。我从模型中获得了特征重要性,但我想知道是否可以获得哪些指标影响每个客户公司发现的风险。
例如,客户公司X有70%的风险,这个风险与变量城市、年龄和员工数量相关。另一个客户公司 Y 可能有 80% 的风险,该风险与变量城市、服务和平均工资相关。
我正在按照以下步骤进行简单的初步分析,其中使用已产生债务的公司(分类1)和相同数量的其他未产生债务的公司(分类0)的20个指标来训练模型。模型拟合完毕,然后对新公司进行预测,无需分类。
# X base composed of encoded indicators
features = df_all_aux.columns.tolist()
X = df_all_aux[features[:-1]] # all features except "Classification"
# y base composed of the target: 1 if debt, 0 if no debt
y = df_all_aux['Classification']
#Define the model
rf_classifier = RandomForestClassifier(n_estimators=100, random_state=42)
#Train the model using the training data
rf_classifier.fit(X, y)
#Predictions using the asset data
y_pred = rf_classifier.predict_proba(df_new_companies)
#Incorporating the data into the dataset
df_new_companies['Risk_0'] = y_pred[:, 0] # Probability of being class 0
df_new_companies['Risk_1'] = y_pred[:, 1] # Probability of being class 1
已编码的数据帧
df_all_aux
具有以下结构:
City Age Number_Employe Service Average_Salary Classification ...
1 100 20000 3 2000 1
2 85 15000 1 5200 1
1 103 20100 1 5200 1
4 100 19800 2 5000 0
1 101 30000 2 3500 0
3 92 18900 3 5100 0
...
over 1000 rows and 20 columns
df_new_companies
具有相同的结构,只不过它有一列包含公司 ID。
我已经有了风险百分比,现在我只想知道每个公司哪些指标与风险 1 最相关。
sorted(list(zip(rf_classifier.feature_names_in_, rf_classifier.feature_importances_)), key=lambda x: x[1], reverse=True)
解释一下:
rf_classifier 模型包含“feature_names_in_”和“feature_impartnaces_”属性。
zip 创建两个属性的 zip 对象。
list 将 zip 对象传输到元组列表。
使用 lambda 按“feature_importances_”作为键排序