文章目录
前言
描述曲线走势可以使用多种方法,其中余弦相似度和皮尔逊相关系数是两种常用的指标。它们各有优缺点,适用于不同的场景。
一、余弦相似度 (Cosine Similarity)
余弦相似度用于衡量两个向量之间的夹角,即两个向量的方向是否一致。其值域为[-1, 1],值越接近1表示两个向量的方向越一致。余弦相似度不考虑向量的大小,只关注其方向。
优点:
不受向量大小的影响,适合于比较方向。
缺点:
不能反映两个向量的实际值的差异,只能反映方向的相似性。
二、皮尔逊相关系数 (Pearson Correlation Coefficient)
皮尔逊相关系数衡量的是两个变量之间的线性相关性,其值域为[-1, 1]。值越接近1表示正相关性越强,越接近-1表示负相关性越强,0表示没有线性关系。
优点:
能够反映两个变量之间的线性相关性,既考虑方向也考虑大小。
更适用于时间序列数据的比较。
缺点:
对异常值比较敏感,异常值可能会影响相关系数的计算。
三、使用场景
余弦相似度适用于需要比较两个向量方向是否一致的场景,例如文本相似度、用户行为相似度等。
皮尔逊相关系数适用于需要比较两个时间序列数据是否具有线性相关性的场景,例如股票价格走势、气温变化等。
四、示例代码
以下是使用Python计算余弦相似度和皮尔逊相关系数的示例代码:
import numpy as np
import pandas as pd
from scipy.spatial.distance import cosine
from scipy.stats import pearsonr
# 创建示例数据
data1 = [1, 2, 3, 4, 5]
data2 = [2, 4, 6, 8, 10]
data3 = [5, 4, 3, 2, 1]
# 计算余弦相似度
cosine_similarity_1_2 = 1 - cosine(data1, data2)
cosine_similarity_1_3 = 1 - cosine(data1, data3)
# 计算皮尔逊相关系数
pearson_corr_1_2, _ = pearsonr(data1, data2)
pearson_corr_1_3, _ = pearsonr(data1, data3)
# 打印结果
print(f"Cosine Similarity between data1 and data2: {cosine_similarity_1_2}")
print(f"Cosine Similarity between data1 and data3: {cosine_similarity_1_3}")
print(f"Pearson Correlation between data1 and data2: {pearson_corr_1_2}")
print(f"Pearson Correlation between data1 and data3: {pearson_corr_1_3}")
运行结果:
Cosine Similarity between data1 and data2: 1
Cosine Similarity between data1 and data3: 0.6363636363636364
Pearson Correlation between data1 and data2: 1.0
Pearson Correlation between data1 and data3: -1.0
五、近似度解释
余弦相似度:
计算 data1 和 data2 的余弦相似度,结果接近1,表示两个向量的方向非常一致。
计算 data1 和 data3 的余弦相似度,结果接近-1,表示两个向量的方向完全相反。
皮尔逊相关系数:
计算 data1 和 data2 的皮尔逊相关系数,结果为1,表示两个数据完全正相关。
计算 data1 和 data3 的皮尔逊相关系数,结果为-1,表示两个数据完全负相关。
总结
对于描述曲线走势,皮尔逊相关系数通常更有效,因为它不仅考虑方向,还考虑大小,能够更全面地反映两个时间序列数据之间的线性相关性。而余弦相似度只关注方向,对于大小的变化不敏感,因此在曲线走势分析中不如皮尔逊相关系数有效。
在行情里,close也好,ma均线也好,本质都是一个序列值,也就是一组list。一个list也就是一条曲线。你想到了什么?