В этой статье мы использовали реальные примеры данных демографического и медицинского обследования в Нигерии для разработки модели машинного обучения, которая будет прогнозировать использование современных противозачаточных средств в сельской местности Нигерии с использованием модели классификации логистической регрессии.

В этой статье будут следующие разделы:

Обзор анализа и источника данных

Загрузка данных в Python

Описание данных и функций

Выбор выборки сельских респондентов из всего массива данных

Одномерный исследовательский анализ данных

Разработка функций

Двумерный (две функции) исследовательский анализ данных и тест на взаимосвязь

Проверка объектов на наличие отсутствующих значений

Фиктивное кодирование функций

Коррекция дисбаланса классов и разделение данных обучения/тестирования

Выбор функций для моделирования

Моделирование данных

Оценка эффективности модели

Важность функций модели

k-кратная перекрестная проверка

Сохранение модели для использования в будущем

Обзор анализа и источника данных

В этой статье будут использованы последние бесплатные вторичные данные демографического и медицинского обследования (DHS) для Нигерии, называемого NDHS 2018. Оно было проведено в 2018 году, отсюда и название. DHS представляет собой общенациональное репрезентативное исследование, которое проводится в развивающихся странах. Чтобы запросить любые бесплатные исходные данные на уровне страны из программы DHS, пожалуйста, посетите Программа DHS, зарегистрируйтесь и отправьте запрос.

В этом анализе мы будем использовать библиотеки Python для реализации различных разделов исследования. В частности, мы будем использовать:

а. Pandas — для чтения и обработки нашего набора данных в Python и для анализа;

б. Matplotlib и Seaborn — для выполнения всех визуализаций;

в. Numpy и Scipy — для выполнения всех научных, математических и статистических вычислений;

ж. Sklearn — предоставить необходимые алгоритмы для построения модели;

г. Eli5 — для определения порядка важности признаков в модели; и

ч. Joblib — чтобы сохранить модель для будущего использования и развертывания.

Главной целью этого анализа является разработка бинарной логистической модели, которая будет определять, использует ли в настоящее время женщина репродуктивного возраста (от 15 до 49 лет), проживающая в сельской местности Нигерии, современный метод контрацепции или нет, на основе ее социально-демографические и приблизительные характеристики, а именно — возраст, рабочее и семейное положение, вероисповедание, регион проживания, паритет, образование, индекс благосостояния, сексуальная активность.

Бинарная логистическая модель, как следует из названия, представляет собой классификационную модель машинного обучения, которая подходит для прогнозирования категориального целевого признака только с двумя категориями ответов, с одной из категорий ответов, численно закодированной как 1, а другой как 0. В любое время результат прогнозирования 1 или 0 будет определяться набором идентифицированных, выбранных и подходящих предикторов. При выборе предикторов необходимо руководствоваться знанием предметной области.

Загрузка данных в python

В соответствии с программой DHS набор данных NDHS 2018 представлен в различных форматах (.csv, .sav, .dta, .xls и т. д.). В этом анализе мы будем загружать данные NDHS 2018 в панды Python, используя формат .dta (расширение STATA).

Для начала мы сначала импортируем все необходимые библиотеки Python, необходимые для этого анализа. Примечание: мы используем Jupyter Notebook от Anaconda в качестве нашей интегрированной среды разработки (IDE) для этого анализа.

Далее мы импортируем набор данных NDHS в pandas.

path=r"B:\NGIR7ADT\NGIR7AFL.dta"
DHS=pd.read_stata(path)
Variables_needed=['v024', 'v130', 'v502', 'v025', 'v106', 'v190', 'v201', 'v313', 'v536', 'v013', 'v714']
Total_Sample=DHS[Variables_needed]

Общая выборка составляет 41821 (все данные респондентов), а общее количество признаков, импортированных из набора данных NDHS в pandas для нашего анализа, равно 11. (Примечание: набор данных NDHS 2018 содержит всего 5394 признака/переменных).

Структуру данных набора данных NDHS 2018 в кадре данных pandas можно увидеть ниже:

Описание данных и функций

