Рубрики
Без рубрики

Как я использовал регрессионный анализ, чтобы проанализировать продолжительность жизни с Scikit-Survey и StatsModels

Автор оригинала: Black Raven.

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

Я изучал тенденцию Denge в Сингапуре, где был недавний спайк в денге, особенно в Денге красная зона где я живу. Однако необработанные данные не были доступны на веб-сайте NEA.

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

Поэтому я исследовал продолжительность жизни и искал данные по следующим аспектам (функциям):

Цель Ожидаемая продолжительность жизни измеряется в течение нескольких лет.

Допущения:

  1. Это средние значения страны
  2. Там нет различия между мужским и женщиной

Код Python доступен на моем Github Отказ

Процесс науки о данных

Я использовал следующие данные науки о данных в моем анализе:

  • Сбор данных, очистка данных, анализ информационных данных
  • Выбор функций, функция инженерии
  • Выбор модели, модульная настройка и гиперпараметрическая настройка
  • Оптимизация модели на основе выбранной производительности метрики

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

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

Сначала я проверю мульти-коллинину между функциями.

sns.set(rc={'figure.figsize':(10,7)})sns.heatmap(df.corr(), cmap="seismic", annot=True, vmin=-1, vmax=1)

Кажется, есть какая-то сильная коллинировка, обозначающая коробки в темно-красном и темно-синем, как вы можете видеть на изображении ниже.

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

Как насчет корреляции между особенностями и целью? Чтобы жить долгой жизнью, у вас должна быть низкая частота хода, высокие расходы на здравоохранение, заботиться об окружающей среде и иметь меньше младенцев (в соответствии с диаграммой корреляции).

Давайте посмотрим на начальный парный участок.

sns.pairplot(df, height=1.5, aspect=1.5)

Там, кажется, необходимость удалить выбросы во многих особенностях, например, денге, ВВП, население, площадь и плотность населения.

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

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

Искать значительные функции, я бросил одну функцию за раз, чтобы увидеть его влияние на простую модель регрессии. Глядя на оценку R ², эти 3 особенности (скорость рождаемости, EPI, скорость хода) выбираются, потому что модель будет негативно затронута без них.

Далее я удалил Выбросы и просмотрите P-значения на Statsmodels Отказ Я набрал еще одну значительную особенность (плотность населения). Когда P-значение функции составляет менее 0,05, он считается хорошей особенностью, так как я выбрал 5% в качестве уровня значимости.

После этого я подал заявку Журнал Функции для всех функций и набрали еще 4 важных функция (ВВП, уровень болезни сердца, население и область).

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

Функции также могут быть выбраны с помощью Lassocv Особенность в Sklearn Отказ

Наконец я снова посмотрел на пару сюжета со всеми значительными функциями. Снятые участки теперь красиво распространяются с некоторыми четкими тенденциями.

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

  • Линейный Регрессия (прямая линия, которая приближается к взаимосвязи между зависимыми переменными и независимой целевой переменной)
  • Хребет Регрессия (Это уменьшает сложность модели при сохранении всех коэффициентов в модели, известной как L2 STALTY)
  • Л АССО Регрессия (Оператор наименьших абсолютных сокращений и отбор снижает сложность модели путем наказания наказания моделей коэффициенты до нуля, например, наказание L1)
  • Степень 2 Polynomial Регрессия (линия кривой к приближению взаимосвязей между зависимыми переменными и независимой целевой переменной)

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

Это подтверждается Перекрестная проверка Использование Клыко (с 5 расколами).

Наконец, я проверил ошибку остатков против предположений. Ошибки остатков должны быть нормально распределены с равной дисперсией вокруг среднего нуля. Обычный квартиль-квартиль с участием также выглядит приемлемо нормально.

Поскольку у меня есть только 250 строк (данные, ограниченные количеством стран мира), я использовал все данные, установленные для имитации набора тестовых данных (Примечание: это делается для академической цели, не практично, как оно приведет к Утечка данных ). Я использовал Кребец Креста Креста С 10 разбивкой для оценки производительности модели.

from sklearn.model_selection import cross_val_score
from sklearn.model_selection import KFold
kf = KFold(n_splits=5, shuffle=True, random_state = 1)
lm = LinearRegression()
lm.fit(X_train, y_train)
cvs_lm = cross_val_score(lm, X, y, cv=kf, scoring='r2')
print(cvs_lm)

В значения R² достаточно вариации от 0,49 до 0,82, но средний результат составляет около 0,69, что вполне удовлетворительно.

df = pd.read_csv('df3.csv')
X = df[ ['Birth Rate', 'EPI', 'GDP', 'Heart Disease Rate', 'Population', 'Area', 'Pop Density', 'Stroke Rate'] ].astype(float)
X = np.log(X)
y = df[ "Life Expectancy" ].astype(float)
X = sm.add_constant(X)

model = sm.OLS(y, X)
results = model.fit()
results.summary()

Если вы не затронуты функциями, ожидаемая продолжительность жизни составляет 62 года. Если у вашей страны низкий уровень рождаемости, добавьте еще 5 лет в вашу жизнь. Если EPI (индекс производительности окружающей среды) высока, добавьте еще 8 лет в вашу жизнь. Если вы живете в богатой стране, добавьте полгода в свою жизнь. Наконец, для каждого блока (или скорее журнала) снижение скорости хода, в вашу жизнь можно было добавить еще 5 лет.

Я мог бы собрать больше данных, расширив масштаб к городам вместо стран, и исследуя другие особенности (факторы), влияющие на продолжительность жизни. Кроме того, я мог бы разделить данные в мужские и женские категории для такого жизнеспособности регрессионного анализа.

Заключить, вот некоторые интересные идеи:

  1. Япония имеет самую высокую продолжительность жизни (83,7 года). Центральноафриканская республика (49,5 лет) и многие страны на африканском континенте находятся в нижней части масштаба. Сингапур занимает участие № 5 (82,7 года).

2. Берегите окружающую среду Отказ Это имеет самый большой коэффициент (воздействие) на продолжительность жизни страны.

Код Python для приведенного выше анализа доступен на моем Github – Не стесняйтесь ссылаться на него.

https://github.com/JNYH/Project-Luther

Видео презентация: https://youtu.be/gc2m_lvouu8.

Спасибо за чтение.