Проверка независимости квадрата хи и сохранение незначительных столбцов из теста хи-квадрат в виде списка в python - PullRequest
0 голосов
/ 16 января 2020

Я запускаю тест хи-квадрат для своих данных, чтобы отбросить незначительные категориальные столбцы из данных.

Ниже приведен код:

Создание функции для теста хи-квадрат

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.Мой код работает хорошо, вместо печати я хочу получить список столбцов, которые незначительны или должны быть отброшены.

Если у вас есть предложения, чтобы получить список, который содержит все столбцы, которые должны быть отброшены будь благодарен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...