[Program] Time Series

Author

SEOYEON CHOI

Published

April 9, 2025

dd

# 필수 패키지 설치
# 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)