#python #regression #line #stock
Вопрос:
Я использовал предыдущий поток здесь, на stackoverflow, чтобы добраться до точки, в которой я нахожусь. Я хочу сделать график акций, который показывает линию наилучшего соответствия. У меня в основном все работает, за исключением одной проблемы. Ось y показывает нормализованную шкалу от -0,10 до 0,25, а не цену акции. Я хочу, чтобы цена акции отображалась по оси y.
#!/usr/bin/env python3
import numpy as np
import pandas_datareader.data as web
import pandas as pd
import datetime
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
import statistics as stat
#get adjusted close price of Tencent from yahoo
start = datetime.datetime(2020, 5, 21)
end = datetime.datetime(2021, 5, 21)
tencent = pd.DataFrame()
tencent = web.DataReader('IBM', 'yahoo', start, end)['Adj Close']
nomalized_return=np.log(tencent/tencent.iloc[0])
df = pd.DataFrame(data=nomalized_return)
df = df.resample('D').asfreq()
# Create a 'x' and 'y' column for convenience
df['y'] = df['Adj Close'] # create a new y-col (optional)
df['x'] = np.arange(len(df)) # create x-col of continuous integers
# Drop the rows that contain missing days
df = df.dropna()
X=df['x'].values[:, np.newaxis]
y=df['y'].values[:, np.newaxis]
# Fit linear regression model using scikit-learn
lin_reg = LinearRegression()
lin_reg.fit(X, y)
# Make predictions w.r.t. 'x' and store it in a column called 'y_pred'
df['y_pred'] = lin_reg.predict(df['x'].values[:, np.newaxis])
df['above']= y np.std(y)
df['below']= y - np.std(y)
# Plot 'y' and 'y_pred' vs 'DateTimeIndex`
df[['y', 'y_pred']].plot()
plt.show()
Проблема в этих строках
nomalized_return=np.log(tencent/tencent.iloc[0])
df = pd.DataFrame(data=nomalized_return)
Если я заменю df = pd.DataFrame(data=nomalized_return)
на df = pd.DataFrame(data=tencent)
, то это сработает. Я получаю цены по оси y, но затем линия регрессии оказывается неправильной.
В любом случае, на изображении ниже показано, что я получаю с помощью кода выше, и это показывает проблему.
Комментарии:
1. комментарий с подходящей точки зрения: «лучше всего подходит» … ?! Я верю, что вы слишком сильно верите в бритву Оккама 🙂