В таблице ниже показаны функции/переменные, которые будут использоваться в этом анализе, и их характеристики:

Зависимая или целевая функция/переменная

В этом анализе функция v313 является зависимой или целевой функцией. У него есть категория ответов: без метода, современный метод, традиционный метод и фольклорный метод. Поскольку в этом анализе мы будем использовать модель логистической регрессии, она будет перекодирована путем разработки функций с функции с четырьмя категориями ответов на две.

Мы сгруппируем четыре категории ответов в: "Использование современных противозачаточных средств" с кодом 1 и "Неиспользование современных противозачаточных средств" с кодом 0.

Функции предиктора

В этом анализе предикторами или независимыми признаками являются v024, v106, v130, v190, v013, v201, v714, v502, v536. Функция — v025 будет использоваться для выбора сельской выборки и удаления городской выборки из фрейма данных. После использования v025 для этой функции мы удалим ее из списка функций в кадре данных.

Выбор выборки сельских респондентов из всей базы данных

Чтобы получить необходимую выборку сельских респондентов из всех данных (41 821), мы будем использовать функцию v025. Ниже представлена ​​категория ответов и частотное распределение функции v025:

Мы исключили бы данные городских респондентов из набора данных. Таким образом, в базе данных будут только данные сельских респондентов.

Rural_data_only=Total_Sample.drop(Total_Sample[Total_Sample['v025']=='urban'].index)

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

Одномерный (однокомпонентный) исследовательский анализ данных (EDA)

В этом разделе мы попытаемся понять распределение признаков как при одномерных (индивидуальных признаках), так и при использовании частотного распределения, процентного распределения и визуализации.

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

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

Также мы наблюдаем, что процент сельских женщин, использующих современный метод, составляет всего 8%; это означает, что соотношение современных пользователей противозачаточных средств к пользователям, не использующим противозачаточные средства, составляет примерно 1: 9. Это указывает на то, что существует проблема классификации дисбаланса. Мы решим эту проблему в разделе исправления дисбаланса классов.

Ниже приведен одномерный исследовательский анализ оставшихся функций:

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

Разработка функций

В этом разделе мы проведем перекодирование и группировку по некоторым характеристикам категории отклика, полученные в результате одномерного исследовательского анализа. Это необходимо перед проведением двумерного исследовательского анализа.

Нам потребуется сгруппировать категории ответов по следующим характеристикам: использование противозачаточных средств (v313), религия (v130), образование (v106), индекс благосостояния (v190), паритет (v201), сексуальная активность (v536), т.е. эти выбранные функции, нам нужно будет свернуть некоторые из их категорий ответов.

В качестве иллюстрации для характеристики — религия (v130) мы объединим «Другой христианин» и «Католик» в одну категорию «Христианин». Кроме того, мы бы объединили «традиционалистов» и «других» в одну категорию «Другие». Таким образом, функция религии (v130) теперь будет иметь три категории ответов, а именно: мусульмане, христиане и другие.

Ниже приведена разработка каждой функции по мере необходимости:

Independent_recode_v130 =  {"v130":
                            
                            {"other christian": 'christians',  
                             "catholic": 'christian',  
                             "other": 'others',  
                             "traditionalist": 'others',  
                             "islam": 'muslim'}
                           }
Rural_data_only.replace(Independent_recode_v130, inplace=True)
Rural_data_only['v130'].value_counts(normalize=True) * 100

Independent_v201 = {
                "v201": {0: '0',  1: '1-5',  2: '1-5',  3:'1-5',  
                         4: '1-5', 5: '1-5', 6: '6', 7: '7+',  
                         8: '7+',  9: '7+',  10: '7+',  11: '7+',  
                         12: '7+',  13: '7+',  14: '7+',  15: '7+',  
                         16: '7+', 17: '7+'}
                    }
Rural_data_only.replace(Independent_v201, inplace=True)
Rural_data_only['v201'].value_counts(normalize=True) * 100

Двумерный (две функции) исследовательский анализ данных (EDA) и проверка ассоциации

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

Семейное положение и использование современных противозачаточных средств

