В этой статье я буду использовать некоторые данные, связанные с продолжительностью жизни для оценки следующих моделей: линейный, хребет, лассо и полиномиальная регрессия. Так что давайте прыгнем прямо в.
Я изучал тенденцию Denge в Сингапуре, где был недавний спайк в денге, особенно в Денге красная зона где я живу. Однако необработанные данные не были доступны на веб-сайте NEA.
Мне было интересно, у меня повлияло Денге, повлияло на продолжительность жизни людей в любой стране, в частности? Люди в богатых нациях живут дольше? Каковы факторы, влияющие на продолжительность жизни страны?
Поэтому я исследовал продолжительность жизни и искал данные по следующим аспектам (функциям):
- Уровень рождаемости
- Скорость рака
- Денге
- Индекс экологических показателей ( EPI )
- Валовой внутренний продукт ( GDP )
- Расходы на здравоохранение
- Цена сердечных заболеваний
- Население
- Область
- Плотность населения
- Скорость хода
Цель Ожидаемая продолжительность жизни измеряется в течение нескольких лет.
Допущения:
- Это средние значения страны
- Там нет различия между мужским и женщиной
Код Python доступен на моем Github Отказ
Процесс науки о данных
Я использовал следующие данные науки о данных в моем анализе:
- Сбор данных, очистка данных, анализ информационных данных
- Выбор функций, функция инженерии
- Выбор модели, модульная настройка и гиперпараметрическая настройка
- Оптимизация модели на основе выбранной производительности метрики
Инструменты, используемые для этого анализа, включают в себя:
- Библиотеки Python, в частности Numpy и Пандас Для манипулирования структурами данных
- Матплотлиб и Морской для визуализации
- Scikit – Учите и Statsmodels Для регрессионного анализа
Исследовательский анализ данных
Сначала я проверю мульти-коллинину между функциями.
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 лет.
Я мог бы собрать больше данных, расширив масштаб к городам вместо стран, и исследуя другие особенности (факторы), влияющие на продолжительность жизни. Кроме того, я мог бы разделить данные в мужские и женские категории для такого жизнеспособности регрессионного анализа.
Заключить, вот некоторые интересные идеи:
- Япония имеет самую высокую продолжительность жизни (83,7 года). Центральноафриканская республика (49,5 лет) и многие страны на африканском континенте находятся в нижней части масштаба. Сингапур занимает участие № 5 (82,7 года).
2. Берегите окружающую среду Отказ Это имеет самый большой коэффициент (воздействие) на продолжительность жизни страны.
Код Python для приведенного выше анализа доступен на моем Github – Не стесняйтесь ссылаться на него.
https://github.com/JNYH/Project-Luther
Видео презентация: https://youtu.be/gc2m_lvouu8.
Спасибо за чтение.