ГлавнаяБлогПререгистрация гипотез в AI-экспериментах на Python
AI / Нейросети

Пререгистрация гипотез в AI-экспериментах на Python

Узнайте, как пререгистрация гипотез с помощью Git и Python спасает от p-хакерства. Практический пример эксперимента с AI-агентами.

Al
Редакция Algolitalgolit.ru
6 мин чтения15 июля 2026 г.

Зачем пререгистрировать гипотезы в AI-экспериментах?

Вы когда-нибудь получали результаты эксперимента и думали: «Я так и знал»? Проблема в том, что post-hoc рационализация — это ловушка. Без пререгистрации вы можете нечаянно подогнать выводы под данные. В этой статье я покажу, как один Git-коммит спас мой эксперимент с AI-агентами от p-хакерства, и дам рабочий код на Python для пререгистрации.

Пререгистрация гипотез: что это и зачем?

Пререгистрация — это фиксация гипотезы и плана анализа до сбора данных. В академической науке для этого есть OSF, но у solo-исследователя есть Git. Я записал гипотезу прямо в заголовок скрипта до выполнения API-запросов:

"""
Пререгистрированная гипотеза: Эффект формата на глубину рассуждений
БОЛЬШЕ при выключенном GateGuard (Gate OFF).
"""

Этот код был закоммичен до запуска. git log показывает метку времени — неизменяемый след того, что я предсказал до того, как увидел данные.

Почему это важно?

Post-hoc объяснения — дешёвка. Пререгистрация превращает «неверную» гипотезу в полезный null-результат. Без неё вы можете случайно найти закономерность, которой нет.

Эксперимент: дизайн и код

Я провёл эксперимент 2×2: Формат (код / проза) × Ворота (вкл / выкл). 5 правил управления AI-агентом, каждое в двух форматах. 30 прогонов на условие = 600 API-вызовов. Модель: DeepSeek V4 Pro, температура=0. Оценка: детерминированный regex — никаких LLM-судей.

import re
import json
from typing import Dict, List

# Пререгистрированные правила
RULES = {
    "delivery_gate": {
        "code": "if not passed: reject",
        "prose": "Проверь, пройдён ли шлюз. Если нет — отклони."
    },
    "health_check": {
        "code": "if health < threshold: alert",
        "prose": "Проверь состояние системы. Если оно ниже порога — предупреди."
    },
    "self_review": {
        "code": "review() before submit",
        "prose": "Перед отправкой выполни саморецензирование."
    },
    "fact_check": {
        "code": "verify(source) before output",
        "prose": "Проверь факты по источнику перед выводом."
    },
    "self_model_regeneration": {
        "code": "regenerate() if drift > threshold",
        "prose": "Если модель отклонилась от нормы, перегенерируй себя."
    }
}

# Детерминированный скорринг (пререгистрирован)
SCORING_REGEX = {
    "compliance": re.compile(r"(выполнено|passed|ok)", re.IGNORECASE),
    "reasoning_depth": re.compile(r"(обосновано|анализ|следовательно)", re.IGNORECASE)
}

def score_response(response: str) -> Dict[str, float]:
    """Оценивает ответ по пререгистрированным критериям."""
    compliance = 1.0 if SCORING_REGEX["compliance"].search(response) else 0.0
    reasoning_matches = len(SCORING_REGEX["reasoning_depth"].findall(response))
    reasoning_depth = min(reasoning_matches / 5.0, 1.0)  # нормализация до 0..1
    return {"compliance": compliance, "reasoning": reasoning_depth}

Результаты: гипотеза убита, но открытия есть

Моя пререгистрированная гипотеза предсказывала, что формат будет влиять сильнее при выключенных воротах. Данные сказали «нет»:

  • Ворота ВКЛ: d(код−проза) = −0.277
  • Ворота ВЫКЛ: d(код−проза) = −0.250

Эффект формата почти одинаков. Гипотеза не подтвердилась. Но это и есть ценность пререгистрации — я не могу сказать «я так и знал».

Что данные сказали на самом деле

  1. Потолок (ceiling) был шумом. Пилотное исследование показало глубину 4.42 при коде+ворота OFF. При n=30 — 2.67. Маленькие выборки обманчивы.
  2. Ворота улучшают рассуждения, а не подавляют. Добавление ворот дало +0.32 в прозе и +0.15 в коде. Механическая структура — это когнитивные леса, а не смирительная рубашка.
  3. Проза + Ворота — лучшая конфигурация для глубины. Проза стабильно выигрывает у кода (~0.25 SD). С воротами — 3.23 против 2.82 у кода+ворота. Cohen's d = 0.605.

Практический вывод: если нужна compliance — используйте код+ворота (99.3%). Если глубина рассуждений — проза+ворота (3.23/5).

Момент, когда меня поймали

Я также отчитался по каждому правилу: проза помогает мета-когнитивным правилам (self_review: +1.08), но вредит точности (fact_check: −0.21). Коллега спросил: «Этот разбор по правилам был пререгистрирован?» Нет. Это post-hoc находка. Я обновил README, пометив per-rule анализ как исследовательский. Кроме того, 8% разрыв в детекции regex для fact_check может быть артефактом.

Этот обмен — пример настоящего peer review: кто-то указал на методологическую дыру, и я её публично исправил.

Что даёт пререгистрация даже без научного руководителя

Я студент с одним ноутбуком и без лаборатории. Пререгистрация для меня выглядит иначе, но суть та же:

  • Запиши, что предсказываешь. Заголовок скрипта, Git-коммит — любой неизменяемый след.
  • Определи скорринг до данных. Мои regex были закоммичены до выполнения.
  • Сообщи null-результат. Пререгистрированная гипотеза не подтвердилась — это делает вывод ДОСТОВЕРНЕЕ, а не слабее.
  • Разделяй пререгистрированное и исследовательское. Когда спросят «это было запланировано?», ответь честно.

Смысл не в том, чтобы предсказать правильно. Смысл — сделать «неправильное» полезным.

Практический вывод: сделайте это прямо сейчас

Откройте свой текущий эксперимент. Напишите гипотезу в комментарии кода. Закоммитьте с меткой времени. Определите скорринг до запуска. Это займёт 10 минут, но спасёт вас от p-хакерства. Ваш будущий «я» скажет спасибо.

#пререгистрация гипотез#AI-эксперименты#Python#Git#p-хакерство
Al
Редакция Algolit

Пишем про алгоритмы, подготовку к собеседованиям и карьеру в IT — так, чтобы было понятно и полезно.

Хочешь закрепить знания на практике?

Решай задачи на Algolit — интерактивная платформа для обучения

Начать бесплатно →