[Stove AI] Машинное обучение 045 - Скрытое марковское моделирование для данных о запасах

машинное обучение искусственный интеллект Python scikit-learn

[Stove AI] Машинное обучение 045 - Скрытое марковское моделирование для данных о запасах

(Библиотеки Python и номера версий, используемые в этой статье: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2)

Данные об акциях — это очень, очень типичные данные временных рядов.Данные упорядочены по дате, а цена акции — это последовательность наблюдений, которую мы можем наблюдать, а скрытый механизм изменения, стоящий за ценой акции, — это скрытое состояние и вероятность перехода состояния, которые мы почти не видно.Поэтому вполне возможно использовать Скрытый Марков для моделирования акций и предсказания последующих изменений акций.Если будет прорыв в исследовании биржевых данных, то в карман попадет много денег.


1. Подготовьте набор данных

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

# 1, 准备数据集,使用tushare来获取股票数据
import tushare as ts
stock_df=ts.get_k_data('600123',start='2008-10-01',end='2018-10-01') # 获取600123这只股票的近十年数据
print(stock_df.info()) # 查看没有错误
print(stock_df.head())

Вышеприведенное загружает только ежедневные данные по акции 600123 за последние десять лет, но мы хотим получить увеличение цены закрытия, и нам необходимо дополнительно обработать данные.

# 准备数据集,此次我们用两个指标来计算HMM模型,股价涨幅和成交量
close=stock_df.close.values
feature1=100*np.diff(close)/close[:-1] # 股票涨幅的计算
print(close[:10])
print(feature1[:10]) # 查看涨幅计算有没问题

------------------------------------- потерять-- ------------------------------

[6.775 6.291 6.045 5.899 5.361 5.436 5.299 4.994 4.494 4.598] [ -7.14391144 -3.91034812 -2.41521919 -9.12018986 1.39899273 -2.52023547 -5.75580298 -10.01201442 2.31419671 9.98260113]

--------------------------------------------Заканчивать----- --------------------------------

# 由于计算涨幅之后的序列比原来的收盘价序列少一个(最开始的股价没法计算涨幅),故而需要减去一个
feature2=stock_df.volume.values[1:]
dataset_X=np.c_[feature1,feature2]
print(dataset_X[:5]) # 检查没错

2. Создайте модель HMM

Что касается модели HMM, я подробно объяснил ее в своей предыдущей статье, см.[Искусственный интеллект плиты] Машинное обучение 044 — Создание скрытых марковских моделей

# 创建HMM模型,并训练
from hmmlearn.hmm import GaussianHMM
model=GaussianHMM(n_components=5,n_iter=1000) # 暂时假设该股票有5个隐含状态
model.fit(dataset_X)

После моделирования с помощью модели HMM, как мы узнаем, хороша эта модель или плоха? Затем вам нужно сравнить прогнозируемые результаты с фактическими результатами, чтобы увидеть, согласуются ли они.

# 使用该模型查看一下效果
N=500
samples,_=model.sample(N)
# 由于此处我使用涨幅作为第一个特征,成交量作为第二个特征进行建模,
# 故而得到的模型第一列就是预测的涨幅,第二列就是成交量
plt.plot(feature1[:N],c='red',label='Rise%') # 将实际涨幅和预测的涨幅绘制到一幅图中方便比较
plt.plot(samples[:,0],c='blue',label='Predicted%')
plt.legend()

股票涨幅的实际值和预测值

Кажется, что результаты сопоставления не очень хорошие, давайте посмотрим на прогноз объема транзакции:

plt.plot(feature2[:N],c='red',label='volume')
plt.plot(samples[:,1],c='blue',label='Predicted')
plt.legend()

股票成交量的实际值和预测值

Эти два результата не очень хороши, прогнозируемое значение и фактическое значение сильно различаются, что указывает на то, что модель сложна для решения этого проекта. Давайте подумаем об этом с другой точки зрения: если так просто предсказать тренд акций, все будут делать деньги на фондовом рынке, и в конечном итоге фондовому рынку придется закрыть свои двери. Читатели заинтересованы в оптимизации количества скрытых состояний модели HMM и могут получить лучшие результаты сопоставления, но также может произойти переоснащение, поэтому я думаю, что оптимизация не очень полезна.

########################резюме########################## ######

1. Вот простой пример использования модели HMM для анализа биржевых данных.Хотя практическая ценность невелика, он может дать некоторые идеи для других сложных алгоритмов.

**2, опять же, держитесь подальше от фондового рынка, держитесь подальше от вреда! **

#################################################################


Примечание. Эта часть кода была загружена в (мой гитхаб), добро пожаловать на скачивание.

Использованная литература:

1. Классические примеры машинного обучения Python, Пратик Джоши, перевод Тао Цзюньцзе и Чена Сяоли.