Feature Engineering

Devin·2026년 1월 28일

모델의 지능도 중요하지만, 사실 AI의 성능을 결정짓는 80%는 어떤 데이터를 넣어주느냐에 달려 있다.


import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix, classification_report

class UltimateFeaturePredictor:
    def __init__(self, file_path: str):
        self.df = pd.read_csv(file_path)
        self.features = ['time_input', 'total_class_count', 'is_multi_learner', 'is_extra_class', 'major_field', 'inflow_route']
        self.target = 'completed'

        for col in ['major_field', 'inflow_route']:
            self.df[col] = self.df[col].fillna('Unknown')
        
        self.df = self.df[self.features + [self.target]].dropna()

    def run_ultimate_analysis(self):
        encoded_df = pd.get_dummies(self.df, columns=['major_field', 'inflow_route'])

        X = encoded_df.drop(columns=[self.target])
        y = encoded_df[self.target]

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

        model = RandomForestClassifier(
            n_estimators=100,
            class_weight='balanced',
            random_state=42
        )
        model.fit(X_train, y_train)

        y_pred = model.predict(X_test)

        print(f"--- 특성 공학 적용 결과 ---")
        print(f"사용된 총 컬럼 수: {len(X.columns)}개")
        print("\n[혼동 행렬]")
        matrix = confusion_matrix(y_test, y_pred)
        print(matrix)
        print(f"\n실제 수료자 42명 중 AI가 찾아낸 인원: {matrix[1, 1]}명")
        print("\n" + classification_report(y_test, y_pred))

# --- 실행부 ---
predictor = UltimateFeaturePredictor('train.csv')
predictor.run_ultimate_analysis()


적중 인원(Recall)의 하락 원인:

  • 지난번에는 20명을 맞혔는데 이번에는 11명으로 줄었다. 이는 '정보의 노이즈'때문일 가능성이 크다.
  • 변수가 너무 많아지면 모델이 진짜 중요한 핵심보다 덜 중요한 정보에 휘둘리게 된다. 이를 차원의 저주라고도 부른다.
profile
AI/ML Engineer 🧑‍💻

0개의 댓글