안녕하세요.
이번 글에서는 table domain에서 예측 모델로 사용해볼 수 있는 대표적인 딥러닝 모델인
TabPFN의 활용 예제를 다루어보도록 하겠습니다.
1. 모듈 설치 및 임포트
TabPFN 모델 활용을 위한 모듈 설치를 진행해야 합니다. 이는 다음 명령어로 수행합니다.
!pip install tabpfn
설치가 완료되었다면 앞으로 다룰 예제에서 필요한 모듈들을 임포트하도록 하겠습니다.
import time
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, roc_auc_score, confusion_matrix, classification_report
from sklearn.preprocessing import StandardScaler
from tabpfn import TabPFNClassifier
2. 데이터셋 로드 및 분할
이번 예제에서는 사이킷런에서 제공하는 와인 데이터셋을 사용해서
예측 모델을 학습하고, 분류를 진행해보도록 하겠습니다.
# 데이터셋 로드
wine = load_wine()
# 타겟 라벨 정보는 y, 나머지 정보는 X로 분리
X = wine.data
y = wine.target
feature_names = wine.feature_names
target_names = wine.target_names
X_df = pd.DataFrame(X, columns=feature_names)
y_series = pd.Series(y, name="target")
위에서 얻은 X_df와 y_series를 시각화한 정보는 다음과 같습니다.
X_df는 다음과 같은 다양한 종류의 feature로 구성되어 있습니다.

y_series는 각 row의 와인에 대한 타겟 라벨 정보입니다.
이 데이터셋은 총 3가지 종류의 와인으로 구성되어 있습니다.

이어서 다음과 같은 코드로 학습용 / 테스트용 데이터 분리를 진행해줍니다.
학습용 : 테스트용 데이터의 비율은 8:2를 가정하겠습니다.
X_train, X_test, y_train, y_test = train_test_split(
X_df, y, test_size=0.2, random_state=42, stratify=y
)
3. TabPFN 분류기 학습 / 추론
이제, 위에서 생성된 데이터를 기반으로 TabPFN 분류 모델을 학습해보도록 하겠습니다.
먼저, 아래의 코드로 데이터 정규화 과정을 거쳐줍니다.
scaler = StandardScaler()
X_train_s = scaler.fit_transform(X_train)
X_test_s = scaler.transform(X_test)
이후, TabPFN 분류기 객체를 선언하고 학습을 진행합니다.
clf = TabPFNClassifier()
clf.fit(X_train_s, y_train)
테스트셋에 대한 예측 결과는 다음과 같이 받을 수 있습니다.
(이 모델은 추론 과정이 다소 오래걸릴 수 있습니다.)
y_pred = clf.predict(X_test_s) # 각 샘플에 대한 예측 라벨 정보
y_proba = clf.predict_proba(X_test_s) # 각 샘플의 클래스별 확률 분포
# 추론 속도가 무겁다면 이렇게 한번에도 가능
y_proba = clf.predict_proba(X_test_s) # 먼저 확률 분포 구하고
y_pred = y_proba.argmax(axis=1) # 여기서 예측 라벨 뽑기
4. 결과 확인
이제 예측된 결과를 바탕으로 다음과 같이 평가를 진행해보도록 하겠습니다.
# 정확도, ROC_AUC 점수, Confusion Matrix 추출
acc = accuracy_score(y_test, y_pred)
auc_macro = roc_auc_score(y_test, y_proba, multi_class="ovr", average="macro")
cm = confusion_matrix(y_test, y_pred)
report_df = pd.DataFrame(
classification_report(y_test, y_pred, target_names=target_names, output_dict=True)
).T.round(4)
print("Accuracy:", round(acc, 4))
print("ROC-AUC (macro, OVR):", round(auc_macro, 4))
print("\nClassification report:")
print(report_df.to_string())

Confusion Matrix를 다음과 같이 시각화해볼 수도 있습니다.
plt.figure(figsize=(4.5, 4))
plt.imshow(cm, interpolation="nearest")
plt.title("Confusion Matrix (TabPFN on Wine)")
plt.xlabel("Predicted label")
plt.ylabel("True label")
plt.xticks(range(len(target_names)), target_names, rotation=45)
plt.yticks(range(len(target_names)), target_names)
for i in range(cm.shape[0]):
for j in range(cm.shape[1]):
plt.text(j, i, format(cm[i, j], "d"),
ha="center", va="center",
color="white" if cm[i, j] > cm.max() / 2.0 else "black")
plt.tight_layout()
plt.savefig("wine_confusion_matrix.png", dpi=150)
plt.show()

이 예제에서는 모든 테스트 데이터에 대해서 정확하게 라벨을 예측한 것을 확인할 수 있었습니다.
이 글이 TabPFN 모델을 활용하는 과정에 도움이 되셨기를 바라겠습니다.
잘 봐주셔서 감사드립니다.
'Python > Sklearn' 카테고리의 다른 글
| 파이썬 UMAP 차원 축소 및 시각화 예제 (2) | 2025.08.18 |
|---|---|
| 파이썬 SMOTE 알고리즘 데이터 불균형 해결 예제 (0) | 2022.12.05 |
| [Sklearn] 파이썬 모델 앙상블 : 배깅 / 부스팅 / 보팅 함수 정리 (1) | 2022.09.25 |