> ## Documentation Index
> Fetch the complete documentation index at: https://docs.priorlabs.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Anomaly Detection

> Detect rare and anomalous samples using TabPFN’s unsupervised extension.

The [**TabPFN Unsupervised Extension**](https://github.com/PriorLabs/tabpfn-extensions/tree/main/src/tabpfn_extensions/unsupervised) 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**.

<img src="https://mintcdn.com/priorlabs/3G1G1o7Jr-FF4nX2/public/outliers.png?fit=max&auto=format&n=3G1G1o7Jr-FF4nX2&q=85&s=0c4674d235dbf74a607ce9916bb6feb5" alt="Outlier detection example" style={{ width:"58%" }} width="585" height="592" data-path="public/outliers.png" />

## Getting Started

First, install the `unsupervised` extension:

```python theme={null}
pip install "tabpfn-extensions[unsupervised]"
```

Then, load your data, initialize a TabPFN classifier and regressor model, and predict outlier scores with the `TabPFNUnsupervisedModel` class:

```python theme={null}
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) = \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.

<Card title="Google Colab Example" icon="book" horizontal href="https://colab.research.google.com/github/PriorLabs/TabPFN/blob/main/examples/notebooks/TabPFN_Demo_Local.ipynb#unsupervised-learning">
  Check out our Google Colab for a demo.
</Card>
