异常检测(anomaly detection),即识别出与正常模式不一致的数据点,是数据科学中的一个重要任务。特别是在金融数据分析领域,异常检测可以识别出异常的市场行为,预测市场风险。
本文将介绍如何使用 PyCaret 这一强大的 Python 开源机器学习库,轻松标注出日经平均股价指数中的异常点。
本周一(2024 年 8 月 5 日),日经 225 指数大跌 12.4%,创下 1987 年以来最大单日跌幅
PyCaret 简介
PyCaret 是一个低代码的机器学习库,旨在简化从数据准备到模型部署的整个过程。它支持分类、回归、聚类、异常检测等多种机器学习任务。PyCaret 的异常检测模块提供了一些常用的异常检测算法,如 Isolation Forest、Local Outlier Factor 等。
PyCaret 的安装方法非常简单:
pip install pycaret
使用 PyCaret 进行异常检测
本文将使用 yfinance 库来获取日经平均股价指数的数据。
import yfinance as yf # pip install yfinance
import pandas as pd
# 下载今年的日经平均股价指数数据
nikkei = yf.download('^N225', start='2024-01-01', end='2024-08-06')
# 打印数据的前五行
print(nikkei.head())
数据示例如下:
Open High Low Close Adj Close Volume
Date
2023-05-01 29058.050781 29145.890625 29016.830078 29123.179688 29123.179688 73400000
2023-05-02 29278.800781 29278.800781 29083.130859 29157.949219 29157.949219 63900000
2023-05-08 29095.460938 29144.119141 28931.810547 28949.880859 28949.880859 74100000
2023-05-09 29020.630859 29262.359375 29020.630859 29242.820312 29242.820312 86400000
2023-05-10 29189.410156 29195.160156 29070.109375 29122.179688 29122.179688 87300000
接下来使用 PyCaret 的异常检测模块来标注数据中的异常点,
from pycaret.anomaly import *
# 初始化 PyCaret 的异常检测模块
s = setup(nikkei)
# 创建模型,这里使用 Isolation Forest 异常检测算法
model = create_model('iforest')
# 标注异常点
anomalies = assign_model(model)
# 打印结果的前五行
print(anomalies.head())
是的,仅需要这几行就完成了异常点的标注!
首先使用 setup()
函数初始化 PyCaret 的异常检测模块,该函数至少需要一个参数——要处理的数据(类型为Pandas 的 DataFrame
),而 yf.download()
返回的 nikkei
刚好正是待处理的数据。
接下来使用 create_model('iforest')
函数创建一个 Isolation Forest 模型。Isolation Forest 是一种常用的异常检测算法。
最后使用 assign_model()
函数将异常点标注到原始数据集上,并打印结果的前五行。
Open High Low Close ... Anomaly ...
Date ... ...
2023-05-01 29058.050781 29145.890625 29016.830078 29123.179688 ... 0 ...
2023-05-02 29278.800781 29278.800781 29083.130859 29157.949219 ... 1 ...
2023-05-08 29095.460938 29144.119141 28931.810547 28949.880859 ... 1 ...
2023-05-09 29020.630859 29262.359375 29020.630859 29242.820312 ... 0 ...
2023-05-10 29189.410156 29195.160156 29070.109375 29122.179688 ... 0 ...
标注后的数据集中将包含一个新列 Anomaly
,用 0 和 1 标示出哪些数据点是异常的。
可视化结果
我们还可以将日经平均股价指数中的异常点绘制在图表上,以便更直观地查看。
import matplotlib.pyplot as plt
# 筛选出异常点
anomalies_only = anomalies[anomalies['Anomaly'] == 1]
# 绘制结果
plt.figure(figsize=(10, 6))
plt.plot(anomalies.index, anomalies['Close'], label='Nikkei 225 Close Price')
plt.scatter(anomalies_only.index, anomalies_only['Close'], color='red', label='Anomalies')
plt.xlabel('Date')
plt.ylabel('Close Price')
plt.title('Nikkei 225 Anomaly Detection')
plt.legend()
plt.show()
通过上面的代码,我们可以得到一个图表,其中红色的点表示被标注为异常的点,
本文介绍了如何使用 PyCaret 进行异常检测,并在日经平均股价指数数据中标注出异常点。
PyCaret 提供了一个简洁而强大的接口,使得我们可以轻松地进行数据预处理、模型训练和结果预测。通过这种方法,可以快速地识别出金融数据中的异常点,从而为进一步的分析和决策提供依据。
希望本文对你有所帮助!如果你有任何问题或建议,欢迎在下方留言。