De Prado — finance in ML as explorable knowledge
Мой эксперимент и рисёрч: превратить плотную книгу по financial ML в инструмент, с которым можно играть и проверять идеи. Здесь — зачем это и какие решения за этим стоят.
Зачем
«Advances in Financial Machine Learning» Маркоса Лопеса де Прадо — плотная книга: формулы, алгоритмы, неочевидные приёмы. Читать её пассивно — значит почти ничего не унести. Мне захотелось проверить идею explorable explanations: что если превратить анемичный текст в рабочий инструмент исследования — такой, где приём из книги можно не просто прочитать, а покрутить руками и почувствовать, как он себя ведёт.
Это мой личный эксперимент и одновременно рисёрч — и про предметную область (структуры финансовых данных), и про формат подачи знания. Педагогическая планка, которую я себе поставил: хороший explorable не иллюстрирует, а позволяет создавать — доводит читателя по пути «понимание → действие → новое знание».
Как это устроено
Сайт собран на Astro: проза — это статика (формулы рендерятся через KaTeX ещё на сборке, оформление — в духе Tufte с выносками на полях), а JavaScript подгружается только там, где есть интерактив. Интерактивные «островки» написаны на Elm (InfoBars, ReturnsDist, ImbalanceClock); тонкая glue-прослойка на TypeScript регистрирует каждый Elm-модуль и связывает его со страницей через порты.
Поверх этого — несколько собственных Astro-компонентов: Explorable (карточка-островок), Drive (управление состоянием виджета из текста), RunJS (запускаемый прямо в странице код), Margin (выноски на полях), ImbalanceFig (SVG, построенный на сборке).
Drive.Решения, которые я принял на этом проекте
Острова, а не SPA
По умолчанию страница — это текст и формулы, отрендеренные статически. Интерактив приезжает точечными островками там, где он нужен, а не оборачивает весь сайт в приложение.
Почему так: жанр здесь — чтение, а не «приложение». Прозе незачем платить за рантайм фреймворка; формулы должны быть видны и проиндексированы сразу, без ожидания JS. Astro-острова дают ровно это — статика быстрая, а тяжёлый интерактив изолирован в своих границах.
Виджеты — на Elm
Каждый островок — это Elm-программа по архитектуре TEA, подключённая через порты.
Почему так: островок — это маленькое stateful-приложение (слайдеры, режимы, перерисовка графиков), и именно здесь цена ошибки в состоянии высокая. Elm даёт гарантию на уровне компилятора: нет null/undefined, неверное состояние просто не собирается. Для интерактива, который должен надёжно работать без присмотра, это идеальный размен — и заодно проверка тезиса, что функциональный подход окупается на практике.
Состоянием виджета управляет проза
Через компонент Drive ссылка прямо в тексте задаёт конфигурацию островка: читатель кликает фразу — и виджет переходит в нужное состояние (подсвечивает режим, выставляет порог). Связь идёт через apply-порт в Elm.
Почему так: это и есть суть explorable — текст и инструмент не живут раздельно. Объяснение ведёт читателя по сценарию, а виджет в этот момент показывает именно то, о чём идёт речь. Получается не «текст плюс игрушка рядом», а единый ход мысли.
Один скелет для всех баров → песочница
Все типы баров из книги — это одна формула: θ += w(tick); режем бар, когда θ ≥ порога. Четыре «разных» бара отличаются только весовой функцией w (время / 1 / объём / цена·объём).
Почему так: увидев общий скелет, читатель перестаёт зубрить четыре рецепта и понимает принцип. А дальше — кульминация, к которой я веду проект: песочница, где w задаёт сам читатель. В этот момент инструмент из «четырёх пресетов» превращается в средство создания — можно изобрести свой бар (по волатильности, по спреду, по токсичности потока). Это и есть «понимание → действие → новое знание» в действии.
Что есть и что впереди
Глава 2 («Financial Data Structures») собрана содержательно: оригинальная проза с формулами и кодом, три рабочих островка, запускаемый прямо в тексте алгоритм через RunJS, табличные модалки «эти бары как таблица» — связка визуализации с числами под ней.
Что впереди: песочница с пользовательской w (главный следующий шаг), CUSUM-фильтр для §2.5, загрузка реальных тиковых данных вместо синтетики. Честно: проект молодой — это исследовательский полигон, а не готовый продукт; мобильную раскладку островков надо причесать, и пока это одна глава из многих.
Проект скоро будет выложен в открытый доступ — тогда здесь появится ссылка на живое демо.