Я запускаю тест хи-квадрат для своих данных, чтобы отбросить незначительные категориальные столбцы из данных.
Ниже приведен код:
Создание функции для теста хи-квадрат
import scipy.stats as stats
from scipy.stats import chi2_contingency
class ChiSquare:
def __init__(self, dataframe):
self.data = dataframe
self.p = None #P-Value
self.chi2 = None #Chi Test Statistic
self.dof = None
self.dfObserved = None
self.dfExpected = None
def _print_chisquare_result(self, colX, alpha):
result = ""
if self.p<alpha:
result="{0} is IMPORTANT for Prediction-->".format(colX)
else:
result="{0} is NOT an important predictor.--> (Discard {0} from model)".format(colX)
print(result)
def TestIndependence(self,colX,colY, alpha=0.05):
X = self.data[colX].astype(str)
Y = self.data[colY].astype(str)
self.dfObserved = pd.crosstab(Y,X)
chi2, p, dof, expected = stats.chi2_contingency(self.dfObserved.values)
self.p = p
self.chi2 = chi2
self.dof = dof
self.dfExpected = pd.DataFrame(expected, columns=self.dfObserved.columns, index = self.dfObserved.index)
self._print_chisquare_result(colX,alpha)
#Initialize ChiSquare Class for Variable Selection (Selecting Significant Variables)
cT = ChiSquare(data)
#Feature Selection
testColumns = ['customerID', 'gender', 'SeniorCitizen', 'Partner', 'Dependents',
'tenure', 'PhoneService', 'MultipleLines', 'InternetService',
'OnlineSecurity', 'OnlineBackup', 'DeviceProtection', 'TechSupport',
'StreamingTV', 'StreamingMovies', 'Contract', 'PaperlessBilling',
'PaymentMethod', 'MonthlyCharges', 'TotalCharges']
for var in testColumns:
cT.TestIndependence(colX=var,colY='Churn' )
Вывод выглядит следующим образом:
customerID НЕ является важным предиктором .--> (Сбросить customerID из модели)
Пол НЕ является важным предиктором .--> (Отменить пол из модели)
SeniorCitizen ВАЖЕН для прогнозирования ->
Партнер ВАЖЕН для прогнозирования ->
зависимый фактор ВАЖЕН для прогнозирования ->
владение ВАЖНО для прогнозирования ->
PhoneService НЕ является важным предиктором .--> (Откажитесь от PhoneService от модели)
Мой вопрос:
1.Мой код работает хорошо, вместо печати я хочу получить список столбцов, которые незначительны или должны быть отброшены.
Если у вас есть предложения, чтобы получить список, который содержит все столбцы, которые должны быть отброшены будь благодарен