반응형
실전 프로젝트 관련
1. Pandas
이동평균과 차분을 위한 메서드를 검색했다.
temp['SMA_120days'] = temp['Close'].rolling(window=120).mean().round() temp['profit'] = ((temp['Close'] - temp['Close'].shift(1)) / temp['Close'].shift(1))*100
rolling(window)를 통해 원하는 단위의 구간을 설정하여 이동평균을 낸다.
shift()를 통해 원하는만큼 lag 오퍼레이터를 실행한다.
2. seaborn
prophet 모델에 내장되어 있는 plot을 사용할 수 없기에
비슷하게 구현하려 했다.
신뢰구간이 있을 때, fill_between 메서드가 굉장히 매력적이다.
data = df2[df2['Name'] == 'Apple'] plt.figure(figsize=(10, 5)) plt.fill_between(x=data['Date'], y1=data['yhat_lower'], y2=data['yhat_upper'], color='lightblue') sns.lineplot(data=data, x='Date', y='Close', color='black') sns.lineplot(data=data, x='Date', y='yhat', color='blue') plt.title('APPLE')
3. prophet
prophet에서의 yhat과 실제 데이터를 기반으로
sklearn.mean_squared_error가 낮게 나오도록
하이퍼 파라미터를 조정했다.
stocks = { 'AAPL':'Apple', 'AMZN':'Amazon', 'MSFT':'Microsoft'} df2 = pd.DataFrame() for name in stocks.values(): temp = df[df['Name'] == name] temp = temp.rename(columns={'Date':'ds', 'Close':'y'}) model_prophet = Prophet(changepoint_prior_scale=0.2, daily_seasonality=True, seasonality_prior_scale=15) model_prophet.add_country_holidays(country_name='US') model_prophet.fit(temp[['ds', 'y']]) fcast_time = 365 df_forecast = model_prophet.make_future_dataframe(periods=fcast_time, freq='D') df_forecast = model_prophet.predict(df_forecast) temp = pd.merge(temp, df_forecast, how='outer', on='ds') temp = temp.rename(columns={'ds':'Date', 'y':'Close'}) temp['Name'] = np.array([name for _ in range(len(temp))]).reshape(len(temp), -1) df2 = pd.concat([df2, temp], axis=0)
몇번의 반복결과
df에서 각 종목별로 모델링하여 예측을 실행하기 위한 반복문이다.
changepoint_prior_scale=0.2(0.15)
seasonality_prior_scale=15(10)
model_prophet.add_country_holidays(country_name='US')
으로 조정했다(괄호는 디폴트 또는 가이드라인에 제시된 값)
또한 휴일에 관한 요소도 추가하였다.
반응형
'TIL' 카테고리의 다른 글
내배캠 TIL 47일차 (2) | 2024.03.08 |
---|---|
내배캠 TIL 46일차 (0) | 2024.03.05 |
내배캠 TIL 44일차 (1) | 2024.02.29 |
내배캠 TIL 43일차 (1) | 2024.02.27 |
내배캠 TIL 42일차 (0) | 2024.02.26 |