NextStat для специалистов по данным
От sklearn к строгому статистическому выводу
Вы обучаете модели, оцениваете метрики и поставляете предсказания. NextStat добавляет то, чего не хватает многим ML-пайплайнам: статистически строгую оценку неопределенности и проверку гипотез с учетом всех важных для вас систематических неопределенностей. Реализовано на Rust, вызывается из Python и дифференцируемо в PyTorch.
Суть в одном предложении
NextStat позволяет заменить ad-hoc error bars на интервалы на основе профильного правдоподобия, заменить grid search на байесовское семплирование NUTS и обучать нейросети, у которых функция потерьявляется полноценным статистическим тестом.
Что вы уже знаете → как это называется в NextStat
| Ваши термины | Термин NextStat | Зачем это важно |
|---|---|---|
| Важность признаков (feature importance) | Ранкинг (impact plot) | Показывает, как каждая систематика сдвигает результат (вариации up/down) |
| Функция потерь | Отрицательное лог-правдоподобие (NLL) | Профильное правдоподобие автоматически профилирует мешающие параметры |
| Доверительный интервал | Интервал на основе профильного правдоподобия | Контроль покрытия, а не эвристическое приближение бутстрепом |
| p-value / значимость | CLs / Z₀ (значимость открытия) | Учитывает эффект множественных сравнений и систематические неопределённости |
| Подбор гиперпараметров | Профильный скан / интеграция Optuna | Скан по параметру интереса с полным профилированием |
| Кросс-валидация | Toy Monte Carlo (псевдоэксперименты) | Сэмплирование псевдоэкспериментов для проверки покрытия и смещения |
| DataFrame | Таблица Arrow / DataFrame Polars | Zero-copy ingest через Arrow IPC, без оверхеда сериализации |
Быстрый старт за 5 минут
import nextstat
# 1. Загрузить модель (pyhf JSON workspace - спецификация эксперимента)
model = nextstat.from_pyhf("workspace.json")
# 2. Фит (MLE) - как sklearn .fit(), но с полной оценкой неопределенностей
result = nextstat.fit(model)
print(f"Лучший фит: {result.bestfit}")
print(f"Неопределенности: {result.uncertainties}")
print(f"Матрица корреляций: {result.corr_matrix}")
# 3. Проверка гипотезы: есть ли сигнал
hypo = nextstat.hypotest(model, poi_value=1.0)
print(f"CLs = {hypo.cls:.4f}") # < 0.05 - исключение на уровне 95% CL
# 4. Важность систематик: какие неопределенности влияют сильнее всего
ranking = nextstat.ranking(model)
for r in ranking[:5]:
print(f" {r.name}: +{r.impact_up:.3f} / {r.impact_down:.3f}")
# 5. Профильный скан: ландшафт правдоподобия
scan = nextstat.scan(model, poi_values=[0, 0.5, 1.0, 1.5, 2.0])
# -> scan.deltanll_values для кривой -2ΔlogLArrow / Polars: ваши данные без копирования
Если ваши данные живут в Polars, PyArrow, DuckDB или Spark, NextStat читает их напрямую через Arrow IPC и не платит оверхед сериализации.
import polars as pl
import nextstat
df = pl.read_parquet("histograms.parquet")
table = df.to_arrow()
model = nextstat.from_arrow(table, poi="mu", observations={"SR": [10, 20]})
result = nextstat.fit(model)
# Экспорт обратно в Arrow для дальнейшего анализа
yields = nextstat.to_arrow(model, params=result.bestfit, what="yields")Дифференцируемое обучение: loss = статистический тест
Ключевая фича для ML: обучайте нейросеть, у которой функция потерь равна реальной значимости открытия (Z₀), а все систематические неопределенности профилируются. Градиенты проходят через полную статистическую модель благодаря теореме об огибающей.
from nextstat.torch import SignificanceLoss, SoftHistogram
# Выход нейросети: непрерывные scores -> мягкая гистограмма -> loss по Z₀
loss_fn = SignificanceLoss(model, "signal")
soft_hist = SoftHistogram(bin_edges=torch.linspace(0, 1, 11))
for batch_x, batch_w in dataloader:
scores = classifier(batch_x)
histogram = soft_hist(scores, batch_w)
loss = loss_fn(histogram.double().cuda()) # → scalar -Z₀
loss.backward() # gradients to NN weights
optimizer.step()Когда использовать NextStat, а когда sklearn или statsmodels
| Задача | Лучший инструмент |
|---|---|
| Быстрая логистическая регрессия на чистом наборе данных | sklearn |
| GLM с робастными стандартными ошибками и подробной сводкой | statsmodels |
| Проверка гипотез с множественными систематическими неопределенностями | NextStat |
| Обучение нейросети, где loss = значимость открытия | NextStat |
| GPU-ускоренный пакетный фит (тысячи моделей) | NextStat |
| Апостериорное распределение: NUTS + диагностика | NextStat |
| Воспроизводимые артефакты валидации для аудита | NextStat |
Следующие шаги
- Обзор ML - Терминологический мост (physics ↔ ML) → Обзор ML
- Гайд по обучению - End-to-end руководство по SignificanceLoss → Гайд по обучению
- Python API - Полная справка по API → Python API
- Arrow / Polars - Обмен данными без копирования → Arrow / Polars
- Агентные инструменты - Определения tools для LLM-управляемого анализа → Агентные инструменты
- API сервера - Self-hosted GPU-инференс для общей вычислительной среды → API сервера
- Глоссарий - Сопоставление терминов HEP ↔ DS ↔ Quant ↔ Bio → Глоссарий