Из приведенного выше анализа следует, что респонденты, состоящие в браке (ранее или в настоящее время), используют современные методы контрацепции, чем их неженатые коллеги. Это говорит о том, что семейное положение может быть хорошим предиктором использования современных противозачаточных средств. Статистический тест хи-квадрат на связь между двумя функциями показал то же самое (χ2 = 33,657, p-значение = 0,000).

tab1=pd.crosstab(index=Rural_data_only.v502, columns=Rural_data_only.v313)
print('The two-way table between marital status and modern contraceptive use status is: \n' , tab1)
chi2, p, dof, expected=chi2_contingency(tab1.values)
print('Chi-square statistic is %0.3f,  p_value is %0.3f' %(chi2,p))

Религия и использование современных противозачаточных средств

Из приведенного выше анализа следует, что респонденты, которые были христианами, используют современные противозачаточные средства в три раза чаще, чем мусульмане, это может означать, что религия может быть сильным предиктором использования современных противозачаточных средств. Статистический тест также показал то же самое — χ2 = 795,017, p-значение = 0,000.

Индекс благосостояния и использование современных противозачаточных средств

Из приведенного выше анализа сравнение между богатыми (богатые и средние респонденты в наборе данных) и бедными респондентами показывает более широкое использование современных методов контрацепции первыми, чем вторыми. статистический тест хи-квадрат также показал то же самое - χ2 = 374,002, p-значение = 0,000.

Рабочий статус и использование современных противозачаточных средств

Из приведенного выше анализа следует, что респонденты, которые в настоящее время работают, в большей степени используют современные противозачаточные средства, чем те, кто ими не пользуется. Это может означать, что рабочий статус может быть важным предиктором использования современных противозачаточных средств. Это тест ассоциации хи-квадрат — χ2 = 186,850, значение P = 0,000.

Возраст и использование современных противозачаточных средств

Из приведенного выше анализа следует, что с возрастом увеличивается использование современных противозачаточных средств. Это, по-видимому, достигает пика для когорты респондентов в возрасте 25–39 лет, а затем начинает снижаться. Это говорит о том, что возраст может быть важным предиктором использования современных противозачаточных средств. Статистический тест хи-квадрат ассоциации также показал то же самое (χ2 = 365,577, значение p = 0,000), как показано ниже.

Паритет (количество когда-либо рожденных детей) и использование современных противозачаточных средств

Из приведенного выше анализа следует, что респонденты, никогда ранее не рожавшие, не пользуются современными противозачаточными средствами, в то время как рожавшие от одного до пяти раз используют современные противозачаточные средства чаще, также респонденты, которые рожали шесть и более раз, используют современные противозачаточные средства. значительно меньше, чем у тех, кто рожал от одного до пяти раз. Это говорит о том, что паритет может быть важным предиктором использования современных противозачаточных средств. На это также указывает критерий ассоциации хи-квадрат — χ2 = 177,454, значение P = 0,000, как показано ниже.

Сексуальная активность и использование современных противозачаточных средств

Из приведенного выше анализа видно, что только респонденты, которые когда-либо занимались сексом, активно пользуются современными противозачаточными средствами. Кроме того, те, кто недавно был активным, использовали больше противозачаточных средств, чем те, кто недавно не был активным. Это говорит о том, что сексуальная активность тесно связана с использованием современных противозачаточных средств. Статистика хи-квадрат также показывает, что существует связь между сексуальной активностью и использованием современных противозачаточных средств.

Регион проживания и использование современных средств контрацепции

Проверка объектов на отсутствие значений

Все функции в кадре данных Rural_data_only не имеют пропущенных значений.

Манекен, кодирующий функции

Модели с контролируемым машинным обучением используют только числовые данные, иначе они не будут работать должным образом. Подразумевается, что наша модель в этом анализе может не работать, если мы снабдим ее нашим текущим набором категориальных признаков. Чтобы убедиться, что модель в этом анализе работает, нам нужно превратить наши категориальные признаки в фиктивные признаки. Это включает в себя превращение каждой категории ответов каждой функции в новый столбец (функция) с присвоенными значениями 1 0r 0. Теперь мы создадим фиктивную функцию из каждой из 10 функций в нашем фрейме данных.

