Въведение:

В днешната конкурентна телекомуникационна индустрия предоставянето на изключително клиентско изживяване и минимизирането на оттока на клиенти са от решаващо значение за устойчив бизнес успех. Vodafone Corporation, водещ доставчик на телекомуникации, призна важността на използването на машинно обучение за справяне с тези предизвикателства. В тази статия ще проучим данните на Vodafone Corporation, EDA и машинното обучение за класификация. Този проект имаше за цел да подобри изживяването на клиентите и да намали оттока.

Разбиране на проблема:

Vodafone Corporation се сблъска с предизвикателството на високия процент на оттегляне на клиентите, което води до загуба на приходи и намалена удовлетвореност на клиентите. Ние се опитахме да идентифицираме ключови фактори, влияещи върху оттока и да разработим проактивни стратегии за задържане на клиенти. Като анализирахме огромно количество клиентски данни, имахме за цел да предвидим оттока на клиенти и да предприемем целенасочени действия за смекчаването му.

Проучвателен анализ на данни (EDA):

Преди да се задълбочим в моделите за машинно обучение, ние проведохме задълбочен проучвателен анализ на данните. Изследване на набора от данни, който включваше широк набор от атрибути на клиента, като се използва:

voda.columns.values

Изход [321]:

array(['customerID', 'gender', 'SeniorCitizen', 'Partner', 'Dependents',
       'tenure', 'PhoneService', 'MultipleLines', 'InternetService',
       'OnlineSecurity', 'OnlineBackup', 'DeviceProtection',
       'TechSupport', 'StreamingTV', 'StreamingMovies', 'Contract',
       'PaperlessBilling', 'PaymentMethod', 'MonthlyCharges',
       'TotalCharges', 'Churn'], dtype=object)

Чрез визуализации и статистически анализи можем да получим ценна представа за връзките между тези променливи и оттока на клиентите.

voda.info(verbose = True)

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 7043 entries, 0 to 7042
Data columns (total 21 columns):

Въпроси, които зададохме:

1. Коя е най-предпочитаната интернет услуга за клиентите?

2. Какви прозрения могат да се получат чрез анализиране на демографията на клиентите във връзка с пола?

3. Коя услуга е най-популярна сред клиентите?

4. Има ли вероятност клиентите без лица на издръжка да имат по-високи такси от тези с лица на издръжка?

Хипотеза:

Нулева хипотеза: Клиентите на DSL е по-малко вероятно да напуснат, отколкото тези на интернет услугата Fiber.

Алтернативна хипотеза: Клиентите на DSL е по-вероятно да се откажат от тези на интернет услугата Fiber.

Нека да разберем някои данни:

Забележка: използвахме plotly library за всички диаграми и GitHub може да не показва тези диаграми в .ipynb Затова качих html версия на бележника, така че можете да изтеглите и видите всички класациите. Имам и папка, съдържаща всички диаграми.

  • Проверихме колко бъркалки имаме:

прозрение:

  • Графиката показва, че има общо 186 клиенти, които са напуснали от 7043. Това е значителен брой клиенти и е важно да разберете защо те напускат.
  • Вече можем да видим, че това е силно небалансиран набор от данни, на който трябва да се обърне внимание.

Изследване на данни

  1. Начертайте разпределението на отделните предиктори по отлив

Едномерен анализ

използвайки този блок от кодове:

for i, predictor in enumerate(data.drop(columns=['Churn', 'TotalCharges', 'MonthlyCharges'])):
    fig = px.histogram(data, x=predictor, color='Churn', barmode='group',
                       color_discrete_sequence=['#1f77b4', '#aec7e8'],
                       title=f"Countplot of {predictor} by Churn")
    fig.update_layout(xaxis_title=predictor, yaxis_title="Count",
                      legend_title="Churn", height=400)
    fig.show()

Това са само няколко от многото диаграми, извлечени от този блок; можете да видите всички класации на моята страница GitHub.

Нулева хипотеза: Senior_citizen не корелира с тенденцията за отлив на клиенти.
Алтернативна хипотеза: Senior_citizen корелира с тенденцията за отлив на клиенти.

In [24]:

from scipy.stats import chi2_contingency
Crosstabresults = pd.crosstab(index= voda['SeniorCitizen'], columns = voda['Churn'])
chisqresult  = chi2_contingency(Crosstabresults)

In [25]:

print('p-value: ', chisqresult[1])
p-value:  1.510066805092378e-36

Прозрения:
P-стойността е по-малка от 0,05, което означава, че отхвърляме нашата нулева хипотеза. Senior_citizen корелира с оттока на клиентите.

Пол и склонност към оттегляне на клиенти

In [26]:

Crosstabresults1 = pd.crosstab(index= voda['gender'], columns = voda['Churn'])
chisqresult1  = chi2_contingency(Crosstabresults1)

In [27]:

chisqresult1[1]

Изход [27]:

0.48657873605618596

