Индонезия — самая большая страна в Юго-Восточной Азии. В 1987 г. было проведено исследование (Индонезийское национальное исследование распространенности противозачаточных средств, 1987 г.). Результатом этого исследования стал набор данных, в котором отслеживался выбор метода контрацепции. Набор данных содержит образцы женщин, которые либо не были беременны, либо не знали о своей беременности во время интервью. Задача, связанная с этим набором данных, состоит в том, чтобы предсказать метод контрацепции, который использует каждая женщина. Я попытался выполнить эту задачу, используя язык программирования python и, в частности, библиотеки Sci-Kit Learn и TensorFlow.

Набор данных, использованный в этом проекте, отслеживал десять различных атрибутов. Отслеживались такие атрибуты, как возраст жены, образование жены, образование мужа, количество детей у пары, религия жены, статус занятости жены, род занятий мужа, индекс уровня жизни пары, освещение в СМИ и, наконец, , используемое противозачаточное средство. Для создания этого набора данных было опрошено 1473 женщины. Набор данных уже был довольно чистым (без пропущенных значений), и в результате часть проекта, связанная с разработкой признаков, не заняла много времени.

Первым шагом, который я предпринял в этом проекте, была визуализация данных, включенных в набор данных. Целевая переменная (переменная, которую я пытался предсказать) — это используемый контрацептив. Таким образом, я создал гистограмму, чтобы определить распределение этой переменной.

«1» означает отсутствие противозачаточных средств. «2» представляет собой долгосрочный контрацептив, а «3» представляет собой краткосрочный контрацептив. Гистограмма показывает, что большинство женщин в наборе данных используют противозачаточные средства, и большинство из этих женщин, как правило, используют краткосрочные противозачаточные средства, а не долгосрочные. После того, как я просмотрел распределение целевой переменной, я также построил графики, чтобы показать распределения независимых переменных.

Визуализации показывают, что большинство женщин в наборе данных в возрасте от 25 до 30 лет, мусульманки, безработные, хорошо образованные и имеют высокий уровень жизни. Большинство мужей женщин в этом наборе данных также хорошо образованы и имеют высокий уровень жизни.

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

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

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

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

Эти визуализации показывают, что люди с высоким уровнем жизни склонны использовать противозачаточные средства чаще, чем люди с более низким уровнем жизни. Вероятно, это связано с тем, что люди с высоким уровнем жизни более образованы, и, как следствие, они лучше осведомлены о сексуальном воспитании и поэтому чаще используют предохранение. Чтобы подтвердить эту теорию, я решил визуализировать различия в использовании противозачаточных средств между образованными и необразованными парами.

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

Каждая женщина может быть классифицирована моделью по трем различным группам. Первая группа — 1 (неиспользование противозачаточных средств), вторая группа — 2 (долгосрочные контрацептивы), а третья группа — 3 (краткосрочные контрацептивы). Поэтому это проблема классификации нескольких классов, и я решил использовать K-ближайших соседей, случайный лес и машины опорных векторов для решения проблемы классификации. К сожалению, эти модели не увенчались успехом, поскольку модель K-ближайших соседей достигла точности 52%, а две другие модели достигли точности 54%.

Все три модели были достаточно успешными в прогнозировании того, не использовались ли какие-либо противозачаточные средства, но все они испытывали затруднения в прогнозировании того, использовались ли контрацептивы длительного или краткосрочного действия. Из-за того, что ни одна из моделей обучения Sci-Kit не могла выполнить задачу, я использовал специальную нейронную сеть с прямой связью для выполнения задачи. Я построил последовательную модель, состоящую из трех плотных слоев, также включил отсев с вероятностью 10% после каждого слоя. Каждый слой использовал функцию активации «relu», в то время как выходной слой использовал функцию активации «softmax», поскольку это была проблема классификации нескольких классов. В модели также использовалась разреженная категориальная функция кросс-энтропийных потерь, которая минимизировалась в течение каждой эпохи обучения (эта модель обучалась на 100 эпохах). Скорость обучения была оптимизирована с помощью функции оптимизации Адама.

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense,Activation,Dropout
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.fit_transform(X_test)
model = Sequential()
model.add(Dense(9, activation='relu'))
model.add(Dropout(0.1))
model.add(Dense(5, activation = 'relu'))
model.add(Dropout(0.1))
model.add(Dense(3, activation = "softmax"))
model.compile(loss="sparse_categorical_crossentropy", optimizer = "adam")
model.fit(x=X_train, y=y_train, epochs=100)

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

predictions = model.predict(X_test)
new_predictions = []
for i in range(len(predictions)):
    
    if predictions[i][0] > predictions[i][1] and predictions[i][0] > predictions[i][2]:
        
        new_predictions.append(0)
        
    if predictions[i][1] > predictions[i][0] and predictions[i][1] > predictions[i][2]:
        
        new_predictions.append(1)
        
    if predictions[i][2] > predictions[i][0] and predictions[i][2] > predictions[i][1]:
        
        new_predictions.append(2)

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

model_binary = Sequential()
model_binary.add(Dense(9, activation='relu'))
model_binary.add(Dropout(0.1))
model_binary.add(Dense(5,activation='relu'))
model_binary.add(Dropout(0.1))
model_binary.add(Dense(1,activation='sigmoid'))
model_binary.compile(loss='binary_crossentropy', optimizer='adam')
scaler_binary = StandardScaler()
X_train = scaler_binary.fit_transform(X_train)
X_test = scaler_binary.fit_transform(X_test)
model_binary.fit(x=X_train, y=y_train, epochs = 100)

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