Временные ряды и машинное обучение

Машинное обучение для данных временных рядов на Python

Chris Holdgraf

Fellow, Berkeley Institute for Data Science

Знакомство с данными

  • Все наборы данных, используемые в курсе, находятся в открытом доступе
  • В сети доступно множество наборов данных — мы будем работать с теми, что размещены на Kaggle
Машинное обучение для данных временных рядов на Python

Акустические данные сердцебиения

  • Множество записей сердечных тонов от разных пациентов
  • У одних пациентов сердце работало нормально, у других — с отклонениями
  • Данные: аудиофайлы с метками для каждого файла
  • Сможем ли мы обнаружить «аномальные» удары сердца?
Машинное обучение для данных временных рядов на Python

Загрузка аудиоданных

from glob import glob
files = glob('data/heartbeat-sounds/files/*.wav')

print(files)
['data/heartbeat-sounds/proc/files/murmur__201101051104.wav',
 ...
 'data/heartbeat-sounds/proc/files/murmur__201101051114.wav']
Машинное обучение для данных временных рядов на Python

Чтение аудиоданных

import librosa as lr
# `load` accepts a path to an audio file
audio, sfreq = lr.load('data/heartbeat-sounds/proc/files/murmur__201101051104.wav')

print(sfreq)
2205

Частота дискретизации равна 2205, то есть в секунду содержится 2205 отсчётов

Машинное обучение для данных временных рядов на Python

Восстановление времени по отсчётам

  • Зная частоту дискретизации временного ряда, можно определить метку времени каждой точки относительно первой
  • Примечание: предполагается, что частота дискретизации постоянна и данные не теряются
Машинное обучение для данных временных рядов на Python

Создание массива времени (I)

  • Создайте массив индексов — по одному на каждый отсчёт — и разделите на частоту дискретизации

      indices = np.arange(0, len(audio))
      time = indices / sfreq
    
Машинное обучение для данных временных рядов на Python

Создание массива времени (II)

  • Найдите метку времени для (N-1)-й точки, затем используйте linspace() для интерполяции от нуля до этого момента

      final_time = (len(audio) - 1) / sfreq
      time = np.linspace(0, final_time, sfreq)
    
Машинное обучение для данных временных рядов на Python

Набор данных Нью-Йоркской фондовой биржи

  • Набор данных содержит котировки акций компаний за 10 лет
  • Можно ли найти закономерности в исторических данных и предсказать стоимость акций в будущем?
Машинное обучение для данных временных рядов на Python

Изучение данных

data = pd.read_csv('path/to/data.csv')

data.columns
Index(['date', 'symbol', 'close', 'volume'], dtype='object')
data.head()
         date symbol       close       volume
0  2010-01-04   AAPL  214.009998  123432400.0
1  2010-01-04    ABT   54.459951   10829000.0
2  2010-01-04    AIG   29.889999    7750900.0
3  2010-01-04   AMAT   14.300000   18615100.0
4  2010-01-04   ARNC   16.650013   11512100.0
Машинное обучение для данных временных рядов на Python

Временные ряды в Pandas DataFrame

  • Тип объекта каждого столбца можно узнать через атрибут dtypes
df['date'].dtypes
0    object
1    object
2    object
dtype: object
Машинное обучение для данных временных рядов на Python

Преобразование столбца в временной ряд

  • Чтобы столбец DataFrame воспринимался как временной ряд, используйте функцию to_datetime()
df['date'] = pd.to_datetime(df['date'])

df['date']
0   2017-01-01
1   2017-01-02
2   2017-01-03
Name: date, dtype: datetime64[ns]
Машинное обучение для данных временных рядов на Python

Давайте потренируемся!

Машинное обучение для данных временных рядов на Python

Preparing Video For Download...