НачатьНачать бесплатно

Разработка признаков на основе объёма торгов

Чтобы повысить точность предсказаний, мы будем использовать нелинейные модели. В линейных моделях признаки должны быть линейно связаны с целевой переменной. Другие алгоритмы машинного обучения способны комбинировать признаки нелинейным образом. Например, цена может расти тогда, когда скользящее среднее цены увеличивается, а скользящее среднее объёма — уменьшается. Чтобы уловить такие взаимодействия, нужно либо перемножить признаки, либо применить алгоритм, поддерживающий нелинейные зависимости (например, случайный лес).

Чтобы включить в анализ дополнительную информацию, которая может взаимодействовать с другими признаками, добавим слабо коррелированные переменные. Начнём с данных об объёме торгов — они доступны в lng_df в столбце Adj_Volume.

Прежде чем приступить, учтите: функции TA-Lib (например, SMA()) принимают массивы Numpy, а не объекты pandas. Чтобы преобразовать Series или DataFrame в массив Numpy, используйте атрибут .values.

Это упражнение является частью курса

Машинное обучение для финансов на Python

Посмотреть курс

Инструкции к упражнению

  • Вычислите однодневное процентное изменение объёма торгов (используйте pct_change() из pandas) и запишите результат в столбец Adj_Volume_1d_change таблицы lng_df.
  • Вычислите 5-дневное скользящее среднее однодневного процентного изменения объёма торгов и запишите результат в столбец Adj_Volume_1d_change_SMA таблицы lng_df.
  • Постройте гистограммы двух созданных признаков, используя список new_features.

Интерактивное практическое упражнение

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

# Create 2 new volume features, 1-day % change and 5-day SMA of the % change
new_features = ['Adj_Volume_1d_change', 'Adj_Volume_1d_change_SMA']
feature_names.extend(new_features)
lng_df[____] = lng_df['Adj_Volume'].____
lng_df[____] = talib.SMA(____[____].____,
                        timeperiod=____)

# Plot histogram of volume % change data
lng_df[____].plot(kind='hist', sharex=False, bins=50)
plt.show()
Редактировать и запускать код