선형 회귀: 코드 (a) 라인
Source: Dev.to
첫 번째 ML 모델을 작성하고 주택 가격을 예측할 차례입니다.
전체 프로젝트를 보려면 다음을 확인하세요:
https://github.com/yotambelgoroski/ml_unchained-house_pricing
Step 1: It’s all about data
ML은 데이터가 전부입니다—훈련 없이 모델을 만들 수 없고, 데이터 없이 훈련할 수 없습니다.
우리 데이터셋은 일반적으로 두 부분으로 나뉩니다:
- Training data – 모델을 훈련시키는 데 사용되는 데이터
- Test data – 모델이 훈련된 후, 테스트 세트에서 입력(x)을 받아 예측값(ŷ)을 만든 뒤 실제값(y)과 비교합니다. 이를 통해 모델의 성능을 평가합니다.
보다 고급 설정에서는 모델을 테스트하기 전에 튜닝하는 데 사용되는 validation set이 있을 수도 있습니다.
Where does data come from?
답은 비즈니스와 사용 사례에 따라 다릅니다. 학습 목적이라면 Kaggle이 데이터셋과 ML 리소스를 찾기에 좋은 곳입니다. 여기서는 간단히 합성 데이터를 생성하는 스크립트를 사용합니다.
How much data do I need for training?
고정된 숫자는 없습니다—모델 복잡도가 증가할수록 더 많은 데이터가 필요합니다. 일반적인 경험 법칙은:
Have 10×–20× more data points than features (independent variables)
현재 우리는 하나의 특성(sqm)만 가지고 있으므로, 모델을 훈련시키기 위해 10개의 레코드를 사용했습니다—가장 간단하게 유지하기 위한 최소값입니다.
How much data do I need for testing?
간단한 방법은 데이터셋을 80:20 비율로 나누는 것입니다:
- 80%는 훈련에 사용
- 20%는 테스트에 사용
Step 2: Training the model
데이터셋이 준비되었으니 이제 모델을 훈련시킬 차례입니다.
훈련은 세 단계로 이루어집니다:
- 훈련 데이터를 로드한다
- 해당 데이터를 기반으로 메모리 내에서 모델을 훈련한다
- 직렬화 – 훈련된 모델을 디스크에 저장해 재훈련 없이 재사용할 수 있게 한다
import joblib
import pandas as pd
from pathlib import Path
from sklearn.linear_model import LinearRegression
FEATURE_COLS = ["sqm"]
TARGET_COL = "price"
MODEL_FILENAME = "house_price_model.joblib"
def load_training_data(train_path: Path) -> pd.DataFrame:
return pd.read_csv(train_path)
def train_model(df: pd.DataFrame) -> LinearRegression:
model = LinearRegression()
model.fit(df[FEATURE_COLS], df[TARGET_COL])
return model
def save_model(model: LinearRegression, dest_path: Path) -> None:
dest_path.parent.mkdir(parents=True, exist_ok=True)
joblib.dump(model, dest_path)
print(f"Model saved → {dest_path}")
def train(train_path: Path, model_dir: Path) -> LinearRegression:
df = load_training_data(train_path)
model = train_model(df)
save_model(model, model_dir / MODEL_FILENAME)
print(f"Model trained on {len(df)} samples.")
return model
이것이 바로 우리의 첫 번째 모델입니다!
Our Dependencies
- Pandas – 표형 데이터 작업을 위한 데이터 처리 라이브러리. 핵심 구조인 DataFrame을 통해 데이터를 쉽게 접근하고 조작할 수 있습니다.
- scikit-learn – 파이썬용 머신러닝 라이브러리.
LinearRegression은 입력 특성과 목표값 사이의 최적 선형 관계를 학습하는 모델 중 하나입니다. - Joblib – 여기서는 직렬화에 사용되는 유틸리티 라이브러리. 훈련된 모델을 디스크에 저장하고 나중에 로드해 추론에 사용할 수 있게 해줍니다.
축하합니다 — 첫 모델을 만들었습니다! 하지만 아직 프로덕션에 바로 사용할 수는 없습니다. 다음 단계에서는 테스트 데이터를 사용해 모델이 실제로 얼마나 좋은지 평가해 보겠습니다.