Я пытаюсь повысить эффективность своего кода, что включает в себя цикл следующего, чтобы найти разницу между отдельными точками и кривой линейной регрессии несколько сотен раз с примерно 20000 записями для каждого l oop. Каждая итерация занимает более секунды, и наряду с обработкой данных и их копированием для каждой итерации требуется около десяти минут для запуска всей программы, мне интересно, делаю ли я что-то по своей сути неправильно, что влияет на эффективность.
df.plot.scatter('sd', 'iv', c='days', colormap='viridis')
x = df['sd']
y = df['iv']
x = x[:, np.newaxis]
y = y[:, np.newaxis]
polynomial_features= PolynomialFeatures(degree=3)
x_poly = polynomial_features.fit_transform(x)
model = make_pipeline(StandardScaler(), LinearRegression())
model.fit(x_poly, y)
y_poly_pred = model.predict(x_poly)
r2 = r2_score(y,y_poly_pred)
print(r2)
sort_axis = operator.itemgetter(0)
sorted_zip = sorted(zip(x,y_poly_pred), key=sort_axis)
x, y_poly_pred = zip(*sorted_zip)
plt.plot(x, y_poly_pred, c=np.random.rand(3,), label = "Polynomial Regression Line")
plt.scatter(df['sd'],df['iv'], alpha = 0.3, c =df['days'])
axes = plt.gca()
axes.set_xlim([-2,2])
axes.set_ylim([0.6,1.8])
plt.gcf().subplots_adjust(bottom=0.25)
plt.xlabel("standard moneyness")
plt.ylabel("implied volatility")
plt.legend()
plt.show()
df['distance'] = y - y_poly_pred
df['absdistance'] = abs(df['distance'])
df.drop(columns = ['sd','type'])
dis = df['distance']
df['scaled'] = (dis - dis.mean())/(dis.std())
cols = ['days','symbol','distance','absdistance','scaled','datetime','iv','delta','price','multiplier']
df = df[cols]
tradingstrategy = pd.concat([tradingstrategy,df])