ValueError: Найденный массив с 0 сэмплами (формами) (shape = (0, 1)), хотя требуется минимум 1 - PullRequest
2 голосов
/ 19 апреля 2019

немного затянуто здесь, но был бы очень признателен за помощь.

У меня есть df данных о запасах, и я пытаюсь проверить эффективность Z-показателей, и в основном строю график Z-показателей для каждой акции, а затем рассчитываю форвардный доходболее 100 дней, и вычерчивая их друг против друга, чтобы определить, есть ли корреляция.

Однако меня интересуют только крайности и интересует только сторона покупки, поэтому я в основном интересуюсь только большим, отрицательнымZ-оценки, скажем, -3 или более отрицательных, и соответствующие им форвардные доходы.

Затем я также хочу получить результат R-квадрата для каждой акции z балла против форвардных возвратов.

Вот где я сейчас нахожусь.У меня есть цены в кадре данных, называемом data, и в конечном итоге я хочу ввести все соответствующие данные в df, а затем построить их все.Я пытаюсь просто перенести данные в один длинный фрейм данных, поскольку меня не интересует название акций, поскольку я просто отображаю данные в минуту.

Итак, я начинаю с вычисления Zscoreи то, что я называю прямым возвратом, который довольно прост.Они оба производят NaN, однако, чтобы избежать постепенного уменьшения df при прохождении цикла, я помещаю эти новые данные в newdf и сбрасываю NaN.

Затем я сортирую это newdf по Zscores, чтобы вернуть любые данные, которые имеют -3 или меньше, и именно здесь я столкнулся с моей первой проблемой.Если запас не имеет данных для Zscores или -3 или меньше, он выдает ошибку, и цикл прерывается.

ValueError: Found array with 0 sample(s) (shape=(0, 1)) while a minimum of 1 is required.

Это ошибка, которую я получаю.Я протестировал его на -2, и все работает нормально, просто чтобы убедиться, что остальная часть сценария работает.

Затем я выполняю линейную регрессию, чтобы вернуть r-квадрат, и использую это число.в качестве другого квалификатора, с помощью которого можно получить мой окончательный кадр данных, df.

df = []

for stock in stocks:
    newdf = []
    data['zscore'] = (data[stock] - data[stock].rolling(100).mean()) / data[stock].rolling(100).std()
    data['fwd100'] = (data[stock].rolling(10).mean().shift(-105) - data[stock]) / data[stock]
    newdf.append(data[['zscore', 'fwd100']])
    newdf = pd.concat(newdf, axis=1)
    newdf.dropna(inplace=True)
    newdf.sort_values('zscore', inplace=True)
    newdf = newdf[newdf.zscore < -3]
    X = newdf['zscore'].values.reshape(-1, 1)
    y = newdf['fwd100'].values.reshape(-1, 1)
    linear_regressor = LinearRegression()
    linear_regressor.fit(X, y)
    rsq = linear_regressor.score(X, y)
    if rsq > 0.3:
        df.append(newdf[['zscore', 'fwd100']])
df = pd.concat(df, axis=0)

sns.regplot(df['zscore'],df['fwd100'])
plt.show()

Используя -2 в качестве моего параметра, я получаю следующий график разброса.

enter image description here Итак, мой первый вопрос: как я могу предотвратить возникновение этой ошибки, если у акции нет соответствующих данных?Во-вторых, это самый эффективный способ для меня сделать это?Я чувствую, что я делал несколько работ вокруг.И в-третьих, я смотрю на 100-дневные Zscores и 100-дневные форвардные возвраты, но это довольно произвольное число, возможно, оптимальная комбинация будет 75 и 125 или что-то в этом роде, но мне придется сделать небольшую пробу и ошибку,Это то, с чем может помочь машинное обучение.Если так, что лучше всего гуглить / читать?Я не ожидаю громкого ответа, который я с удовольствием прочту на нем.

Любая помощь действительно приветствуется, ура

Вот пример моих данных о запасах:

            Stock A  Stock B  Stock C  Stock D  Stock E
Date                                                   
01/04/2019     8.17     1.11     3.22    11.58     1.20
02/04/2019     8.17     1.11     3.21    11.53     1.20
03/04/2019     8.15     1.10     3.20    11.67     1.20
04/04/2019     8.12     1.10     3.21    11.66     1.21
05/04/2019     8.11     1.10     3.19    11.57     1.19
08/04/2019     8.11     1.09     3.18    11.46     1.20
09/04/2019     8.10     1.07     3.13    11.19     1.19
10/04/2019     8.15     1.08     3.13    11.30     1.17
11/04/2019     8.15     1.08     3.11    11.20     1.18
12/04/2019     8.14     1.09     3.09    11.17     1.19
15/04/2019     8.12     1.08     3.09    11.19     1.17
16/04/2019     8.11     1.08     3.08    11.02     1.17
17/04/2019     8.15     1.08     3.04    10.94     1.17
18/04/2019     8.14     1.08     3.05    11.05     1.18
19/04/2019     8.13     1.07     3.04    10.98     1.16
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...