Tabular Foundation Models
表形式の基盤モデルは、学習を実行せず、1回のフォワードパスで新しいテーブルを予測します。TabPFNの仕組みと、勾配ブースティング木より優れる場面を解説します。
表形式基盤モデルは、行と列からなる新しいテーブルについて、個別に学習することなく予測する事前学習済みのニューラルネットワークです。ラベル付きテーブルと予測対象の行を与えると、コンテキスト内学習を使います。ラベル付き行をコンテキストとしてモデルに入力し、1回の順伝播で新しいすべての行を予測します。勾配降下法による更新は必要ありません。XGBoost、LightGBM、CatBoostなどの勾配ブースティング木モデルは、データセットごとに学習とチューニングが必要です。表形式の基盤モデルは一度学習すれば、受け取った任意の小規模テーブルに学習内容を適用できます。
TabPFNが合成表から学習する仕組み#
最もよく知られた例はTabPFN(Tabular Prior-data Fitted Network)です。Noah Hollmann、Samuel Müller、Frank Hutterらがフライブルク大学で開発し、現在はPrior Labs社が開発を続けています。これは合成データだけで事前学習されたTransformerです。事前学習では、データ生成過程の事前分布から数百万の人工データセットを生成します。主に、ランダムな関数やノイズを介して特徴量とターゲットを結び付ける、ランダムな構造的因果モデルが使われます。各合成データセットについて、ネットワークは一部のラベル付き行を受け取り、保留された行を予測するよう学習します。これはメタ学習の一種です。このようなタスクを多数経験することで、事前分布に対するベイズ推論を近似するようになり、予測時には特定のドメインのモデルというより、学習された統計的手続きのように振る舞います。
2023年のICLRで発表された初版は、最大1,000件の学習行、100個の数値特徴量、10クラスの分類に対応し、AutoMLシステムと同等の性能を最大230倍高速に実現しました。2025年1月にNature誌で発表されたTabPFN v2は、最大10,000行、500個の特徴量を含むデータセットでの分類と回帰に対応し、カテゴリ特徴量や欠損値も扱えるようにしました。分類では、TabPFN v2は2.8秒の処理で、4時間チューニングした最も強力なベースラインのアンサンブルを上回りました。バージョン2では各テーブルセルに独自の表現を割り当て、列間および行間でアテンションを交互に適用するため、列の固定順序に依存しません。その後のリリースでは上限がさらに引き上げられ、2026年5月にリリースされたTabPFN-3は最大100万件の学習行に対応します。TabICLやAmazonのMitraなど、他の表形式基盤モデルも、合成テーブルで事前学習してコンテキスト内で予測する同じ手法に従っています。
勾配ブースティング木との使い分け#
- 小規模データセット: 数百~数千行の場合、表形式基盤モデルはハイパーパラメーター探索なしで、調整済みの木モデルと同等以上の性能を発揮することが多く、予測確率も概して適切に較正されています。
- 大規模データセット: 数百万行のデータでは、ブースティング木が引き続き実用上の標準です。アテンションのコストはコンテキスト内の行数とともに増えるため、基盤モデルにはGPUとより多くのメモリが必要です。また、予測バッチごとに学習コンテキスト全体を再処理するため、推論は木アンサンブルの評価より遅くなります。
- AutoML: AutoMLは、新しいデータセットごとにアルゴリズムや設定を探索します。表形式基盤モデルは、事前学習で一度獲得した知識によって、その探索の大部分を置き換えます。
- 特徴量エンジニアリング: 引き続き有用です。列に含まれていない情報をモデルが復元したり、誤ったラベルを修正したりすることはできません。
TabPFNの実行#
tabpfnパッケージは、scikit-learn形式の分類器を提供します。最新のチェックポイントは、サインインしてPrior Labsのモデルライセンスに同意した後にのみダウンロードされますが、以下で選択するバージョン2の重みは、その手順なしでダウンロードできます。
from sklearn.datasets import load_breast_cancer
from sklearn.metrics import roc_auc_score
from sklearn.model_selection import train_test_split
from tabpfn import TabPFNClassifier
from tabpfn.constants import ModelVersion
# 569 tumors described by 30 numeric measurements
features, targets = load_breast_cancer(return_X_y=True)
x_train, x_test, y_train, y_test = train_test_split(features, targets, test_size=0.2, random_state=0)
# fit() stores the labeled rows as context; no weights are updated
model = TabPFNClassifier.create_default_for_version(ModelVersion.V2)
model.fit(x_train, y_train)
# One forward pass predicts every test row from that context
probabilities = model.predict_proba(x_test)[:, 1]
print(f"ROC AUC: {roc_auc_score(y_test, probabilities):.3f}")ハイパーパラメーターを設定しない場合、分類器はこのホールドアウト分割で約0.998のROC AUCを達成します。114行のテスト分割では強力なモデル同士を区別するには小さすぎるため、モデル比較では多数のデータセットで交差検証を繰り返します。
有用なテーブルの多くは、他のモデルの出力から作られています。有用なテーブルの多くは、他のモデルの出力から作られています。Predictモードでは、result.to_df()は各Ultralytics YOLO26の結果をPolars DataFrameとして返します。検出ごとに1行が割り当てられ、クラス名、クラスID、信頼度、ボックス座標の列が含まれます。この行と列の形式は、表形式基盤モデルがコンテキストとして読み取るものです。