Create_dummies=pd.get_dummies(Rural_data_only)
Create_dummies.columns.values
Concat_Rural_data_only=pd.concat([Rural_data_only, Create_dummies], sort=False)
Concat_Rural_data_only.columns.values

Обратите внимание, что исходные категориальные объекты все еще находятся в данных Rural_data_only вместе с вновь созданными фиктивными объектами. Нам нужно будет удалить исходные функции (поскольку они категориальные и нечисловые), чтобы у нас были только фиктивные функции (поскольку они числовые).

Concat_Rural_data_only=Concat_Rural_data_only.drop(['v130', 'v502', 'v024', 'v106', 'v190', 'v201', 'v536', 'v013', 'v714', 'v313', 'v313_Not using modern method'], axis=1)
Concat_Rural_data_only.fillna
Concat_Rural_data_only = Concat_Rural_data_only.dropna()
Concat_Rural_data_only.dtypes
Concat_Rural_data_only=Concat_Rural_data_only.astype(int)
Concat_Rural_data_only.dtypes
Concat_Rural_data_only.columns.values

После фиктивного кодирования мы обозначим список наших независимых или предикторов как X, а список наших целевых или зависимых функций как y:

X=Concat_Rural_data_only.drop('v313_Using modern method',axis=1)
y=Concat_Rural_data_only['v313_Using modern method']
y=y.to_frame()

Коррекция дисбаланса классов и разделение данных обучения/тестирования

Напомним, что у нашего зависимого признака есть проблема несбалансированной классификации, т. е. доля респондентов, использующих современные противозачаточные средства, была значительно меньше, чем тех, кто их не использует. Мы устраним этот дисбаланс перед моделированием. Стандартное моделирование требует, чтобы пропорция категории ответа зависимой функции при сравнении была близка к равной (45:55), если не равна (50:50). Мы бы решили эту проблему, используя алгоритм SMOTE (Synthetic Minority Oversampling Technique). SMOTE поможет сбалансировать два класса.

Также обратите внимание, что мы разделили наши данные на обучающий и тестовый наборы данных; при этом набор обучающих данных занимает 70% всех данных, а тестовые данные — 30%. Мы будем обучать нашу модель с помощью обучающих данных и тестировать обученную модель с помощью тестовых данных для оценки точности и точности.

os = SMOTE(random_state=0, ratio='auto')
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
columns = X_train.columns
X_train.columns.values
y_train.columns.values
os_data_X,os_data_y=os.fit_sample(X_train,y_train.values.ravel())
os_data_X = pd.DataFrame(data=os_data_X,columns=columns )
os_data_y= pd.DataFrame(data=os_data_y,columns=['y'])
print("length of oversampled data is ",len(os_data_X))
print("Number of non modern contraceptive users in oversampled data",len(os_data_y[os_data_y['y']==0]))
print("Number of modern contraceptive users in the oversampled data",len(os_data_y[os_data_y['y']==1]))
print("Proportion of non modern contraceptive users data in oversampled data is ",len(os_data_y[os_data_y['y']==0])/len(os_data_X))
print("Proportion of modern contraceptive users data in oversampled data is ",len(os_data_y[os_data_y['y']==1])/len(os_data_X))

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

Выбор элементов для моделирования

В этом разделе мы проверим и выберем функции, которые лучше всего подходят для использования в нашей модели для прогнозирования. Мы будем использовать метод рекурсивного исключения признаков (RFE). RFE использует повторяющийся процесс прогнозирования смоделированной модели, чтобы идентифицировать и указывать подходящие и неподходящие функции, которые следует включить в наше моделирование. Он обозначает подходящие функции как True или 1, а те, которые определены как неподходящие, обозначаются как False или ›1 значение.

