«… шанс, что человек найдет свое собственное Оправдание или какую-то вероломную версию своего собственного, можно рассчитать равным нулю».

Немецкий шпион во время Первой мировой войны, глубоко в тылу врага в Англии, отчаянно бежит от полиции. Опередив своих преследователей, он обращается к китаеведу, который обнаруживает необычайное открытие. Прадед шпиона, бывший губернатор Юньнани, провел 13 лет до своей смерти, сочиняя роман, который ранее считался безумным бреднем. Ученый понял, что Сад расходящихся троп на самом деле был выдающимся произведением — лабиринтом повествовательного времени, где на каждом стыке происходят все возможные варианты будущего, которые разветвляются, разделяются, а иногда и воссоединяются.

Таков сюжет El jardin de senderos que se bifurcanСад расходящихся тропок, написанный великим аргентинцем Хорхе Луисом Борхесом в 1941 году вместе с La biblioteca de Babel. — Вавилонская библиотека — где находится наша вступительная цитата. Библиотека, как мы узнаем, содержит все возможные комбинации 25 символов в 410-страничных книгах, всего около 10^1 834 097 книг. (Для ощущения масштаба, по оценкам, во Вселенной 10 ^ 80 атомов.) Среди того, что должно выглядеть как бесчисленные тома тарабарщины, находится Гамлет, Гамлет наоборот, версия Гамлета, где все живут долго и счастливо (мой наименее любимый) и Киборг Гамлет, действие которых происходит в 28 веке. Обе истории, возможно, под влиянием новаторских идей квантовой механики своего времени, исследуют практическую бесконечность случайности, выбора и рекомбинации.

Это общие темы и в науке о клинических данных, или, по крайней мере, они, безусловно, должны быть.

Этот блестящий комикс xkcd прекрасно подводит итог — https://xkcd.com/882/

Мы, ученые и люди, ищем отношения, чтобы понять мир. Находим связи между переменными. Мы применяем статистику, чтобы отделить сигнал от шума. Но мы забываем, насколько невероятно обширное пространство возможных взаимосвязей мы изучаем благодаря безжалостной математике комбинаторики. Даже 10 бинарных переменных могут встречаться в более чем тысяче уникальных комбинаций.

Как и сумасшедшие философы в мире Борхеса, трудно понять, нашли ли мы Гамлета или немного другую имитацию. К сожалению, перспектива найти что-то настолько заманчива, что даже при чистых намерениях научные области, как правило, наполняются «открытиями», которые, если их действительно подвергнуть проверке, не выдерживают критики. Здесь я рассмотрю несколько способов, которыми это должно обрамлять нашу интерпретацию исследований и науки о данных.

Пути разветвления, скрытые в подгруппах

Классическая и простейшая ситуация, когда это возникает, — это анализ подгрупп. Если вы проводите клинические испытания препарата для лечения акне, у вас может возникнуть соблазн выяснить, насколько хорошо он действует на женщин, детей до 16 лет или только на тех, кто живет в Небраске. Вы можете найти некоторые любопытные теории для изучения этих данных, но большинство исследователей и редакторов журналов на данный момент знают, что не следует относиться к вашим анализам слишком серьезно. Если ваше исследование было разработано для оценки акне в целом, результаты в Небраске, вероятно, являются просто статистическим шумом — ошибкой первого рода на техническом жаргоне.

Как прекрасно указывает xkcd, использование типичного p-значения 0,05 явно устанавливает вероятность 1 из 20, что рассматриваемый результат является просто статистическим шумом. Если вы изучите 1 вещь — влияние вашего препарата на прыщи — это может быть нормально.

Но если вы изучите 20 вещей — взаимодействие препарата с разными полами, возрастами или штатами Великих равнин — порог 1 из 20 будет абсурдным. Вы почти наверняка обнаружите взаимосвязь совершенно случайно, и научное сообщество не должно обращать на это внимания.

Это забавно доказать с помощью Python и некоторых случайно сгенерированных данных. Я предоставил код ниже для вашего удовольствия.

Пути разветвления, скрытые в наблюдательных исследованиях

Большинство исследователей и, конечно же, большинство научных журналов в наши дни достаточно умны, чтобы избежать описанной выше ловушки анализа подгрупп. Существуют различные способы статистической корректировки, и большинство людей смотрят на гигантские таблицы анализа подгрупп с соответствующим скептицизмом. Проблема возникает, когда сад расходящихся тропок не так очевиден.

