머신러닝에서 분류(Classification)는 가장 기본이면서도 실무에서 자주 활용되는 알고리즘 중 하나입니다. 특히 파이썬에서는 scikit-learn과 pandas 라이브러리를 활용해 손쉽게 분류 모델을 구축할 수 있습니다. 실제 분석가들 사이에서 정말 많이 쓰이는 패키지이기도 합니다. 이번 글에서는 실제 데이터를 활용하여 머신러닝 분류모델을 구성하고 평가하는 전 과정을 다루어 보도록 하겠습니다. 전체 흐름은 데이터 불러오기, 전처리, 모델 훈련, 예측, 평가까지 단계별로 나눠 진행되며, 함께 살펴보겠습니다.
1. 데이터 준비 및 전처리
머신러닝의 출발점은 양질의 데이터입니다. pandas를 사용하면 다양한 형식의 데이터를 간단하게 불러오고 조작할 수 있습니다. 여기서는 예제로 자주 사용되는 붓꽃(Iris) 데이터를 사용해 보겠습니다. 이 데이터는 scikit-learn에서 기본 제공되며, 꽃받침과 꽃잎의 길이 및 너비를 기반으로 품종을 예측하는 데 사용이 되고 있습니다.
우선 pandas와 scikit-learn의 필요한 모듈을 불러오고 데이터를 준비합니다. 코드 예제는 아래와 같습니다.
아래의 예제로 함께 살펴보겠습니다.
import pandas as pd
from sklearn.datasets import load_iris
iris = load_iris()
df = pd.DataFrame(data=iris.data, columns=iris.feature_names)
df['target'] = iris.target
데이터프레임을 통해 각 변수들의 분포나 결측치를 확인할 수 있습니다. 이후 모델 훈련에 적합하도록 데이터를 정제하는 작업을 수행해야 합니다. 이 과정에서는 필요 없는 열을 제거하거나, 명목형 데이터를 숫자형으로 변환하는 등의 작업이 포함됩니다. 다행히도, iris 데이터는 이미 정제된 상태이므로 별도의 전처리는 필요하지 않지만, 일반적인 프로젝트에서는 이 단계가 매우 중요하여 이를 항상 고려해야 한다고 생각합니다.
2. 분류 모델 구축과 학습
데이터가 준비되면 이제 분류 모델을 구축할 차례입니다. scikit-learn은 다양한 분류 알고리즘을 제공합니다. 여기서는 가장 기본적인 분류 알고리즘 중 하나인 로지스틱 회귀(Logistic Regression)를 사용해 보겠습니다.
데이터를 학습용(train)과 테스트용(test)으로 나누고 모델을 훈련하는 과정을 아래의 예제로 함께 살펴보겠습니다.
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
X = df.drop('target', axis=1)
y = df['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = LogisticRegression(max_iter=200)
model.fit(X_train, y_train)
모델이 정상적으로 훈련되었는지 확인하려면 예측 결과를 살펴보는 것이 좋습니다. scikit-learn에서는 `predict` 메서드를 사용해 테스트 데이터에 대한 예측을 쉽게 얻을 수 있습니다. 분류 문제에서는 예측이 어느 클래스에 속하는지 결과값이 나오기 때문에, 실제값과 비교하여 정확도를 측정할 수가 있습니다.
3. 모델 예측 및 평가
모델을 훈련한 후에는 실제로 얼마나 정확하게 작동하는지를 평가해야 합니다. 평가 지표로는 정확도(accuracy), 정밀도(precision), 재현율(recall), F1 점수 등이 있습니다. 간단한 평가부터 진행 하여 보겠습니다.
아래의 예제로 함께 살펴보겠습니다.
from sklearn.metrics import accuracy_score, classification_report
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print("정확도:", accuracy)
print(classification_report(y_test, y_pred, target_names=iris.target_names))
위 코드를 실행하면, 모델이 예측한 결과와 실제값을 비교하여 다양한 성능 지표를 확인할 수 있습니다. 특히 `classification_report`는 클래스별 정밀도, 재현율, F1 점수를 모두 제공해 모델의 전반적인 성능을 파악하는 데 도움이 될 수 있습니다.
만약에 이보다 고도화된 평가가 필요할 경우에는, 교차검증(cross-validation)이나 ROC 곡선 분석도 고려할 수 있습니다. 또한 여러 분류 알고리즘을 비교해보면서 프로젝트에 가장 적합한 모델을 선택하는 것도 중요합니다. 예를 들어 결정트리, KNN, SVM 등 다양한 알고리즘을 테스트하여 최적의 조합을 찾는 것이 실제 현업에서 많이 사용하는 방식입니다.
이상으로, 머신러닝 분류모델의 실전 구축 과정을 한 번 살펴보았습니다. 실제 데이터를 불러오고 전처리한 후, 모델을 훈련하고 평가하는 전 과정은 반복과 경험을 통해 점차 향상됩니다. scikit-learn과 pandas는 이 모든 과정을 효율적으로 지원해주는 도구로, 파이썬 기반의 머신러닝 입문자와 실무자 모두에게 강력한 지원이 되는 도구라고 생각합니다. 데이터 분석 및 실무에 효율적으로 활용하기를 바랍니다.