[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, Пратик Джоши, перевод Тао Цзюньцзе и Чена Сяоли.