Другой классический, но менее известный пример этого заблуждения возникает во всех видах ретроспективного анализа данных. Социальные науки и экономику часто обыгрывают, но они, конечно, не одиноки. Допустим, вы изучаете исторический набор данных о росте числа рабочих мест с различными законами о минимальной заработной плате. Даже гигантский набор данных будет зашумлен — разные штаты, разные годы, разные законы и т. д. Вам, безусловно, придется много очищать и включать множество контрольных переменных.

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

В вашей статье может показаться, что был исследовательский вопрос с ответом «да/нет». Но каждый выбор контроля, удаления выбросов или регрессионного дизайна вводит новую развилку на пути. Все эти ответвления могут легко создать аналитическое пространство с тысячами измерений. Даже с благими намерениями исследователи обычно выбирают те, которые поддерживают их гипотезы… или отказываются от своих усилий, не публикуя их.

В результате получается какофония кажущихся противоречивыми анализов схожих данных и множество страстных споров. К сожалению, правду трудно найти.

Эндрю Гельман из Колумбийского университета среди прочих вдумчиво написал на эту тему. Иногда его называют рыбацкой экспедицией или взломом. Иногда это симптом невежества или безразличия, но я подозреваю, что обычно это просто человеческий фактор. Я сам стал жертвой этого, когда изучал обширную базу данных о здоровье и богатстве африканцев в поисках доказательств того, что меры по борьбе с малярией были полезными. Что не нравится в профилактике и лечении смертельной болезни? Но в конце концов я понял, что мой выбор контрольных переменных, в основном произвольный, колебал анализ от очень положительного до в основном нерелевантного и откровенно вредного. Возможно, истина все еще где-то рядом, но снова и снова просматривая мой набор данных, я не собиралась ее находить.

Пути разветвления, скрытые в областях исследований

До сих пор мы говорили об отдельных исследованиях. Однако, если вы приблизитесь к макроуровню целых областей исследований, я согласен с моим коллегой из Стэнфорда, превосходно усатым Джоном Иоаннидисом, проблема становится еще более хлопотной.

Вернемся к примеру xkcd о мармеладах, вызывающих прыщи. Представьте, что существует 20 исследовательских групп, изучающих этот вопрос. 19 из них — мы правильно думаем — заключают, что никакой связи нет. Они продолжают свою исследовательскую карьеру и ищут еще одну ключевую информацию об акне. А вот 20-я группа — совершенно случайным статистическим образом — находит связь. Теперь они считают, что те, кто ест мармелад, более восприимчивы к прыщам, и публикуют свои результаты. Для них результат выглядит солидным, и они действительно не сделали ничего плохого. Они нашли взаимосвязь и точно сделали свою статистику. Вероятно, они понятия не имеют, что 19 других групп в 19 других университетах провели аналогичные исследования и ничего не нашли. История, которая, как правило, публикуется — как в научных журналах, так и в популярных средствах массовой информации — именно эта, более сенсационная (феномен, который часто называют проблемой «ящика файлов»), даже если она может быть не более чем ложной корреляцией.

Как указывает Иоаннидис, эта проблема может быть особенно заметной в трудно изучаемых областях или областях, в которых уже есть большая проблема разветвления путей. Одним из классических примеров являются исследования ассоциаций всего генома. Имея около 30 000 генов и бесчисленное множество их перестановок и комбинаций, вам не нужно особо усердно искать корреляции между тем или иным геном и каким-то ужасным, загадочным заболеванием. Я вижу много таких статей об аутизме и раке. И хотя мне бы очень хотелось, чтобы мы могли предотвращать и лечить эти болезни, большая часть этих статей, похоже, мало чем помогает.

Другая область, которую Иоаннидис, я и многие другие критикуем за эту проблему, — это питание. Разные продукты в разных сочетаниях для разных групп населения имеют огромную проблему разветвления. Комбинации, по сути, бесконечны — вот что делает знакомство с кухней таким замечательным! Но это упрощает обнаружение и публикацию взаимосвязи между некоторыми продуктами питания и некоторыми заболеваниями. Найти действительно полезные взаимосвязи, которые подтверждаются клинической практикой, чрезвычайно сложно. Точно так же, как в нашей Вавилонской библиотеке есть и Гамлет, и скучная версия, где все живут долго и счастливо, научные журналы пестрят противоречивыми выводами о влиянии на здоровье жиров, углеводов, соли и всего, что между ними.

Вдобавок Иоаннидис отмечает, что такие области, как питание, со временем увеличивают свои предубеждения.

Одна влиятельная старая статья может стать догмой, даже если это был просто статистический шум, соответствующий предубеждениям своего времени. Этот пионер прокладывает путь к большему количеству статистического шума, который, кажется, усиливает его. Так рождается ложная догма.

Многие утверждают, что Ансель Киз и Исследование 7 стран — один из таких ложных снежных комов, но я оставлю этот спор другим.

