ОПИСАНИЕ ПРОЕКТА
Депрессия… Часто ли мы задаемся вопросом о том, как она влияет на общее качество жизни среди студентов? На мой субъективный взгляд, это одна из глобальных проблем, которая заслуживает не только внимания, но и активных действий. Данный проект, в свою очередь, направлен на шаг к пониманию и решению этой сложной задачи. Проанализировав факторы, способствующие развитию депрессии, а именно: академическое давление, финансовые трудности, качество сна, социальные аспекты и так далее, мы сможем с разных сторон и более глубоко рассмотреть данную проблему. Вспомним слова Альберта Эйнштейна: «В кризисной ситуации важно не только решить проблему, но и понять ее корни…».
В ходе работы было более разумным применить следующие модели графиков: столбчатые диаграммы, ящик с усами и тепловую карту. Также в анализе использовались базы данных, обнаруженные на сайте Kaggle. Для более грамотной терминологии кода и ответов на некоторые вопросы был использован DeepSeek. А для предсказания депрессии у студентов выбрана многослойная нейронная сеть (Deep Neural Network, DNN). Цветовая же гамма применялась по следующим мотивам: серый — цвет депрессии, зелёный — олицетворение ментального здоровья человека.
ЭТАПЫ РАБОТЫ
Загрузка и обработка данных
Для начала нам нужно создать код, который, в свою очередь, подготовит данные для дальнейшего анализа, включая визуализацию и построение моделей машинного обучения, чтобы предсказать вероятность депрессии среди студентов.
import pandas as pd import os import numpy as np import matplotlib.pyplot as plt import seaborn as sns from sklearn. model_selection import train_test_split from sklearn. preprocessing import LabelEncoder, StandardScaler from sklearn.ensemble import RandomForestClassifier from sklearn. metrics import accuracy_score, classification_report, confusion_matrix import tensorflow as tf from tensorflow.keras.models import load model from tensorflow. keras.models import Sequential from tensorflow.keras. layers import Dense, Dropout from tensorflow.keras.optimizers import Adam import warninas warnings.filterwarnings («ignore»)
sns.set_style («darkgrid"') custom_palette = sns. color_palette ([»#4D4D4D», «#6A9F6F», «#A3D977», «#4b803b»]) file_path = «Student Depression.csv» df = pd. read_csv (file_path) df. head ()
Вышеупомянутый код импортирует библиотеки для начала работы с данными, загружает их, настраивает визуализацию (устанавливается стиль для графиков, и задается пользовательская цветовая палитра), выводит первые строки для предварительного просмотра.
Анализ распределения ключевых переменных
Далее нам нужно создать визуализацию распределения ключевых переменных из DataFrame df с использованием библиотеки matplotlib и seaborn.
fig, axes = plt.subplots (2, 3, figsize=(18, 10)) fig.suptitle («Распределение ключевых переменных», fontsize=16) for ax in axes.flat: ax.set facecolor (custom palette [0]) ax.grid (False) sns.histplot (df ['Age»], bins=20, kde=True, ax=axes [0, 0], color=custom_palette [1], edgecolor= ' #000') axes 10, 0].set_title («Возраст») sns.histplot (df [«CGPA»], bins=20, kde=True, ax=axes [0, 1], color=custom_palette [2], edgecolor='#000') axes [0, 1].set_title («Средний балл») sns.histplot (df [«Work/Study Hours»], bins=20, kde=True, ax=axes [0, 21, color=custom_palette [3], edgecolor='#000') axes [0, 2].set_title («Учебные/рабочие часы») sns.histplot (df [«Financial Stress'], bins=5, discrete=True, ax=axes [1, 01, color=custom_palette [1], edgecolor='#000') axes [1, 0].set_title („Финансовый стресс“) sns.histplot (df [„Academic Pressure“], bins=5, discrete=True, ax=axes [1, 1], color=custom palette [2], edgecolor= '#000') axes [1, 1].set_title („Академическая нагрузка“) sns.histplot (df ['Depression»], bins=2, discrete=True, ax=axes [1, 2], color=custom_palette [3], edgecolor='#000') axes [1, 2].set_title («Депрессия») plt.tight_layout (rect=[0, 0, 1, 0])plt.show () plt.show ()
Этот код позволяет визуализировать распределение ключевых переменных, таких как возраст, средний балл, учебные/рабочие часы, финансовый стресс, академическая нагрузка и депрессия, что помогает лучше понять структуру данных.
Гистограммы распределения основных признаков позволяют выявить закономерности и особенности среди студентов, а также определить возможные факторы риска депрессии.
1.Возраст: большинство респондентов находятся в возрастном диапазоне 18-30 лет, что соответствует студентам и молодым специалистам. Распределение имеет небольшой сдвиг в сторону старших возрастных групп.
2.CGPA (академическая успеваемость): значения CGPA в основном сосредоточены в диапазоне 7-9, что указывает на то, что большинство студентов имеют хорошую академическую успеваемость. Отсутствие значимой корреляции CGPA с депрессией говорит о том, что успеваемость сама по себе не является определяющим фактором.
3.Рабочие/учебные часы: основная масса студентов тратит 6-10 часов в день на учебу или работу. Увеличенное количество рабочих/учебных часов может способствовать стрессу, но этот фактор требует дополнительного анализа.
4.Финансовый стресс: распределение показывает, что большинство студентов испытывают средний или высокий уровень финансового стресса. Это подтверждает необходимость поддержки студентов в финансовых вопросах.
5.Академическая нагрузка: распределение показывает, что студенты чаще всего оценивают свою учебную нагрузку на 3-5 баллов по шкале, что свидетельствует о том, что для большинства она воспринимается как высокая.
6.Статус депрессии: примерно 58,5% респондентов имеют депрессивное состояние. Это высокий показатель, указывающий на распространенность проблемы среди студентов.
Выводы: 1)финансовый стресс и академическая нагрузка оказывают заметное влияние на студентов, большинство респондентов испытывают средний или высокий уровень этих факторов, что может быть причиной высокого уровня депрессии; 2)большинство студентов имеют хорошую академическую успеваемость (CGPA 7-9), но она не является ключевым фактором депрессии; 3)рабочие/учебные часы могут быть дополнительным фактором стресса, однако требуется детальный анализ их влияния; 4)высокий процент студентов с депрессией (58,5%) требует особого внимания к психическому здоровью студентов и разработки профилактических программ.
Анализ корреляционной матрицы
После переходим к коду, который выполняет корреляционный анализ между переменными в DataFrame df. Визуализация корреляционной матрицы в виде тепловой карты помогает быстро и наглядно оценить взаимосвязи между переменными.
df_corr = df. copy () categorical cols = [«'Gender», «Sleep Duration», «Dietary Habits», «Degree», «Have you ever had suicidal thoughts?» «Family History of Mental Illness»] for col in categorical cols: df_corr[col] = LabelEncoder ().fit_transform (df_corr [col]) corr_matrix = df_corr. corr (numeric_only=True) plt.figure (figsize= (14, 6)) sns.heatmap (corr_matrix, annot=True, cmap=custom_palette, fmt=» .2f», linewidths=0.5) plt.title («Корреляция между переменными») plt.show ()
Корреляционная матрица позволяет определить взаимосвязи между различными факторами, влияющими на депрессию студентов.
Основные наблюдения: 1)финансовый стресс имеет значительную положительную корреляцию с депрессией. Это указывает на то, что студенты, испытывающие финансовые трудности, имеют более высокий риск депрессии; 2)академическая нагрузка демонстрирует умеренную положительную корреляцию с депрессией. Это подтверждает гипотезу о том, что высокая учебная нагрузка может способствовать ухудшению психического здоровья; 3)рабочие/учебные часы имеют слабую положительную корреляцию с депрессией. Это означает, что студенты, проводящие больше времени за учебой или работой, могут быть подвержены депрессии но этот фактор не является решающим; 4)CGPA (академическая успеваемость) не имеет значимой корреляции с депрессией. Это означает, что уровень успеваемости не является ключевым фактором риска депрессии; 5)наличие суицидальных мыслей и семейная история психических заболевани сильно коррелируют с депрессией. Это подтверждает, что психологические и генетические факторы играют важную роль.
Выводы: 1)финансовый стресс и академическая нагрузка являются основными предикторами депрессии; 2)рабочие/учебные часы могут оказывать влияние, но не являются ключевым фактором; 3)успеваемость не оказывает значимого влияния на риск депрессии; 4)личностные и семейные психологические факторы значительно повышают вероятность депрессии.
Анализ дополнительных факторов, влияющих на депрессию
Далее создаем код для визуализации анализа дополнительных факторов, влияющих на состояние человека.
fig, axes = plt.subplots (1, 3, figsize= (18, 6)) fig.suptitle («Дополнительные факторы, влияющие на депрессию», fontsize=16) sns. countplot (x="Sleep Duration», hue="Depression», data=d, palette=custom_palette, ax=axes [0]) axes [O].set title «Продолжительность сна и депрессия») sns.countplot (×="Dietary Habits», hue="Depression», data=df, palette=custom_palette, ax=axes [1]) axes [1].set title («Пищевые привычки и депрессия») sns.boxplot (x="Depression», y="Study Satisfaction», data=df, palette=custom_palette, ax=axes [2]) axes [2].set title («Удовлетворенность учебой и депрессия») plt.tight_layout (rect=[0, 0, 1, 0.95]) plt.show ()
В данном разделе представлены графики, иллюстрирующие влияние продолжительности сна, пищевых привычек и удовлетворенности учебой на вероятность депрессии среди студентов.
- Влияние продолжительности сна на депрессию: на графике отображено распределение студентов по продолжительности сна, сгруппированное по наличию депрессии. Что можно отметить: 1)студенты, спящие менее 5 часов, чаще находятся в депрессии; 2)оптимальная продолжительность сна (7-8 часов) коррелирует с меньшей вероятностью депрессии; 3)группы с экстремально низким и высоким количеством сна имеют более высокий уровень депрессии. Из этого следует: 1)недостаток сна оказывает значительное влияние на психическое состояние студентов; 2)слишком длинный сон также может быть индикатором депрессии; 3)оптимальное количество сна (7-8 часов) может быть защитным фактором против депрессии.
- Влияние пищевых привычек на депрессию: на графике представлено распределение студентов в зависимости от их диетических привычек, сгруппированное по наличию депрессии. Что можно отметить: 1)студенты с нездоровыми пищевыми привычками чаще страдают от депрессии; 2)те, кто придерживается умеренно здорового питания, имеют сбалансированное распределение; 3)студенты с полностью здоровыми привычками имеют наименьший уровень депрессии. Из этого следует: 1)рацион питания может играть роль в психическом здоровье студентов; 2)несбалансированное питание может способствовать ухудшению самочувствия и усилению депрессивных симптомов; 3)поддержание здорового питания может быть одним из методов профилактики депрессии.
- Влияние удовлетворенности учебой на депрессию: график показывает связь между уровнем удовлетворенности учебой и вероятностью депрессии. Что можно отметить: 1)студенты с низким уровнем удовлетворенности учебой имеют самый высокий уровень депрессии; 2)при увеличении удовлетворенности уровень депрессии постепенно снижается; 3)студенты с высокой удовлетворенностью учебой демонстрируют наименьшую предрасположенность к депрессии. Из этого следует: 1)низкая удовлетворенность учебой является фактором риска депрессии; 2)академический стресс и разочарование в учебном процессе могут способствовать ухудшению психического состояния; 3)развитие более комфортной образовательной среды и внедрение программ психологической поддержки могут снизить вероятность депрессии среди студентов.
Обучение нейронной сети (DNN)
Изначально задачей данного проекта было создание программы, способной прогнозировать уровень стресса у студентов. Для этого мы провели глубокий анализ факторов, влияющих на уровень депрессии, его можно наблюдать выше, где выявлены основные причины стресса. Однако, чтобы сделать прогнозы более точными и детальными, пришлось обратиться к современным технологиям машинного обучения а именно: к нейронным сетям. Ведь они, как и человеческий мозг, способны находить сложные взаимосвязи в данных, которые не всегда очевидны на первый взгляд. Взор пал на многослойную нейронную сеть (Deep Neural Network, DNN), так как она идеально подходит для задач прогнозирования и классификации, особенно когда речь идет о таких сложных и многогранных явлениях, как стресс и депрессия.
Обратимся к коду, который выполняет предварительную обработку данных и создает модель глубокой нейронной сети (DNN) для предсказания депрессии у студентов.
df_cleaned = df. copy () categorical_cols = ['Gender», «Sleep Duration», «Dietary Habits», «Degree»,"Have you ever had suicidal thoughts?», «Family History of Mental Illness»] for col in categorical_cols: df_cleaned [col] = LabelEncoder).fit_transform (df_cleaned [col]) df_cleaned [«Financial Stress»].fillna (df_cleaned [«Financial Stress»].median (), inplace=True) X = df_cleaned.drop (columns= [«id», «City», «Profession», «Depression»]) y = df_cleaned [«Depression»] #Масштабирование данных scaler = StandardScaler () X scaled = scaler.fit transform (X) X_train, X_test, y_train, y_test = train_test_split (X_scaled, y, test_size=0.2, random_state=42, stratify=y) model dnn = Sequential ([ Dense (128, activation='relu', input_shape=(X_train. shape [11 ,)), Dropout (0.3), Dense (64, activation=' relu'), Dropout (0.2), Dense (32, activation='relu'), Dense (1, activation='sigmoid') ]) model_dnn. compile (optimizer=Adam (learning_rate=0.001), loss='binary_crossentropy', metrics=['accuracy']) history = model_dnn. fit (X_train, y_train, epochs=100, batch_size=32, validation_data=(X_test, _test), verbose=1)
#Оценка модели loss, accuracy = model_dnn. evaluate (X_test, _test) print (f"Точность модели DNN: {accuracy * 100:.2f}%»)
Как устроена модель DNN в данном случае: она состоит из нескольких слоев, каждый из которых выполняет определенные вычисления: 1)входной слой (принимает на вход 14 признаков, включая финансовый стресс, академическую нагрузку, привычки сна и другие, данные предварительно нормализуются с помощью StandardScaler, чтобы улучшить процесс обучения); 2)скрытые слои: в модели используются три скрытых слоя, каждый из которых выполняет обработку входных данных: первый скрытый слой: 128 нейронов, активация ReLU (отвечает за первичное выявление зависимостей между признаками, использует Dropout (0.3) для предотвращения переобучения), второй скрытый слой: 64 нейрона, активация ReLU (обрабатывает более сложные связи между признаками, использует Dropout (0.2) для увеличения обобщающей способности модели), третий скрытый слой: 32 нейрона, активация ReLU (отвечает за финальную обработку перед классификацией); 3)выходной слой: состоит из 1 нейрона с активацией sigmoid (предсказывает вероятность депрессии (от 0% до 100%)).
Как работает модель: 1)шаг 1: подготовка данных (данные очищаются и нормализуются, категориальные переменные кодируются); 2)шаг 2: обучение модели (данные разбиваются на обучающую (80%) и тестовую (20%) выборки, модель обучается на 100 эпохах с размером батча 32, в качестве оптимизатора используется Adam, так как он хорошо подходит для сложных задач классификации); 3)шаг 3: оценка модели (после обучения модель тестируется на новых данных, используются метрики точности (ассигасу), полноты (recall) и F1-score); 4)шаг 4: предсказание депрессии (новые данные (данные студента) передаются в нейросеть, модель возвращает вероятность депрессии в процентах, чем выше значение, тем выше вероятность, что студент находится в депрессии).
Также была создана функция для прогнозирования. Она же, в свою очередь, позволяет оценить уровень стресса для любого человека:
def predict_depression_dnn (model, scaler, input_data): Функция принимает данные о студенте, масштабирует их и предсказывает вероятность депрессии в процентах. input_data_scaled = scaler.transform ([input_data]) probability = model.predict (input_data_scaled) [0][0] * 100 return probability
Далее создается список test_samples, который содержит тестовые данные. Каждый элемент списка — это массив данных о студенте, к примеру: возраст, продолжительность сна и так далее.
test samples = new test predictions = I [0, 20, 3, 0, 7.8, 3, 0, 2, 3, 6, 4, 0, 3, 01, [1, 29, 5, 1, 6.0, 2, 1, 5, 5, 5, 2, 1, 4, 11, [0, 23, 2, 0, 9.0, 5, 0, 3, 1, 7, 5, 0, 2, 01, [1, 27, 4, 0, 7.1, 4, 1, 4, 4, 6, 3, 1, 4, 11, [0, 21, 1, 0, 8.5, 5, 0, 2, 2, 8, 5, 0, 1, 01, [1, 30, 5, 1, 5.8, 1, 0, 6, 5, 4, 2, 1, 5, 11, [0, 19, 3, 0, 7.6, 3, 1, 3, 3, 7, 4, 0, 3, 01, [1, 24, 4, 0, 6.4, 2, 1, 4, 4, 5, 3, 1, 4, 11, [0, 28, 2, 0, 8.1, 4, 0, 2, 2, 7, 5, 0, 2, 01, [1, 26, 5, 1, 5.2, 1, 0, 6, 5, 4, 2, 1, 5, 1] predictions_dn = [predict_depression_dn (model_dnn, scaler, sample) for sample in test_samples] for i, prob in enumerate (predictions_dnn): print (f"Тестовый случай {i+1}: вероятность депрессии = {orob: 2€1%»)
Таким образом, можно получить примеры вывода для каждого тестового случая:
Тестовый случай 1: вероятность депрессии = 99,98% Тестовый случай 2: вероятность депрессии = 3,19% Тестовый случай 3: вероятность депрессии = 99,91% Тестовый случай 4: вероятность депрессии = 99,88% Тестовый случай 5: вероятность депрессии = 99,55% Тестовый случай 6: вероятность депрессии = 0,03% Тестовый случай 7: вероятность депрессии = 99,96% Тестовый случай 8: вероятность депрессии = 99,97% Тестовый случай 9: вероятность депрессии = 99,98% Тестовый случай 10: вероятность депрессии = 0,06%
ОБЩИЕ ВЫВОДЫ
В ходе исследования было выявлено несколько ключевых факторов, влияющих на депрессивное состояние студентов:
- Финансовый стресс — основной предиктор депрессии. Студенты, испытывающие высокие финансовые трудности, чаще страдают от депрессии.
- Академическая нагрузка — умеренно коррелирует с депрессией, особенно у студентов с высокой учебной нагрузкой.
- Рабочие/учебные часы — студенты, проводящие больше времени за учебой или работой, более подвержены депрессивным состояниям.
- Семейная история психических заболеваний — наличие психических расстройств у членов семьи повышает вероятность депрессии у студента.
- Суицидальные мысли — практически все студенты, указавшие наличие суицидальных мыслей, имели статус депрессии.
Подводя итог всему вышесказанному, можно сделать вывод: финансовые и академические факторы оказывают значительное влияние на психическое состояние студентов. Модель случайного леса показала высокую точность (83.6%) в предсказании депрессии, что подтверждает возможность использования машинного обучения для оценки риска депрессивных состояний среди студентов. Также была создана функция, которая прогнозирует вероятность депрессии, при переодическом и систематическом ее использовании можно предотвратить депрессию у студента. Более того, ее можно использовать для отслеживания ментального здоровья человека на дистанции.
БЛОКНОТ И ДАТАСЕТ