Примечание. Порядок функций в массиве функций такой же, как их оценки RFE в логическом и числовом списке. Например, из приведенного ниже вывода кода функция — «v024_north Central» является первой (сверху) в списке функций и принимает значения — «Ложь» и «6» в логическом и нумерованном списке. Кроме того, функция — «v714_no» является предпоследней (сверху) в списке функций, она находится в той же позиции в списке логических и числовых значений. Он принимает значения «Истина» и «1» в логическом и числовом списке.

from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
logreg = LogisticRegression(solver='lbfgs', max_iter=1000, class_weight='balanced')
rfe = RFE(logreg, 20)
rfe = rfe.fit(os_data_X, os_data_y.values.ravel())
print(rfe.support_)
print(rfe.ranking_)
X.columns.values

Основываясь на оценке RFE, мы исключим из моделирования функции со значением «False» в логическом списке и значением более одного (>1) в числовом списке. В прогноз модели будут включены только функции с логическим значением — «Истина» и числовым значением — «1».

Сводка функций с их логическими и числовыми значениями на рисунке ниже:

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

X=X.drop(['v024_north central', 'v024_north east', 'v024_north west','v024_south east', 'v024_south south', 'v024_south west', 'v130_christians', 'v130_muslim', 'v130_others','v502_never in union', 'v502_currently in union/living with a man','v502_formerly in union/living with a man','v536_active in last 4 weeks', 'v536_not active in last 4 weeks'], axis=1)
X.columns.values
X=X.columns

Моделирование данных

Теперь, когда у нас есть значения X и y; мы бы снабдили нашу модель логистической регрессии обучающими данными:

X=os_data_X[X]
y=os_data_y['y']
import statsmodels.api as sm
logit_model=sm.Logit(y,X)
result=logit_model.fit()
print(result.summary2())

Результат моделирования показан ниже:

Из приведенной выше таблицы функции v106_primary, v201_0 и v201_6 имеют p-значения выше 0,05, следовательно, не являются значимыми предикторами использования современных противозачаточных средств (они считаются незначимыми, поскольку их «p›|z|» больше 0,05). Как следствие, они будут удалены из модели как предикторы. Кроме того, на данный момент точность прогноза нашей модели с использованием наших тестовых данных составляет 79%. Это можно увидеть ниже:

from sklearn.linear_model import LogisticRegression
from sklearn import metrics
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
logreg = LogisticRegression(solver='lbfgs', max_iter=1000, class_weight='balanced')
logreg.fit(X_train, y_train)
y_pred = logreg.predict(X_test)
print('Accuracy of logistic regression classifier on test set: {:.2f}'.format(logreg.score(X_test, y_test)))

Затем мы удалим 3 функции из X и снова запустим модель, а затем проверим точность и правильность.

X=['v106_no education', 'v106_secondary/higher',
       'v190_Average', 'v190_poor', 'v190_rich', 'v201_1-5',
       'v201_7+', 'v536_never had sex', 'v013_15-19',
       'v013_20-24', 'v013_25-29', 'v013_30-34', 'v013_35-39',
       'v013_40-44', 'v013_45-49', 'v714_no', 'v714_yes']

Все включенные функции являются значимыми (имеют p-значения ‹ 0,05) в новой модели. Точность предсказания этой модели теперь составляет 77%.

Оценка производительности модели

Матрица путаницы

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

from sklearn.metrics import confusion_matrix
confusion_matrix = confusion_matrix(y_test, y_pred)
print(confusion_matrix)

Элементы на левой диагонали (3425, 3948) матрицы путаницы — это элементы, предсказанные моделью справа:

Первый элемент первой строки и первого столбца (3425 — количество предсказанных моделью как использующих современный метод контрацепции, так и использующих), и элемент второй строки и второго столбца (3948 — количество предсказанных моделью модель как не использующие современный метод контрацепции и не использующие) правильно предсказываются моделью. В целом, они составляют 77% точного прогноза модели.

Элементы на правой диагонали (1330, 908) матрицы путаницы предсказаны неверно:

Второй элемент в первой строке и втором столбце (1330 — количество тех, кто предсказывает модель как использующих современные средства контрацепции, но не использует) и элемент во второй строке и первом столбце (908 — количество тех, которые предсказаны моделью). модель как не использующие современные противозачаточные средства, но использующие) неверно предсказываются моделью. В целом, они составляют 23% неточных прогнозов модели.