Машинное обучение усиливает каждое статистическое свойство… включая проблему разветвления путей

Машинное обучение, как говорится, такое же, как и любая другая статистическая модель… только больше. Гипервентиляция изобилует обещаниями и опасностями машинного обучения, особенно для медицины. Я думаю, что ситуация более тонкая. По сравнению с традиционными методами, у машинного обучения есть гораздо более обширный Сад расходящихся путей для изучения, поэтому нам нужно быть особенно осторожными в том, какие вопросы мы ему задаем и как мы интерпретируем его дельфийские ответы.

Еще несколько лет назад самыми сложными прогностическими моделями в медицине были логистические регрессии с несколькими переменными. Возможно, некоторые из них были переменными взаимодействия — например, возраст x пол — или трансформациями — например, log(возраст). Отличным примером является калькулятор риска ASCVD с 13 входными данными, включая несколько взаимодействий и условий журнала. Это довольно причудливо по меркам эпохи до машинного обучения. Его авторам нужно было выбрать, какие 13 переменных были выбраны, какие условия взаимодействия попробовать, какие преобразования степени или логарифма попробовать для каждого… Скажем несколько консервативно, что все это дало авторам ASCVD 20 бинарных выборов, которые нужно сделать, что является Садом 2. ^ 20 или около 1 миллиона (10 ^ 6) путей разветвления. Это большой Сад для блужданий, где, безусловно, достаточно места для поиска ложных корреляций. Но это ничто по сравнению с типичной нейронной сетью…

Действительно, именно поэтому было разработано машинное обучение. Старомодная регрессия усложняет — как с вычислительной, так и с практической точки зрения — изучение взаимосвязей между множеством переменных. Даже условия взаимодействия с 3 переменными для анализа с 20 переменными добавляют 1140 условий для расчета и отслеживания. Я не могу вспомнить, когда в последний раз видел таблицу результатов в Медицинском журнале Новой Англии с 1140 пунктами. Теперь нейронные сети могут легко обрабатывать тысячи входных переменных вместе со сложными нелинейными взаимодействиями между ними. Внезапно Сад расходящихся тропок стал значительно больше. Истинный размер во многом зависит от дизайна конкретной нейронной сети, но в нашей метафоре ASCVD это больше похоже на 20 факториалов (~ 10 ^ 19), чем на 2 ^ 20 путей разветвления.

Ясно, что этот размер Сада — замечательная сила для распознавания изображений. Но это может быть проблематично в таких областях, как медицина, где ложные корреляции труднее обнаружить и уже представляют большую проблему для этой области. Если в вашем наборе данных есть какая-либо корреляция, нейронная сеть ее найдет. И это может быть не то, что вы хотите.

Сегодня в этой области существует большое выкручивание рук по поводу объяснимости или черного ящика природы машинного обучения, и они указывают на это как на причину, чтобы не принимать его во внимание. Для меня это недальновидно. Сколько врачей, использующих калькулятор ASCVD, понимают лежащую в его основе математику? И может ли кто-нибудь, кроме его авторов, объяснить, как они сделали свой выбор в своем маленьком Саду расходящихся троп?

Если есть проблема с машинным обучением, о которой мы как область должны беспокоиться, это проблема Сада расходящихся троп. И это та же самая проблема, с которой мы должны быть осторожны в любом исследовании.

Бонус 1: найти собственное оправдание

В нашей вступительной цитате из «Вавилонской библиотеки» Борхес утверждает:

«… шанс, что человек найдет свое собственное Оправдание или какую-то вероломную версию своего собственного, можно рассчитать равным нулю».

И он прав, конечно, по крайней мере в любом практическом смысле. Всего библиотека содержит 10^1 834 097 книг. Скажем, мы щедро отдали себе целых 100 лет жизни на поиски этого неуловимого Оправдания. С ~3x10^7 секундами в году это дает нам 3x10^9 секунд для поиска. Это означает, что нам пришлось бы читать примерно 10^1 834 088 книг в секунду, чтобы иметь хоть какой-то реальный шанс найти это единственное подтверждение в библиотеке. Моя версия Python не позволяет вычислить примерно 10^175, так что расчетные шансы, что мы найдем наше подтверждение в библиотеке, действительно равны нулю.

Бонус 2: протестируйте свои собственные мармеладки и исследование прыщей

Я использую простой тест разницы двух пропорций и благодарен Сатье за ​​реализацию модели на Python.

Начните с обычного импорта.

import random
import math
import numpy as np
import pandas as pd
import scipy.stats.distributions as dist

