我知道这是理论和编码问题的混合问题。不过,我将其张贴在这里。
首先,PRA意味着我想知道某个功能在影响负面和正面结果方面是否有不同的作用。例如。低价对客户满意度有正面影响,而高价对负面影响。问题是负面影响是否大于,等于或小于正面影响。
数据如下:
import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression
import shap
df_total.columns
Index(['NPS_RAW', 'Q22_1', 'Q22_2', 'Q22_3', 'Q22_4', 'Q22_5', 'Q22_6',
'Q22_7', 'Q22_8', 'Q22_9', 'Q22_10', 'Q22_11', 'Q22_12', 'Q22_13',
'Q22_14', 'Q22_15', 'Q22_16', 'Q22_17', 'Q22_18', 'Q22_19', 'Q22_20',
'Q22_21', 'Q22_22', 'Q22_23', 'Q22_24', 'Q22_25', 'Q22_26', 'Q22_27',
'Q22_28', 'Q22_29', 'Q22_30'],
dtype='object')
结果(NPS_RAW)从10缩放到0(10 =最大正值,0 =最大负值)。所有其他功能都从5缩放到1(1 =最大正数,5最大负数)。
首先,我计算了线性回归。
X = df_total.drop('NPS_RAW', axis = 1)
Y = df_total['NPS_RAW']
lm = LinearRegression()
fit = lm.fit(X, Y)
然后我计算了shap值:
explainer = shap.LinearExplainer(fit, X, feature_dependence = 'independent')
shap_values = explainer.shap_values(X)
这是所有shap值的图:
shap.summary_plot(shap_values, X)
如您所见,如果特征值较低,则模型输出会增加(即,特征值低会相对于目标平均值增加目标值)。但是,我仍然不知道正面/负面影响是否比负面/正面影响更强。
这个想法是从目标值中创建两个组(一个高值> 5的组和一个低值> 5的组)。我是这样做的:
# Adding the shap values to the original data frame
df_nps = df_total
df_nps.reset_index(drop=True, inplace=True)
shap_values_df = pd.DataFrame(shap_values, columns = X.columns)
shap_values_df.reset_index(drop=True, inplace = True)
shap_values_df['NPS'] = df_nps['NPS_RAW']
# Creating the groups
shap_values_df.loc[df.NPS_RAW < 5, 'NPS_New'] = 'P'
shap_values_df.loc[df.NPS_RAW > 5, 'NPS_New'] = 'R'
a按组计算每个特征的平均值:
pr = shap_values_df.groupby('NPS_New').mean()
pr = shap_values_df.groupby('NPS_New').mean()
pr.loc[:, ['Q22_2','Q22_19', 'Q22_5', 'Q22_16']]
Q22_2 Q22_19 Q22_5 Q22_16
NPS_New
P -0.484180 -0.462038 -0.289868 -0.162992
R 0.117228 0.111867 0.070182 0.039463
如您所见,对负值的影响要强于对正值的影响。这与上面的图一致。但是,由于我计算了平均值,因此“异常值”对结果有很大的影响。任何想法,如果有一个实现来计算效果?