Оцените линейный тренд в каждой строке по нескольким столбцам, чтобы спроецировать следующее значение

#python #python-3.x #pandas #scikit-learn

#питон #python-3.x #pandas #scikit-learn

Вопрос:

У меня есть пять столбцов исторических данных, по которым я хотел бы найти линейный тренд по столбцам в каждой строке, чтобы спрогнозировать следующее значение в 2021/22 году. Исторические данные хранятся во фрейме данных следующим образом: —

Указатель 2016/17 2017/18 2018/19 2019/20 2020/21
0 14.53 13.75 13.03 16.05 15.15
1 14.52 13.74 13.03 16.03 15.14
2 11.92 10.53 10.53 пустота пустота
3 10.87 10.06 10.06 10.05 10.07
4 12.59 10.99 10.99 10.99 11.07
5 12.59 10.99 10.99 10.99 11.00
6 24.56 17.90 17.88 18.02 18.14
7 24.56 17.90 17.88 18.02 18.14
8 24.56 17.90 17.88 18.02 18.14
9 18.40 14.94 14.92 15.02 15.10
10 23.57 23.06 23.09 23.08 22.88

Затем прогнозируемые выходные данные сохраняются в следующем столбце того же фрейма данных.

Указатель 2016/17 2017/18 2018/19 2019/20 2020/21 2021/22
0 14.53 13.75 13.03 16.05 15.15 ?
1 14.52 13.74 13.03 16.03 15.14 ?
2 11.92 10.53 10.53 пустота пустота ?
3 10.87 10.06 10.06 10.05 10.07 ?
4 12.59 10.99 10.99 10.99 11.07 ?
5 12.59 10.99 10.99 10.99 11.00 ?
6 24.56 17.90 17.88 18.02 18.14 ?
7 24.56 17.90 17.88 18.02 18.14 ?
8 24.56 17.90 17.88 18.02 18.14 ?
9 18.40 14.94 14.92 15.02 15.10 ?
10 23.57 23.06 23.09 23.08 22.88 ?

Я пытался использовать numpy.polyfit и scipy.linregress, но оба, похоже, вызывают у меня проблемы из-за наличия нескольких столбцов вместо одного столбца. Любая помощь будет очень признательна.

Спасибо

Комментарии:

1. Не могли бы вы предоставить фрагмент кода, который вы пробовали для нас в качестве ссылки?

Ответ №1:

Вот очень простой пример того, как взять пять столбцов и предсказать следующий (6-й) для первой строки данных, используя scikit-learn. pip install scikit-learn если вы его не получили.

 import numpy as np
import pandas as pd 
from sklearn.linear_model import LinearRegression

data = { '2016/17' : [14.53, 14.52],
'2017/18' : [13.75,13.74],
'2018/19' : [13.03,13.03],
'2019/20' : [16.05,16.03],
'2020/21' : [15.15,15.14]}
df = pd.DataFrame(data)

X = np.array([[1],[2],[3],[4],[5]]) # dummy x values for each of the columns you are going to use as input data
Y = df.iloc[0,:].values.reshape(-1, 1) # work on row 0
 
linear_regressor = LinearRegression()  # create object for the class
linear_regressor.fit(X, Y)  # perform linear regression

prediction = linear_regressor.predict(np.array([[6]]))
 

Теперь вам нужно будет взять это и заставить его работать по строкам и поместить ответ в нужный столбец, но базовый механизм есть.

Вам также придется иметь дело с интересными проблемами void. imputation это то, что вам нужно, но это будет проблематично, если будет отсутствовать слишком много данных.

Комментарии:

1. Спасибо, Пол, я изучу, как я мог бы справиться с недостающими значениями, используя вменение.

2. scikit-learn.org/stable/modules/impute.html вот стратегия, вы можете получить линейную подгонку из двух точек, но на самом деле это мало что значит (подумайте о количестве лошадей в 1900, 1910 годах, а затем прогнозируйте до 2020 года, не очень хорошо). Таким образом, пропущенные значения будут соответствовать среднему тренду, поэтому сопоставьте все данные, а затем вставьте пустоты, затем используйте приведенные выше данные для получения прогноза, если вам нужна дополнительная информация, спрашивайте