TabPFN: Tabular Foundation Model with In-Context Learning
| 항목 |
내용 |
| 논문 |
Accurate predictions on small data with a tabular foundation model |
| 저자 |
Noah Hollmann, Samuel Muller, Frank Hutter et al. (University of Freiburg) |
| 게재 |
Nature (2025.01) |
| arXiv |
2207.01848 (v1: ICLR 2023) |
| GitHub |
automl/tabpfn |
핵심 아이디어
TabPFN(Tabular Prior-data Fitted Network)은 In-Context Learning을 활용한 tabular foundation model이다. 별도의 학습 과정 없이 단일 forward pass로 예측을 수행한다.
기존 방식 vs TabPFN
| 기존 방식 |
TabPFN |
| 데이터셋마다 모델 학습 필요 |
Pre-trained 모델 사용 |
| 하이퍼파라미터 튜닝 필수 |
튜닝 불필요 |
| 수 분~수 시간 학습 |
단일 forward pass (초 단위) |
| 개별 샘플 단위 추론 |
전체 데이터셋 단위 추론 |
성능 (10,000 샘플 이하 데이터셋)
| 모델 |
튜닝 시간 |
평균 성능 |
| TabPFN |
0 (forward pass) |
1위 |
| XGBoost (4h tuning) |
4시간 |
2위 |
| CatBoost (4h tuning) |
4시간 |
3위 |
| LightGBM (4h tuning) |
4시간 |
4위 |
속도 향상: 분류 5,140배, 회귀 3,000배 (튜닝된 GBDT 대비)
작동 원리
In-Context Learning 메커니즘
Pre-training Phase (한 번만 수행):
+------------------+ +-------------------+ +------------------+
| Synthetic Data | ---> | Transformer Model | ---> | Trained TabPFN |
| (100M+ datasets) | | Training | | |
+------------------+ +-------------------+ +------------------+
Inference Phase (각 데이터셋에 적용):
+------------------+ +------------------+ +------------------+
| X_train, y_train | ---> | TabPFN | ---> | y_test 예측 |
| X_test | | (single forward) | | |
+------------------+ +------------------+ +------------------+
핵심 특징:
1. 데이터셋 전체를 입력: 학습 데이터 + 테스트 데이터를 함께 입력
2. 컨텍스트 기반 예측: 학습 데이터를 컨텍스트로 활용하여 테스트 예측
3. 메타 학습: 수억 개의 합성 데이터셋으로 "학습 방법" 자체를 학습
Bayesian 해석
TabPFN은 사후 예측 분포를 근사한다:
p(y_test | X_test, X_train, y_train)
Prior(합성 데이터 생성 분포)가 정의하는 베이지안 예측을 수행한다.
아키텍처 상세
Two-Way Attention 메커니즘
기존 Transformer는 1D 시퀀스 처리에 최적화되어 있다. TabPFN은 테이블의 2D 구조를 활용하는 attention을 설계했다:
Cell Attention Flow:
Feature 1 Feature 2 Feature 3
-------- -------- --------
Row 1: [C11] <---> [C12] <---> [C13] (Row-wise attention)
| | |
v v v (Column-wise attention)
Row 2: [C21] <---> [C22] <---> [C23]
| | |
v v v
Row 3: [C31] <---> [C32] <---> [C33]
| Attention 타입 |
역할 |
| Row-wise |
동일 샘플 내 피처 간 관계 학습 |
| Column-wise |
동일 피처의 샘플 간 분포 학습 |
불변성 (Invariance)
| 속성 |
설명 |
| Sample order invariance |
샘플 순서와 무관한 예측 |
| Feature order invariance |
피처 순서와 무관한 예측 |
출력 분포
회귀 태스크에서 piece-wise constant 분포를 출력하여 불확실성 정량화가 가능하다:
+--------+
| p(y) | +--+
| | | |
| | +--+ +--+
| | | |
+--------+-+--------+----> y
y1 y2 y3
다중 모드 분포, 비대칭 분포 등 복잡한 타겟 분포 표현 가능.
합성 데이터 생성 (Prior)
Structural Causal Model (SCM) 기반
TabPFN의 성능은 합성 데이터 품질에 의존한다. SCM을 사용하여 다양한 인과 구조를 생성한다:
SCM Generation Pipeline:
1. Hyperparameter Sampling
+------------------------------------------+
| - Dataset size (n_samples, n_features) |
| - Difficulty level |
| - Causal structure complexity |
+------------------------------------------+
|
v
2. DAG Construction
+------------------------------------------+
| [Noise] --> [Z1] --> [Z2] |
| | | |
| v v |
| [F1] [F2] --> [T] |
+------------------------------------------+
|
v
3. Data Generation
+------------------------------------------+
| Propagate noise through graph |
| Extract features (F) and target (T) |
+------------------------------------------+
|
v
4. Post-processing
+------------------------------------------+
| - Add missing values |
| - Add noise / outliers |
| - Categorical encoding |
+------------------------------------------+
생성되는 데이터 특성
| 특성 |
구현 방식 |
| 비선형 관계 |
소규모 신경망으로 edge 매핑 |
| 피처 간 상호작용 |
DAG 구조로 복잡한 의존성 모델링 |
| 결측치 |
랜덤 마스킹 |
| 이상치 |
노이즈 주입 |
| 범주형 변수 |
이산화 및 인코딩 |
| 클래스 불균형 |
다양한 클래스 비율 샘플링 |
합성 데이터의 장점
| 장점 |
설명 |
| Privacy |
실제 데이터 사용 안 함 |
| No data leakage |
테스트셋 오염 원천 차단 |
| Unlimited scale |
필요한 만큼 생성 가능 |
| Controllable |
원하는 특성 명시적 제어 |
TabPFN v2 개선사항 (Nature 2025)
확장성
| 항목 |
v1 (ICLR 2023) |
v2 (Nature 2025) |
| 최대 샘플 수 |
1,000 |
50,000 |
| 최대 피처 수 |
100 |
500 |
| 회귀 지원 |
X |
O |
| 범주형 지원 |
제한적 |
완전 지원 |
| 결측치 처리 |
X |
O |
| 메모리 효율성 |
낮음 |
4배 개선 |
최적화 기법
| 기법 |
효과 |
| Flash Attention |
메모리 및 속도 향상 |
| Half-precision LayerNorm |
메모리 절감 |
| Activation Checkpointing |
메모리 절감 |
| Train-state Caching |
추론 속도 300배 향상 (CPU) |
확장 기능
| 기능 |
설명 |
| Fine-tuning |
특정 도메인 데이터로 추가 학습 |
| Density Estimation |
데이터 분포 추정 |
| Generative Modeling |
합성 데이터 생성 |
Python 구현
설치
기본 사용법 (분류)
from tabpfn import TabPFNClassifier
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 데이터 로드
X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
# TabPFN 분류기
clf = TabPFNClassifier(device='cpu')
# 학습 및 예측 (단일 forward pass)
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
y_proba = clf.predict_proba(X_test)
print(f"Accuracy: {accuracy_score(y_test, y_pred):.4f}")
회귀 태스크
from tabpfn import TabPFNRegressor
from sklearn.datasets import fetch_california_housing
from sklearn.metrics import mean_squared_error
import numpy as np
# 데이터 로드 (서브샘플링 - TabPFN은 소규모 데이터에 최적화)
X, y = fetch_california_housing(return_X_y=True)
idx = np.random.choice(len(X), size=5000, replace=False)
X, y = X[idx], y[idx]
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
# TabPFN 회귀기
reg = TabPFNRegressor(device='cpu')
reg.fit(X_train, y_train)
# 점 예측
y_pred = reg.predict(X_test)
print(f"RMSE: {np.sqrt(mean_squared_error(y_test, y_pred)):.4f}")
# 분포 예측 (불확실성 정량화)
y_dist = reg.predict_full(X_test) # 전체 분포 반환
결측치 처리
import numpy as np
from tabpfn import TabPFNClassifier
# 결측치 포함 데이터
X_train_missing = X_train.copy()
X_train_missing[np.random.rand(*X_train.shape) < 0.1] = np.nan
# TabPFN은 결측치를 자동 처리
clf = TabPFNClassifier(device='cpu')
clf.fit(X_train_missing, y_train) # 별도 imputation 불필요
y_pred = clf.predict(X_test)
앙상블 (성능 향상)
from tabpfn import TabPFNClassifier
# 여러 TabPFN 모델의 앙상블
clf = TabPFNClassifier(
device='cpu',
N_ensemble_configurations=32, # 앙상블 크기
)
clf.fit(X_train, y_train)
y_proba = clf.predict_proba(X_test) # 앙상블 평균 확률
GPU 활용
import torch
from tabpfn import TabPFNClassifier
# GPU 사용 (대규모 데이터셋에서 속도 향상)
device = 'cuda' if torch.cuda.is_available() else 'cpu'
clf = TabPFNClassifier(device=device)
# 대용량 데이터셋의 경우 배치 처리
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test, batch_size=1000)
제한사항 및 적용 가이드
데이터셋 크기 제한
| 데이터 크기 |
TabPFN 적합도 |
권장 대안 |
| < 1,000 |
최적 |
- |
| 1,000 - 10,000 |
우수 |
- |
| 10,000 - 50,000 |
가능 |
TabM, GBDT |
| > 50,000 |
부적합 |
TabM, GBDT, Deep Learning |
피처 수 제한
| 피처 수 |
적합도 |
비고 |
| < 100 |
최적 |
추가 처리 불필요 |
| 100 - 500 |
가능 |
메모리 고려 |
| > 500 |
부적합 |
피처 선택 필요 |
적합한 사용 케이스
| 케이스 |
적합도 |
이유 |
| 소규모 데이터 분류/회귀 |
높음 |
설계 목적 |
| AutoML 파이프라인 |
높음 |
튜닝 불필요, 빠른 baseline |
| 불확실성 정량화 필요 |
높음 |
분포 출력 지원 |
| 결측치 많은 데이터 |
높음 |
자동 처리 |
| 대규모 데이터 (100K+) |
낮음 |
확장성 제한 |
| 실시간 스트리밍 |
중간 |
배치 처리에 최적화 |
TabPFN vs TabM 비교
| 항목 |
TabPFN |
TabM |
| 접근법 |
In-Context Learning |
Parameter-Efficient Ensembling |
| 학습 방식 |
Pre-trained (학습 불필요) |
데이터셋마다 학습 필요 |
| 최적 데이터 크기 |
< 10,000 |
10,000 - 1,000,000 |
| 추론 속도 |
빠름 (단일 forward) |
중간 |
| 학습 속도 |
N/A (즉시 사용) |
수 분 ~ 수 시간 |
| 확장성 |
제한적 |
우수 |
| 하이퍼파라미터 |
거의 없음 |
튜닝 권장 |
| 커스터마이징 |
Fine-tuning |
아키텍처 변형 |
사용 시나리오 가이드
| 시나리오 |
권장 모델 |
| 빠른 baseline 필요 |
TabPFN |
| 데이터 < 10K |
TabPFN |
| 데이터 10K - 100K |
TabM 또는 둘 다 시도 |
| 데이터 > 100K |
TabM |
| 튜닝 시간 제한 |
TabPFN |
| 최고 성능 필요 |
둘 다 시도 후 선택 |
최신 연구 동향 (2025-2026)
TabPFN 관련 후속 연구
| 연구 |
내용 |
출처 |
| TabPFN Unleashed |
대규모 데이터셋으로 확장 |
ICML 2025 |
| TabICL |
더 큰 데이터에 ICL 적용 |
ICML 2025 |
| TabDPT |
실제 데이터로 pre-training |
NeurIPS 2025 |
| Time Series TabPFN |
시계열 예측 확장 |
arXiv 2025 |
Tabular Foundation Model 생태계
Tabular Foundation Models:
In-Context Learning 계열:
+-- TabPFN (Freiburg)
+-- TabICL (INRIA)
+-- TabDPT (Toronto)
Traditional DL 계열:
+-- TabM (Yandex)
+-- TabR (Yandex)
+-- FT-Transformer (Yandex)
참고 자료