ks检验python代码_如何使用适当的标准化方法从KolmogorovSmirnov测试(ks测试)中获得正确的p_值和ks_值?...

该博客探讨了在金融数据分析中使用Python进行Kolmogorov-Smirnov检验(KS测试)的问题。作者在实现一个函数来检查股票信号回报率是否符合正态分布时遇到困难。通过scipy.stats.kstest对DataFrame进行分组并应用KS测试,但得到的ks和p值与预期不符。问题可能在于数据标准化,作者寻求帮助以理解如何正确标准化数据以获取准确的测试结果。
摘要由CSDN通过智能技术生成

我正在研究一个财务问题,我要实现一个函数,在每只股票的信号回报率的正态分布之间使用Kolmogorov-Smirnov检验(KS-test)。我将对每个股票的信号回报率在正态分布上运行KS测试,对于这个测试,我将使用scipy.stats.kstest来执行KS测试。在建议我迭代groupby函数

我被要求只使用熊猫,纽比和希比。在

我的职能如下:def calculate_kstest(long_short_signal_returns):

"""

Calculate the KS-Test against the signal returns with a long or short signal.

Parameters

----------

long_short_signal_returns : DataFrame

The signal returns which have a signal.

This DataFrame contains two columns, "ticker" and "signal_return"

Returns

-------

ks_values : Pandas Series

KS static for all the tickers

p_values : Pandas Series

P value for all the tickers

"""

#TODO: Implement function

ks_v = []

p_v = []

#print(long_short_signal_returns)

column = []

df = long_short_signal_returns.copy()

print(df)

#df['signal_return'] = (df['signal_return'] - df['signal_return'].mean()) / (df['signal_return'].max() - df['signal_return'].min())

for name, group in df.groupby('ticker'):

sub_group = group['signal_return'].values

ks,p = kstest(sub_group,'norm')

ks_v.append(ks)

p_v.append(p)

column.append(name)

ks_values = pd.Series(ks_v,column)

p_values = pd.Series(p_v, column)

return ks_values, p_values

然而,我的回答与预期的产出不符。在

输入是:

^{pr2}$

我的输出是:OUTPUT ks_values:

DNTM 0.20326939

EHX 0.34826827

VWER 0.60256811

dtype: float64

OUTPUT p_values:

DNTM 0.98593727

EHX 0.48009144

VWER 0.02898631

dtype: float64

预期产出为:EXPECTED OUTPUT FOR ks_values:

DNTM 0.28999582

EHX 0.34484969

VWER 0.63466098

dtype: float64

EXPECTED OUTPUT FOR p_values:

DNTM 0.73186935

EHX 0.49345487

VWER 0.01775987

dtype: float64

我被告知在获得正确的p_值和ks_值之前使用适当的规范化,但我不明白这种正确的规范化意味着什么以及如何解决这个问题。有人能帮忙吗??在

好的,我明白了。关于你的问题,计算KS和绘制KS曲线是大数据分析常用的方法Python也提供了相应的库来实现。下面是一些示例代码,可以用来计算KS和绘制KS曲线。 首先,我们需要导入相关的库: ```python import pandas as pd import numpy as np import matplotlib.pyplot as plt from scipy import stats ``` 接下来,我们需要读入数据,假设数据存在一个名为"data"的DataFrame,其包含了预测和真实两列: ```python pred = data['pred'] true = data['true'] ``` 然后,我们可以使用scipy库的stats模块来计算KS: ```python ks = stats.ks_2samp(pred[true == 1], pred[true != 1]).statistic ``` 这里,我们使用ks_2samp函数来计算KS,其第一个参数是预测真实为1的样本,第二个参数是预测真实不为1的样本。函数返回的是KS。 最后,我们可以使用matplotlib库来绘制KS曲线: ```python fpr, tpr, thresholds = metrics.roc_curve(true, pred) ks = max(tpr-fpr) plt.plot(thresholds, 1.-fpr, label='False Positive Rate') plt.plot(thresholds, tpr, label='True Positive Rate') plt.plot(thresholds, tpr-fpr, label='KS curve (KS=%0.2f)' % ks) plt.xlabel('Threshold') plt.legend(loc='best') plt.show() ``` 这里,我们使用roc_curve函数来计算真正率和假正率,然后根据不同的阈绘制出KS曲线。函数返回的是三个数组,分别是假正率、真正率和阈。我们可以从计算出KS。 这就是使用Python计算KS并绘制KS曲线的方法。希望能对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值