Travis 股票预测实战 - 第 14 章:特征工程 - 提取有用信息

前言

大家好,欢迎来到 Travis 股票预测实战专栏的第 14 章。这一章,我们将深入探讨特征工程,特别是如何从海量的股票数据中提取出有用的特征信息。在我们开始之前,让我分享一个小故事:几年前,我在研究股票分析时,总是被大量的数据搞得晕头转向,找不到头绪。后来,我的朋友 Jack 教会了我特征工程的重要性,这让我豁然开朗。今天,我将把这些知识分享给大家,希望能帮助你们在股票分析的道路上少走弯路。

什么是特征工程?

特征工程是数据科学和机器学习中最重要的一步之一。它的目的是通过从原始数据中提取有用的特征来提升模型的表现。特征是能够帮助模型更好地理解数据的属性。对于股票数据来说,特征工程可以帮助我们从价格、交易量等数据中提取出反映市场趋势和股票潜在价值的指标。

技术指标简介

在股票分析中,技术指标是一种常用的工具,用于帮助分析市场趋势和价格动向。以下是几个常见且重要的技术指标:

移动平均线(Moving Average)

移动平均线是最常用的技术指标之一。它通过平滑价格数据来帮助识别趋势。常见的移动平均线有简单移动平均线(SMA)和指数移动平均线(EMA)。

相对强弱指数(Relative Strength Index, RSI)

RSI 是一个动量指标,衡量股票价格的涨跌速度和变化。它的值在 0 到 100 之间,通常用来判断股票是否超买或超卖。

实例讲解:从股票数据中提取特征

接下来,我们将通过一个实际的例子,展示如何从股票数据中提取这些技术指标,并将其用作机器学习模型的输入特征。

数据准备

首先,我们需要获取股票数据。在本例中,我们将使用 Python 的 yfinance 库来下载股票数据。

1
2
3
4
5
6
7
8
9
# 导入必要的库
import yfinance as yf
import pandas as pd

# 下载苹果公司的股票数据
data = yf.download('AAPL', start='2020-01-01', end='2021-01-01')

# 显示前五行数据
data.head()

上述代码下载了苹果公司在 2020 年全年的股票数据,并展示了前五行数据。

计算移动平均线

现在,我们计算简单移动平均线(SMA)和指数移动平均线(EMA)。

1
2
3
4
5
6
7
8
# 计算20天的简单移动平均线
data['SMA_20'] = data['Close'].rolling(window=20).mean()

# 计算20天的指数移动平均线
data['EMA_20'] = data['Close'].ewm(span=20, adjust=False).mean()

# 显示添加了新特征的数据
data[['Close', 'SMA_20', 'EMA_20']].tail()

上述代码计算了 20 天的 SMA 和 EMA,并将其添加到数据集中。

计算相对强弱指数(RSI)

接下来,我们计算相对强弱指数(RSI)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 定义计算RSI的函数
def calculate_rsi(data, window):
diff = data.diff(1)
gain = (diff.where(diff > 0, 0)).fillna(0)
loss = (-diff.where(diff < 0, 0)).fillna(0)
avg_gain = gain.rolling(window=window, min_periods=1).mean()
avg_loss = loss.rolling(window=window, min_periods=1).mean()
rs = avg_gain / avg_loss
rsi = 100 - (100 / (1 + rs))
return rsi

# 计算14天的RSI
data['RSI_14'] = calculate_rsi(data['Close'], 14)

# 显示添加了RSI特征的数据
data[['Close', 'RSI_14']].tail()

上述代码定义了一个函数来计算 14 天的 RSI,并将其添加到数据集中。

结论

通过上述步骤,我们已经成功地从股票数据中提取了移动平均线和相对强弱指数这些有用的特征。这些特征不仅可以帮助我们更好地理解市场趋势,还可以作为机器学习模型的输入,提升预测的准确性。在接下来的章节中,我们将继续探讨如何利用这些特征进行股票价格预测。

希望你们喜欢这一章的内容,记得关注我的专栏并收藏这篇文章,这样你就不会错过任何一个实用的技巧和知识点了!让我们一起在股票预测的道路上不断前行吧!