Технический обзор
NextStat это высокопроизводительный инструментарий статистического вывода на Rust с Python-привязками и CLI. Он покрывает два основных сценария: биновый вывод по правдоподобию на основе workspace-формата HistFactory (ФВЭ и смежные области) и общий стек статистических моделей (регрессии, иерархические модели, временные ряды, эконометрика, фармакометрика).
Область охвата
Биновый вывод по правдоподобию
- Биновые правдоподобия в стиле HistFactory через pyhf JSON и workspace-формат HS3 v0.2
- Детерминированные тесты паритета с pyhf (7-уровневый контракт допусков)
- MLE-фит, скан профильного правдоподобия, проверка гипотезы, верхние пределы CLs
- Ранжирование систематик через автодифференцирование (reverse-mode AD)
- Батч-фиттинг тоев: CPU (Rayon) и GPU (CUDA/Metal)
Общая статистика
- GLM: линейная, логистическая, пуассоновская и отрицательно-биномиальная регрессия с робастными SE и кросс-валидацией
- Многоуровневые (иерархические) модели: случайные интерсепты и наклоны, partial pooling
- Временные ряды: фильтр Калмана, сглаживатель RTS, EM-оценивание, прогнозирование
- Анализ выживаемости: Cox PH, Weibull, экспоненциальная и log-logistic модели, остатки Шоенфельда
- Эконометрика: panel FE, DiD/TWFE, IV/2SLS, doubly-robust AIPW
- Фармакометрика: 1-компартментная пероральная PK, NLME с логнормальными случайными эффектами
Байесовское семплирование
- NUTS-семплер с dual averaging (одна цепь и несколько цепей)
- Диагностика HMC: R-hat, ESS, divergences
- Универсальный контракт LogDensityModel: любая модель, которая предоставляет log_prob и градиент
Архитектура
┌──────────────────────────────────────────────────────────┐
│ Python API (PyO3) CLI (clap) WASM │
├──────────────────────────────────────────────────────────┤
│ ns-inference: MLE, NUTS, профильный скан, CLs, ranking │
├──────────────────────────────────────────────────────────┤
│ ns-compute: NLL, градиент, гессиан (SIMD / Accelerate) │
│ ns-ad: reverse-mode автодифференцирование │
├──────────────────────────────────────────────────────────┤
│ ns-translate: pyhf JSON, HS3 v0.2, TREx config, Arrow │
│ ns-root: нативный ридер ROOT + распаковка zstd │
├──────────────────────────────────────────────────────────┤
│ ns-core: HistFactoryModel, parameters, interpolation │
└──────────────────────────────────────────────────────────┘Целевая совместимость: pyhf JSON / HistFactory
Основная цель по совместимости это схема pyhf JSON. NextStat стремится к следующему:
- Парсить pyhf JSON и строить внутреннее представление модели
- В детерминированном режиме совпадать с канонической целью pyhf (logpdf и twice_nll)
- Согласовывать результаты фита (best-fit параметры, неопределенности, профильные сканы) в пределах документированных допусков
- Давать быстрый production-режим (SIMD, Accelerate, CUDA), не нарушая контракт корректности
Методология валидации
NextStat использует двухрежимную стратегию валидации:
- Режим паритета: суммирование Кэхена, один поток, Accelerate отключен; результаты детерминированы для CI
- Быстрый режим: обычное суммирование, параллелизм Rayon, SIMD/GPU; режим для продакшн-вывода
- 7-уровневая иерархия допусков: от ожидаемых данных по бинам (1e-12) до статистик toy-ансамбля (0.05)
- 3-сторонняя кросс-валидация: pyhf + ROOT/RooFit на канонических HistFactory-фикстурах
- CI: паритет с pyhf является блокирующим гейтом; сравнение с ROOT носит информационный характер
Ключевые показатели производительности
| Операция | Ускорение |
|---|---|
| Профильный скан (31 точка) против ROOT | 283×–880× |
| Профильный скан против pyhf | 37×–75× |
| Батч-тои (1000, CUDA) против последовательного запуска | ~200× |
| Парсинг TTree и заполнение гистограмм против uproot | ~8.5× |
| Ранкинг (16 NP, AD) против конечных разностей в pyhf | ~4× |
| Распаковка zstd (форк ns-zstd) | ~783 MiB/s (PGO) |
Что не является целью (в ближайшей перспективе)
- Точная копия каждого бэкенда и каждой возможности pyhf
- Полная численная идентичность на всех параллельных бэкендах и аппаратуре (GPU/потоки)
- Замена анализных фреймворков или пользовательских инструментов моделирования
- Полная drop-in замена всей поверхности statsmodels
Лицензия
AGPL-3.0-or-later с опцией коммерческой лицензии. См. LICENSE и LICENSE-COMMERCIAL в корне репозитория.
