Первые хакатоны всегда особенные. Это был мой первый хактон по Analytics Vidhya. Ранее я принимал участие в дататоне на HackerEarth, организованном Future Group. Я вошел в сотню лучших.

Хакатон McKinsey прошел онлайн 20 января. Это был 24-часовой хакатон, который начинался с 6 утра до 6 утра 21 января (чего я тогда не знал).

Постановка задачи

Цифровое подразделение банка сталкивается с проблемами конверсии лидов. Основная цель этого подразделения - увеличить привлечение клиентов через цифровые каналы. Подразделение было создано несколько лет назад, и в эти годы основной задачей подразделения было увеличение количества потенциальных клиентов, попадающих в воронку конверсии.

Они получают потенциальных клиентов через различные каналы, такие как поиск, медийная реклама, рассылки по электронной почте и через аффилированных партнеров. Как и ожидалось, они видят дифференциальное преобразование в зависимости от источников и качества этих лидов.

Теперь они хотят идентифицировать сегменты потенциальных клиентов с более высоким коэффициентом конверсии (приводят к покупке продукта), чтобы они могли специально нацеливать этих потенциальных клиентов через дополнительные каналы и ремаркетинг. Они предоставили частичный набор данных для наемных клиентов за последние 3 месяца. Они также фиксируют основные сведения о клиентах. Нам необходимо определить сегмент клиентов с высокой вероятностью конверсии в ближайшие 30 дней.

Мой подход

Я взял данные и посмотрел, есть ли недостающие значения. И был удивлен, увидев, что из 69713 значений в некоторых столбцах отсутствовало до 47437 значений. Но эти недостающие значения очень связаны. Мол, у вас не может быть City_Category без City_code, у вас не может быть Employer_Category без Employer_Code.

Gender                                     0
DOB                                       15
Lead_Creation_Date                         0
City_Code                                814
City_Category                            814
Employer_Code                           4018
Employer_Category1                      4018
Employer_Category2                      4298
Monthly_Income                             0
Customer_Existing_Primary_Bank_Code     9391
Primary_Bank_Type                       9391
Contacted                                  0
Source                                     0
Source_Category                            0
Existing_EMI                              51
Loan_Amount                            27709
Loan_Period                            27709
Interest_Rate                          47437
EMI                                    47437
Var1                                       0

Итак, я решил отбросить значения, в которых отсутствовало более 20% данных, а удаляемые столбцы были EMI, Interest_Rate, Loan_Period, Loan_Amount. Вместо этого я создал двоичные функции, чтобы указать, есть ли у кандидата отсутствующие данные.

def add_binary_features(data):
    
    data['Missing_Loan_EMI'] = data.EMI.isnull()
    data['Missing_Loan_Amount'] = data.Loan_Amount.isnull()
    
    return data
train = add_binary_features(train)
test = add_binary_features(test)

Вменение отсутствующих данных

Я присвоил числовым данным среднее значение или медианное значение, а категоричность - моде. Затем я закодировал свои категориальные особенности с помощью sklearn’s LabelEncoder. Затем я вычислил возраст человека. При наблюдении было замечено, что Monthly_Income, Existing_EMI имеют некоторые выбросы. Итак, я заменю их на 150-кратный 75-й процентиль каждой функции.

Создание функций

Я удалил ID. И создал фичу Actual_pay.

> train['Actual_pay'] = train['Monthly_Income'] -train['Existing_EMI']

При построении распределений Monthly_Income было оставлено искаженным, поэтому я заменил его журналами, и все было в порядке. Итак, я перешел к части машинного обучения.

Строительство PipeLine

Разделение, обучение, оценка, прогноз

Я разделяю данные по правилу 80–20. Я пробовал и тестировал различные алгоритмы, такие как GradientBoosting, DecisionTree, RandomForest, обнаружил, что XGBoost (❤) работает лучше всего, и использовал вероятности для прогнозирования.

Результаты

Я представил с результатом 0,77 ..., что принесло мне 159 место в таблице лидеров. Не самое лучшее звание, но это оказалось для меня большим опытом обучения.

P.S: Теперь, когда я начал с глубокого обучения, я чувствую, что нейронные сети могли бы улучшить мои результаты. Не стесняйтесь давать свои ценные предложения.

Ваше здоровье!!