Прозрения:
P-стойността е по-голяма от 0,05, което означава, че приемаме нашата нулева хипотеза. Възрастният гражданин корелира с оттока на клиентите.

Въпроси

Забележка: Всички кодове са налични в моя GitHub

  1. Коя е най-предпочитаната интернет услуга за клиентите?

2. Какви прозрения могат да се получат чрез анализиране на демографията на клиентите във връзка с пола?

Прозрения:

  • По-голямата част от клиентите не са възрастни хора. Тоест клиентската база е предимно от млади хора.
  • По-голямата част от клиентите не са женени.
  • По-голямата част от клиентите нямат лица на издръжка.

3. Коя услуга е най-популярна сред клиентите?

4. Вероятно ли е клиентите без лица на издръжка да имат по-високи такси от тези с лица на издръжка?

Проверихме и връзката между MonthlyCharges и TotalCharges:

Можем да видим, че тези две са положително свързани.

Ние също изграждаме корелация на всички предиктори с „отлив“:

Прозрения:

Месечните договори имат висок процент на текучество. Без онлайн сигурност, без техническа поддръжка, първа година на абонамент и оптичен интернет

НИСКО Отток се наблюдава в случай на дългосрочни договори, абонаменти без интернет услуга и клиенти, ангажирани за 5+ години

Двумерен анализ:

Това включва анализиране на връзката между две променливи, за да се разбере тяхната взаимна асоциация или зависимост.

Разгледах разпределението на партньорите във връзка с отклоняването на клиенти:

Стълбовидната диаграма показва разпределението на клиентите въз основа на това дали имат партньори (т.е. ако са в партньорство) и дали са се отказали (т.е. ако са прекратили услугите си с компанията). Диаграмата представя стълбове от две части, една за клиенти без партньори и една за клиенти с партньори.

Разликата във височините на стълбовете показва разликата в броя или дела на клиентите във всяка категория. Като анализираме разпределението на партньорите по отношение на оттока на клиентите, получаваме представа за потенциалното въздействие на наличието на партньор върху задържането на клиенти.

Разбирането на това разпределение на видовете договори сред оттеглените клиенти ни позволява да адаптираме опциите за договори и стратегиите за задържане, за да отговорим по-добре на нуждите на клиентите и да намалим процента на оттегляне.

Това ни казва, че услугата за техническа поддръжка трябва да бъде интегрирана в предоставяните услуги. Това изглежда означава много за клиентите. Това може да се предостави безплатно или на по-ниска цена.

има още в тази сесия и могат да се видят заедно с всички изходни кодове на моя GitHub

Прозрения:

  • Електронният носител на чекове е най-големият производител.
  • Тип договор: Месечните клиенти са по-склонни да се откажат, това може да се дължи на липсата на договорни условия.
  • Категорията за онлайн сигурност и техническа поддръжка са много популярни.
  • Гражданите, които не са в напреднала възраст, са много склонни.

Подходът на машинното обучение:

Възприехме подход за машинно обучение за класифициране, за да се справим с проблема с прогнозирането на отлив. Събрахме и обработихме предварително обширни данни за клиенти, включително демографска информация, модели на използване, взаимодействия с поддръжката на клиенти и подробности за плащане. След това наборът от данни беше разделен на набори за обучение и тестване и ние също се занимавахме с проблема с дисбаланса в данните, както го видяхме по-рано.

Модели и оценка:

Vodafone Corporation експериментира с множество модели на класификация, включително:

  • Класификатор на дървото на решенията
  • Случайна гора
  • Класификатор за усилване на градиента
  • Логистична регресия

Всеки модел беше обучен на набора за обучение и оценен на набора за тестване с помощта на различни показатели като точност, прецизност, припомняне и F1 резултат. Моделите предоставиха ценна информация за идентифициране на потенциални хищници и техните характеристики.

Това е нашата прогноза преди балансирането на набора от данни:

Model  Accuracy  Precision    Recall  F1 Score
0                 Decision Tree  0.796309   0.639073  0.520216  0.573551
1  Gradient Boosting Classifier  0.792761   0.632107  0.509434  0.564179
3     Logistic Regression Model  0.799858   0.663004  0.487871  0.562112
2      Random Forest Classifier  0.796309   0.669355  0.447439  0.536349

Трябва да се справим с балансирането на набора от данни с помощта на SMOTEENN()

и нашата прогноза след балансирането:

sm = SMOTEENN()
Model  Accuracy  Precision    Recall  F1 Score
3     Logistic Regression Model  0.743080   0.507293  0.843666  0.633603
2  Gradient Boosting Classifier  0.731725   0.494382  0.830189  0.619718
1      Random Forest Classifier  0.690561   0.454545  0.876011  0.598527
0                 Decision Tree  0.678495   0.442577  0.851752  0.582488

Коментар:

От двете таблици може да се види, че:

  • Балансирането на целевите променливи подобри производителността на нашите модели
  • Двата модела с най-добри резултати въз основа на резултата от F1 са Gradient Boosting Classifier и Logistic Regression Classifier.

