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