Определите свои цвета мармеладки. Я немного ленив и просто помечаю их как целые числа — потому что Python может делать это автоматически — вместо того, чтобы вводить названия 30 различных цветов. Но вы увидите, что это не имеет значения. Эти числа используются только как метки, а не для каких-либо расчетов. Я использую 30 вместо 20 только для иллюстрации — с 20 все еще есть ~2/3 шанса не найти ложную корреляцию в данном эксперименте. (Это версия классической проблемы дня рождения.)

colors = np.arange(0,30,1)

А затем самое интересное — случайные данные! Здесь я генерирую выборку из 10 000 «людей», которые случайным образом распределяются между любителями мармеладок и/или страдающими прыщами с вероятностью 50:50 для каждого и без корреляции между ними. Если они получают 1 за мармеладки, я также случайным образом назначаю им 1 из 30 цветов.

samples = []
for n in range(10000):
    anyjb = random.choice((0,1))
    if anyjb == 1:
        color = random.choice(colors)
    else: color = np.nan
    acne = random.choice((0,1))
    samples.append([color,anyjb,acne])

Затем проанализируйте общую численность населения. Как и ожидалось, очень маловероятно, что вы обнаружите связь между мармеладками в целом и прыщами, особенно при довольно большом размере выборки.

data = pd.DataFrame(samples,columns=['color','anyjb','acne'])
contingency_table_ca = pd.crosstab(data['anyjb'],data['acne']) #Contingency Table
contingency_table_ca
# Doesn't get used, just helps you eyeball the proportions
pd.crosstab(data.anyjb,data.acne).apply(lambda r:r/r.sum(),axis=0)
total_proportion_acne = (data.acne == 1).mean()
#This table helps us to calculate the SE.
prop = data.groupby("anyjb")["acne"].agg([lambda z: np.mean(z==1), "size"])
prop.columns = ['proportions_acne','total_counts']
#Calculating standard error
variance = total_proportion_acne * (1 - total_proportion_acne)
standard_error = np.sqrt(variance * (1 / prop.total_counts[1] + 1 / prop.total_counts[0]))
# Calculate the test statistic 
best_estimate = (prop.proportions_acne[1] - prop.proportions_acne[0])
hypothesized_estimate = 0
test_stat = (best_estimate-hypothesized_estimate) / standard_error
# Calculate the  p-value
pvalue = 2*dist.norm.cdf(-np.abs(test_stat)) # Multiplied by two indicates a two tailed testing.
print("Computed P-value is", pvalue)

Вы должны получить высокое значение p. Мой пример — 0,6 — явно отвергает гипотезу о том, что любое потребление драже коррелирует с акне.

…но потом! Переберите все ваши цвета и посмотрите, найдете ли вы какие-либо «статистически значимые отношения»…

results = []
for colorI in colors:
    #colorI = 3
    contingency_table_acneI = pd.crosstab(data['color']==colorI,data['acne'])
    contingency_table_acneI
n_not_colorI = contingency_table_acneI.agg('sum',axis='columns')[False]
    n_colorI = contingency_table_acneI.agg('sum',axis='columns')[True]
#This table helps us to calculate the SE.
    propC = data.groupby("color")["acne"].agg([lambda z: np.mean(z==1), "size"])
    propC.columns = ['proportions_acne','total_counts']
#Calculating standard error
# This is straightforward for a binomial variable
variance = total_proportion_acne * (1 - total_proportion_acne)
standard_error = np.sqrt(variance * 
                             (1 / n_colorI + 1 / n_not_colorI))
# Calculate the test statistic 
    # First, get the data estimate of the proportion in question
    prop_acne_colorI = propC.loc[colorI]["proportions_acne"]
    prop_acne_others = contingency_table_acneI.loc[False][1] / n_not_colorI
    # Then calculate the test stat
    best_estimate = prop_acne_colorI - prop_acne_others#(prop.proportions_acne[1] - prop.proportions_acne[0])
    hypothesized_estimate = 0 # Assumes there's no difference in proportion between the groups. Eg they're both 50%
    test_stat = (best_estimate-hypothesized_estimate) / standard_error
# Calculate the  p-value
    pvalue = 2*dist.norm.cdf(-np.abs(test_stat)) # Multiplied by two for a two tailed test.
    print("Computed P-value is", pvalue)
    results.append([colorI,pvalue])
print(results)

Мне «повезло». Мой самый первый цвет, 0 в коде, давайте назовем его зеленым в честь xkcd, имел p-значение 0,023, а цвет 13 имел 0,015 — оба удобно под планкой «статистической значимости» и оба совершенно случайны. Еще 4 цвета находились в диапазоне 0,1–0,2, который иногда используется в коммерческих анализах, например, страховыми компаниями, как предполагаемый эффект. Как это часто бывает, xkcd был прав.