След това преминахме към Настройка на хиперпараметри

models = [ gb_clf_bal, lr_bal]

Настройване на градиентно усилващ модел на класификатор

models[0].get_params()

Изход [81]:

{'ccp_alpha': 0.0,
 'criterion': 'friedman_mse',
 'init': None,
 'learning_rate': 0.1,
 'loss': 'log_loss',
 'max_depth': 6,
 'max_features': None,
 'max_leaf_nodes': None,
 'min_impurity_decrease': 0.0,
 'min_samples_leaf': 8,
 'min_samples_split': 2,
 'min_weight_fraction_leaf': 0.0,
 'n_estimators': 100,
 'n_iter_no_change': None,
 'random_state': 100,
 'subsample': 1.0,
 'tol': 0.0001,
 'validation_fraction': 0.1,
 'verbose': 0,
 'warm_start': False}

Тези прозрения дават поглед върху конфигурацията и поведението на първия модел в списъка.

GradientBoostingClassifier

GradientBoostingClassifier(max_depth=8, min_samples_leaf=8, n_estimators=1000,
                           random_state=100)
models

Изход [88]:

[GradientBoostingClassifier(max_depth=6, min_samples_leaf=8, random_state=100),
 LogisticRegression(random_state=101),
 GradientBoostingClassifier(max_depth=8, min_samples_leaf=8, n_estimators=1000,
                            random_state=100)]

Моля, намерете подробните кодове и резултати в моя GitHub.

Настройка на логистичния регресионен модел

In [89]:

models[1].get_params()
models

Изход [95]:

[GradientBoostingClassifier(max_depth=6, min_samples_leaf=8, random_state=100),
 LogisticRegression(random_state=101),
 GradientBoostingClassifier(max_depth=8, min_samples_leaf=8, n_estimators=1000,
                            random_state=100),
 LogisticRegression(C=3.0, max_iter=1000, random_state=101)]

След това изнесохме нашите ключови компоненти:

components = { 'scaler': scaler,
               'model': models
    }

In [97]:

components

Изход [97]:

{'scaler': MinMaxScaler(),
 'model': [GradientBoostingClassifier(max_depth=6, min_samples_leaf=8, random_state=100),
  LogisticRegression(random_state=101),
  GradientBoostingClassifier(max_depth=8, min_samples_leaf=8, n_estimators=1000,
                             random_state=100),
  LogisticRegression(C=3.0, max_iter=1000, random_state=101)]}

Експортираните ключови компоненти представляват речник, съдържащ два основни компонента: „scaler“ и „model“.

Тепредставляват мащабиращ обект и списък от модели, които могат да се използват за предварителна обработка и задачи за прогнозиране.

След това създадохме папка и експортирахме components:

#Create Folder
!mkdir export

In [99]:

#Create a destination folder
destination = os.path.join('.','export')

In [100]:

#export
with open(os.path.join(destination,'ml.pkl'),'wb') as f:
    pickle.dump(components, f)

Накрая го експортирахме:

#save file in export
!pip freeze > export/requirement.txt

Така че ще продължим по този проект, все още не сме приключили. Ще изградим API за този модел, за да можем да го използваме в приложение.

Благодаря ви, че прочетохте до тук. GitHub

Ключови констатации и резултати:

След задълбочен анализ открихме няколко ключови констатации. Установихме, че клиентите със специфични модели на използване, като например месечно таксуване, са по-склонни да напуснат. Освен това някои демографски фактори и проблеми с фактурирането също допринесоха за оттеглянето.

Въздействие и ползи:

Прилагането на моделите за машинно обучение и прозренията, получени от този проект, ще донесе значителни ползи. Чрез проактивно идентифициране на потенциални клиенти, те ще могат да разпределят ресурсите по-ефективно, като се фокусират върху задържането на клиенти с висока стойност. Това ще доведе до подобрена удовлетвореност на клиентите, намалени нива на оттегляне и увеличени приходи за компанията.

Заключение:

Проектът „Classification ML“ на Vodafone Corporation илюстрира силата на машинното обучение при справяне с критични бизнес предизвикателства. Чрез използване на клиентски данни и използване на класификационни модели, ние успешно идентифицирахме модели на оттегляне и внедрихме проактивни стратегии за задържане. Този проект не само подобри изживяването на клиентите, но и положително въздействие върху крайния резултат на компанията. Уроците, извлечени от този проект, могат да послужат като план за всички телекомуникационни доставчици, които искат да оптимизират задържането на клиенти и да стимулират растежа на бизнеса.

Няма да завърша това, без да благодаря на моя съотборник, отбора на Сидни. Като екип работихме съвместно и споделихме индивидуалните си силни страни и опит, за да завършим този проект. Бих искал да изразя своята признателност към членовете на моя екип.

Гидиън Даджи

Уилямс Джордж

Фредрик Боатенг и:

Efobi Godwin — за тяхната отдаденост, упорит труд и принос за успеха на този проект.

Благодаря ви момчета.

Следвайте ме за повече информация като тази.