머신러닝

Devin·2026년 1월 20일
post-thumbnail

오늘은 진행중인 공모전 train 데이터를 사용해서 진행했다.

데이터 shape은 (748, 39)이다.


import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score

class ProPredictor:
    def __init__(self, file_path: str):
        self.df = pd.read_csv(file_path)
        self.df = self.df[['time_input', 'total_class_count']].dropna()
        self.model = LinearRegression()

    def train_and_evaluate(self):
        X = self.df[['time_input']]
        y = self.df['total_class_count']

        X_train, X_test, y_train, y_test = train_test_split(
            X, y, test_size=0.2, random_state=42
        )

        self.model.fit(X_train, y_train)

        y_pred = self.model.predict(X_test)

        mse = mean_squared_error(y_test, y_pred)
        r2 = r2_score(y_test, y_pred)

        print(f"--- 분석 결과 (데이터 수: {len(self.df)}행) ---")
        print(f"평균 제곱 오차(MSE: {mse: .4f}")
        print(f"결정계수(R2 Score): {r2: .4f}")

# --- 실행부 ---
predictor = ProPredictor('train.csv')
predictor.train_and_evaluate()


  1. MSE(Mean Squared Error, 평균 제곱 오차)
    AI 모델이 내놓은 예측값이 실제 정답과 얼마나 떨어져 있는지 '거리'를 측정하는 지표이다.
  • 계산 방법: (AI의 예측값 - 실제 정답)을 계산한 뒤, 이 오차를 제곱하여 모두 더하고 그 평균을 구한다.
  • 해석 방법: 숫자가 0에 가까울수록 모델이 정답을 아주 잘 맞히고 있다는 뜻이다.
  • 특징: 오차를 제곱하기 때문에, 정답에서 크게 벗어난 '엉뚱한 예측'에 대해 더 큰 페널티를 부여하는 성질이 있다.
  1. R2R^2(R-squared, 결정계수)
    모델이 데이터의 전체적인 흐름(변동성)을 얼마나 잘 설명하고 있는지 보여주는 지표이다.
  • 범위: 보통 0에서 1사이의 값을 가진다.
  • 해석 방법:
    • 1에 가까울수록: 데이터의 규칙을 완벽하게 파악한 모델이다.
    • 0에 가까울수록: 규칙을 전혀 찾지 못해, 그냥 단순히 전체 평균값으로 대충 대답하는 수준의 모델이다.
profile
AI/ML Engineer 🧑‍💻

0개의 댓글