Кривая рабочих характеристик приемника

Кроме того, мы будем использовать кривую рабочих характеристик приемника (ROC), чтобы оценить надежность и силу нашей модели для точного прогнозирования. Хорошая кривая ROC для модели - это та, которая находится в верхней левой части плоскости, т. Е. Хорошая модель классификатора имеет кривую ROC (синяя линия), которая остается далеко от пунктирной красной линии слева.

from sklearn.metrics import classification_report
print(classification_report(y_test, y_pred))
from sklearn.metrics import roc_auc_score
from sklearn.metrics import roc_curve
logit_roc_auc = roc_auc_score(y_test, logreg.predict(X_test))
fpr, tpr, thresholds = roc_curve(y_test, logreg.predict_proba(X_test)[:,1])
plt.figure()
plt.plot(fpr, tpr, label='Logistic Regression (area = %0.2f)' % logit_roc_auc)
plt.plot([0, 1], [0, 1],'r--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic')
plt.legend(loc="lower right")
plt.savefig('Log_ROC')
plt.show()

Результат ROC показан ниже:

Как видно выше, кривая логистической регрессии (синяя кривая) находится в верхней левой части кривой ROC. Точность и оценка f1 также подчеркивают производительность и силу нашей модели. Показатель f1 для предсказания класса используемых в настоящее время современных противозачаточных средств составляет 78% и 75% для тех, кто в настоящее время не использует. Общий средний показатель составляет 77%. Уровень точности нашей модели для прогнозирования использования в настоящее время современных противозачаточных средств составляет 75% и 79% для тех, кто в настоящее время не использует какой-либо метод, при общем среднем значении 77%.

Важность особенностей модели

Поскольку теперь у нас есть список характеристик, которые являются важными предикторами использования современных противозачаточных средств; будет важно оценить уровень важности каждого значимого признака для прогнозирования использования современных противозачаточных средств в отношении других участников модели.

Мы будем использовать библиотеку eli5 для оценки важности признаков, используя технику важности перестановки.

perm = PermutationImportance(logreg, random_state=0).fit(X_test, y_test)
eli5.show_weights(perm, feature_names = X_test.columns.tolist())

В таблице порядок важности сверху вниз.

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

Можно сказать, что «v190_poor» является наиболее важной характеристикой для прогнозирования использования современных противозачаточных средств. Это означает, что оценка респондента как бедного или иного является сильнейшим фактором, определяющим использование им современных противозачаточных средств.

k-кратная перекрестная проверка

Не является стандартной практикой полагаться только на однократное значение точности модели. Лучше всего повторить процесс обучения модели и оценки точности несколько раз. После этого возьмите среднее значение и стандартное отклонение повторных измерений в качестве окончательного значения точности модели. Этого можно достичь, используя концепцию k-кратной перекрестной проверки.

from sklearn import model_selection
from sklearn.linear_model import LogisticRegression
for scoring in["accuracy", "roc_auc"]:
    seed = 0
    kfold = model_selection.KFold(n_splits=10, random_state=0)
    logreg = LogisticRegression(solver='lbfgs', max_iter=1000, class_weight='balanced')
    results = model_selection.cross_val_score(logreg, X_test, y_test, cv=kfold, scoring=scoring)
    print("Model", scoring, " mean=", results.mean() , "stddev=", results.std())

Из k-кратной перекрестной проверки средняя точность модели составляет 77%, стандартное отклонение — 0,9.

Сохранение модели для будущего использования

Теперь мы сохраним модель для будущего использования и развертывания.

from sklearn.externals import joblib 
  
# Save the model as a pickle file 
joblib.dump(logreg, 'ModernContraceptiveUsePredictorModel.pkl')

Блокнот Jupyter, использованный для этого анализа, доступен здесь

Вот и все. Надеюсь, вы найдете это полезным? Пожалуйста, оставляйте свои комментарии и подписывайтесь на меня в LinkedIn на Ayobami Akiode LinkedIn.