www.machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

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

Дата публикации Sep 16, 2019

Введение

Линейная регрессия - очень распространенная модель, используемая Data Scientist. Результат или целевая переменная объясняется набором функций. Есть случай, когда одна и та же переменная собирается во времени, и мы использовали последовательность измерений этой переменной, сделанную через регулярные промежутки времени. Добро пожаловать во временные ряды. Одно из отличий от стандартной линейной регрессии заключается в том, что данные не обязательно независимы и не обязательно одинаково распределены. Работа с временными рядами может быть разочаровывающей, поскольку это означает, что вы должны найти корреляцию между задержкой или ошибками любого предыдущего предсказания значения и самого себя. Кроме того, порядок заказа и изменение порядка изменят смысл данных. Из-за своей сложности Data Scientist иногда терялся в процессе анализа временных рядов. В этом блоге я собираюсь поделиться полным анализом временных рядов, руководствуясь одним из хорошо известных методов Data Science: OSEMIN.

Контекст и используемые данные

На рисунке выше показана методология, использованная в моем исследовании: от сбора данных до подведения итогов.

Данные, использованные для этого анализа, содержали дату и количество 1461 ежедневных несчастных случаев в Великобритании с 1 января 2014 года по 31 декабря 2017 года. Я использовал набор данных из Kaggle для этого упражнения. Я загрузил CSV-файл и использовал популярный код Python «pd.read_csv», чтобы сохранить его в фрейме данных. Никакие другие независимые переменные не были рассмотрены в этом анализе, поскольку я сосредоточен на временных рядах.

Основная цель этого исследования - объяснить различные этапы полного проекта по науке о данных. Другие цели состоят в том, чтобы выяснить, зависит ли количество несчастных случаев за день от количества несчастных случаев за тот или иной день.

3 вопроса, на которые пытается ответить исследование:

  1. Какова связь между количеством несчастных случаев на текущий день и накануне?
  2. Есть ли какая-либо модель, которая может помочь предсказать (или предотвратить) количество несчастных случаев в Великобритании в любой день?
  3. Связан ли месяц года или день недели с количеством несчастных случаев за этот месяц?

Обработка данных

Данные были относительно чистыми и готовы к использованию. Тем не менее, мне пришлось сделать некоторые преобразования для целей анализа.

Во-первых, я изменил столбец с датами, чтобы он стал индексом моего фрейма данных. При работе с данными временных рядов в Python важно всегда следить за тем, чтобы даты использовались в качестве значений индекса и воспринимались Python как истинный объект «дата».

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

Наконец, для выполнения соответствующей EDA я добавляю еще три (3) столбца к моим данным: один для месяца, дня и дня недели соответственно. Это должно помочь мне понять тенденции, основанные на месяце года, дне недели. Кроме того, я могу группировать данные на основе этих новых функций, чтобы лучше понимать мои данные.

Ниже показано, как выглядят мои данные после обработки и добавления трех столбцов.

Образец моих данных, созданных с использованием:data_cleaned_df.sample (5, random_state = 0)

Исследуя мои данные

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

Быстрое представление моих данных:

Ежедневное число несчастных случаев снижается с 400 в день в 2014 году до 356 в 2017 году. В 2017 году ежедневное количество несчастных случаев достигло минимума в 322. Стандартное отклонение по сравнению со среднесуточным составляет около 17 несчастных случаев в день. (менее 5% от среднего).

Описательная статистика серии предоставлена ​​«df.describe»

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

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

Ежедневные несчастные случаи в год.
Ежедневная авария в день недели - не сосредотачивайтесь на порядке дней;)

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

модель

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

Тест Дики Фуллера - это статистический тест для проверки стационарности. Нулевая гипотеза для теста состоит в том, что временной ряд не является стационарным. Поэтому, если статистика теста меньше критического значения, мы отвергаем нулевую гипотезу и говорим, что ряд является стационарным.

После выполнения теста Дики Фуллера с доверительной вероятностью 95% мы отвергаем нулевую гипотезу. Серия является стационарной, как показано на графике ниже.

Данные выглядят стационарно. Также тест Дики Фуллера возвращает значение р <0,05

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

Чтобы выбрать соответствующую модель временного ряда, я построил ACF и PACF, чтобы определить соответственно значения q и p для ARIMA.

После разных итераций я выбрал ARMA (2,3) для представления данных. Для каждого шага мне приходилось переходить к другой модели каждый раз, когда я получал не значимые коэффициенты.

Основываясь на этом результате, число несчастных случаев будет объясняться числом за два дня до и скользящей средней (лаг 3)

Хотя остатки этой модели приближаются к нормальному распределению, обнаруженная ARMA не смогла предсказать невидимые данные. Помните, я разделил свои данные и сохранил набор тестов. Пройдя тестирование модели, прогнозы оказались ужасными. Сокращение количества наблюдений в данных тестирования не улучшило качество прогноза. Я пришел к выводу, что ARMA было не лучшим для представления данных. Логика, верно? Другие факторы могут влиять на количество ДТП в день, например, тип транспортных средств, площадь, возраст водителя и так далее.

Вывод и соображения

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

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


Любые мысли, пожалуйста, оставьте мне комментарий, и мы можем обсудить.

Мои коды, модели и используемые данные доступны на моем GitHub. Пожалуйста, используйте ссылку ниже:

FabriceMesidor / TimeSeries_accident_UK

Простая регрессия временных рядов для понимания различных этапов моделирования Линейная регрессия является очень распространенной моделью…

github.com

Оригинальная статья

Footer decor

© www.machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map