# 필수 패키지 설치
# pip install matplotlib seaborn
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import pandas as pd
# 예시 데이터 생성 (실제 실습에서는 모델 결과를 사용)
np.random.seed(42)
dates = pd.date_range(start="2020-01-01", periods=200)
actual = np.sin(np.linspace(0, 20, 200)) + np.random.normal(0, 0.1, 200) # 실제값
predicted = np.sin(np.linspace(0, 20, 200)) + np.random.normal(0, 0.2, 200) # 예측값
loss = np.linspace(0.8, 0.1, 50) + np.random.normal(0, 0.02, 50) # 손실 감소 과정 (학습 과정)
# 1. 학습 데이터 vs 예측 결과 비교 (시계열 플롯)
def plot_actual_vs_predicted(dates, actual, predicted):
plt.figure(figsize=(12, 6))
plt.plot(dates, actual, label='Actual', color='blue')
plt.plot(dates, predicted, label='Predicted', color='red', linestyle='--')
plt.title('Actual vs Predicted Stock Prices')
plt.xlabel('Date')
plt.ylabel('Stock Price')
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.savefig('actual_vs_predicted.png', dpi=300)
plt.show()
# 2. 손실 함수 감소 과정 (Loss Curve)
def plot_loss_curve(loss):
plt.figure(figsize=(8, 5))
plt.plot(range(1, len(loss) + 1), loss, marker='o', color='green')
plt.title('Training Loss Over Epochs')
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.grid(True)
plt.tight_layout()
plt.savefig('loss_curve.png', dpi=300)
plt.show()
# 3. 실제값 vs 예측값 산점도 (Scatter Plot)
def plot_actual_vs_predicted_scatter(actual, predicted):
plt.figure(figsize=(6, 6))
sns.scatterplot(x=actual, y=predicted, color='purple')
plt.plot([actual.min(), actual.max()], [actual.min(), actual.max()], 'k--', lw=2)
plt.title('Actual vs Predicted (Scatter)')
plt.xlabel('Actual Stock Price')
plt.ylabel('Predicted Stock Price')
plt.tight_layout()
plt.savefig('scatter_actual_predicted.png', dpi=300)
plt.show()
# 함수 실행
plot_actual_vs_predicted(dates, actual, predicted)
plot_loss_curve(loss)
plot_actual_vs_predicted_scatter(actual, predicted)