Skip to main content
The TabPFN Unsupervised Extension brings TabPFN’s foundation-model reasoning to unsupervised anomaly detection. TabPFN estimates the likelihood of each sample under its learned distribution. Samples with low joint probability are considered anomalous or outliers. Outlier detection example

Getting Started

First, install the unsupervised extension:
pip install "tabpfn-extensions[unsupervised]"
Then, load your data, initialize a TabPFN classifier and regressor model, and predict outlier scores with the TabPFNUnsupervisedModel class:
import torch
from sklearn.datasets import load_breast_cancer
from tabpfn import TabPFNClassifier, TabPFNRegressor
from tabpfn_extensions.unsupervised import TabPFNUnsupervisedModel

# Load dataset
df = load_breast_cancer(return_X_y=False)
X = df["data"]
attribute_names = df["feature_names"]

# Initialize models
clf = TabPFNClassifier(n_estimators=4)
reg = TabPFNRegressor(n_estimators=4)
model_unsupervised = TabPFNUnsupervisedModel(
    tabpfn_clf=clf, tabpfn_reg=reg
)

# Compute anomaly scores
model_unsupervised.fit(X)

scores = model_unsupervised.outliers(
    torch.tensor(X, dtype=torch.float32),
    n_permutations=10,
)

print("Outlier scores:", scores[:10])

How It Works

TabPFN decomposes the joint feature probability using the chain rule: P(X)=i=1dP(XiX<i)P(X) = \prod_{i=1}^{d} P(X_i \mid X_{<i}) Each conditional term is predicted using a TabPFN model:
  • Continuous features: via probability density (PDF)
  • Categorical features: via probability mass function (PMF)
The model sums log-probabilities across features to produce a sample-level log-likelihood score. Multiple random permutations are averaged to ensure stability across different feature orderings.

Google Colab Example

Check out our Google Colab for a demo.