如何用Python对股票进行聚类分析找到相似走势的股票

企业微信

为什么要把股票聚成堆

股票市场里几千只股票,每只都看一遍不现实。聚类分析就是让电脑自动把走势相似的股票归到一组,组内股票涨跌节奏接近,组间差异明显。这样你能快速看清哪些股票是“一伙的”,避免重复押注同一个风格,也能在板块轮动时提前发现异动。

第一步 拿到干净的行情数据

用Python做聚类,数据是地基。推荐用baostock或akshare获取A股历史日线,字段至少包含日期、开盘、最高、最低、收盘、成交量。数据要处理两件事:停牌缺失值用前向填充,上市不足60个交易日的次新股直接剔除,否则会干扰聚类结果。

如何用Python对股票进行聚类分析找到相似走势的股票

数据区间建议取最近一年,太长会包含过时风格,太短噪声大。把每只股票的收盘价序列对齐到相同交易日,形成矩阵:行是日期,列是股票代码。

第二步 构造有意义的特征

直接拿价格做聚类是错的,因为价格水平受股本和上市时间影响。必须转成收益率和风险指标。常用特征组合:

  • 日收益率均值(反映收益倾向)

  • 日收益率标准差(波动率)

  • 换手率均值(流动性)

  • 与沪深300的beta(市场敏感度)

  • 最大回撤(极端风险)

每个特征都是一个维度,股票数量是样本数。计算时用对数收益率更稳定。特征算完后一定要做标准化,否则波动率数值小、换手率数值大,距离计算会被大数值主导。用sklearn.preprocessing.StandardScaler做z-score标准化。

第三步 选聚类方法和确定组数

K-Means最常用,速度快、解释性强。但它假设簇是球形且大小相近,股票数据常有长尾,可以先用层次聚类看树状图辅助判断。

确定组数K不能拍脑袋。用肘部法则:对K从2到10循环,计算簇内平方和,画图找拐点。同时用轮廓系数评估,系数越高说明簇内越紧、簇间越远。两个指标结合,通常A股全市场聚类K取8到15比较合理。

代码核心片段:


from sklearn.cluster import KMeans

from sklearn.preprocessing import StandardScaler

from sklearn.metrics import silhouette_score

scaler = StandardScaler()

X_scaled = scaler.fit_transform(features)

inertia = []

silhouette = []

for k in range(2, 16):

    kmeans = KMeans(n_clusters=k, random_state=42, n_init=10)

    labels = kmeans.fit_predict(X_scaled)

    inertia.append(kmeans.inertia_)

    silhouette.append(silhouette_score(X_scaled, labels))

画图观察肘部和轮廓系数峰值,选综合最优的K。

第四步 解读聚类结果

聚类跑完后,每个簇的质心就是该组股票的平均特征。把质心还原到原始尺度,看哪个特征突出。比如某簇波动率特别高、beta大于1.2,那就是高弹性组;某簇换手率低、波动小,就是防御组。

给每个簇打上标签:高波动成长、低估值蓝筹、小盘题材、高股息稳定等。然后检查每只股票属于哪个簇,如果一只股票频繁在不同簇之间跳变,说明它风格不稳定,做组合时要谨慎。

还可以把聚类结果和行业分类交叉验证。如果某个簇里全是银行股,说明聚类抓住了行业共性;如果簇里混着不同行业但走势相似,那可能是市场风格因子在起作用。

实际应用中的三个坑

第一个坑是数据频率。用日线聚类捕捉的是短期波动模式,用周线或月线会得到更偏基本面的分组。做短线交易用日线,做资产配置用周线以上。

第二个坑是过拟合。聚类没有绝对正确的答案,换一个时间窗口结果就变了。建议用滚动窗口:每季度重新聚类,观察股票簇归属的稳定性,只关注连续两个季度在同一簇的股票。

第三个坑是距离度量。欧氏距离对量纲敏感,已经标准化就没问题。如果想突出走势形状相似而非数值接近,可以改用动态时间规整或皮尔逊相关系数距离,但计算量会大很多。

聚类结果怎么用

最直接的用法是构建风格分散的组合。从每个簇里选一只代表性股票,保证组合覆盖不同波动和行业特征,避免全仓押在同一个风格上。

第二个用法是监控簇内背离。当某只股票突然脱离它所在簇的走势,可能是有个股新闻或资金异动,值得进一步排查。

第三个用法是轮动信号。统计每个簇过去20日的平均收益,如果某个簇持续跑赢且成交量放大,说明资金在往这个风格集中,可以顺着方向做战术配置。

聚类不是预测工具,它只告诉你“谁和谁像”。真正的交易决策还要结合估值、业绩和资金面。把聚类当成缩小研究范围的筛子,而不是买卖按钮,才能发挥它的价值。

转载请注明出处:https://www.lianghuajiaoyi.top/wenzhang/Python-gupiao-julei-1464.html