十几行 Python 代码就能标注出日经平均股价指数中的异常点

158 阅读3分钟

异常检测(anomaly detection),即识别出与正常模式不一致的数据点,是数据科学中的一个重要任务。特别是在金融数据分析领域,异常检测可以识别出异常的市场行为,预测市场风险。

本文将介绍如何使用 PyCaret 这一强大的 Python 开源机器学习库,轻松标注出日经平均股价指数中的异常点。

image-20240807130553271

本周一(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()

通过上面的代码,我们可以得到一个图表,其中红色的点表示被标注为异常的点,

image-20240807130217930


本文介绍了如何使用 PyCaret 进行异常检测,并在日经平均股价指数数据中标注出异常点。

PyCaret 提供了一个简洁而强大的接口,使得我们可以轻松地进行数据预处理、模型训练和结果预测。通过这种方法,可以快速地识别出金融数据中的异常点,从而为进一步的分析和决策提供依据。

希望本文对你有所帮助!如果你有任何问题或建议,欢迎在下方留言。