Применение линейной регрессии к данным Medicare

В качестве студентов учебного курса Metis Data Science Bootcamp нам было поручено построить модель линейной регрессии для нашего первого индивидуального проекта. Достаточно просто, правда? Просто проведите линию через данные.

Не так быстро!

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

Но зачем заботиться о Medicare? Medicare - это финансируемая государством программа медицинского страхования, охватывающая в настоящее время 44 миллиона человек, или каждого восьмого человека в США (1). Это влечет за собой огромные финансовые и медицинские последствия для правительства. Как только вам исполнится 65 лет, вы получите право на его получение, за некоторыми исключениями, например, молодые люди с ограниченными возможностями или люди, страдающие терминальной стадией почечной недостаточности. И это население только увеличивается. Фактически, по оценкам Бюро переписи населения, к 2030 году только пожилое население увеличится почти вдвое до 78 миллионов человек, или каждого пятого американца (2).

Вдобавок к этому, вполне вероятно, что в ближайшие годы Medicare будет приобретать все большее значение из-за того, что она широко используется в политических дискуссиях по всей стране. Если бы Соединенные Штаты приняли систему единого плательщика, такую ​​как предлагаемая Medicare-for-All, для нас было бы существенно снизить расходы везде, где это возможно, и эффективное использование данных могло бы помочь в достижении этого.

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

После поиска на веб-сайте Центра услуг Medicare и Medicaid я смог получить самые последние данные об оплате поставщикам услуг, которые содержат более 1 миллиона строк, каждая из которых соответствует организации здравоохранения или отдельному поставщику услуг, и 70 функциям.

Очистка данных

Но, как и ожидалось, эти данные оказались беспорядочными. Поэтому, чтобы получить наиболее надежную информацию, я решил сузить то, что я измерял, до отдельных поставщиков в США, исключая территории и военные зоны.

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

Также была предоставлена ​​некоторая документация для значения каждого имени столбца. Я решил, что целевой переменной должно быть total_medicare_payment_amt, то есть общая сумма, уплаченная государством за все услуги поставщика на одного пациента после вычета суммы франшизы и сострахования. Кроме того, я удалил все столбцы, которые были либо ненужными (например, имена поставщиков), либо которые могли привести к возможной утечке данных (например, другие столбцы, основанные на ценах).

В итоге у меня осталось чуть более 990 000 чистых строк с 38 функциями. Давай начнем!

Исходная модель

Используя библиотеку Python Statsmodels, я просто бросил все свои данные в обычную линейную регрессию методом наименьших квадратов (OLS), чтобы посмотреть, как она будет работать изначально без каких-либо изменений.

Как упоминалось ранее, линейная регрессия пытается найти линейную связь между независимыми переменными и зависимой переменной. Выше вы можете увидеть простейшую одномерную форму только с одной независимой переменной или функцией. Он использует уравнение y = mx + b, чтобы найти наилучшее соответствие данным; m - коэффициент наклона, b - точка пересечения по оси y.

Но очевидно, что с 38 функциями эта проблема линейной регрессии намного сложнее. В этом случае будет добавлено 38 терминов «mx», причем каждый член m соответствует размеру и направлению воздействия, которое конкретная переменная оказывает на зависимую переменную. Говоря геометрическими терминами, мы подгоним 38-мерную гиперплоскость к 39-мерному пространству (вместо линии). Если вы найдете способ визуализировать это, дайте мне знать!

Хорошо, теперь у нас есть некоторая интуиция для модели, но как определить, насколько хорошо модель работает?

Метрика, которая здесь обычно используется, называется коэффициентом детерминации или R-квадрат. По сути, это процент отклонения целевой переменной, предсказываемый функциями. Нам нужно, чтобы R-квадрат был близок к 1, что указывает на то, что модель очень предсказуема.

Но давайте немного углубимся в настоящую формулу R-квадрата, потому что она помогает нам понять, как мы оцениваем модель. Самый наивный метод, который мы могли бы использовать для прогнозирования затрат на Medicare, - это просто угадать среднюю стоимость. Это зеленая (называемая y-полосой) на диаграмме выше. Это будет нашей базой.

Но мы можем добиться большего, используя линейную регрессию или красную (так называемую y-шляпу). Теперь мы просто выясняем, насколько эти два прогноза отличаются от фактического значения, и делим их друг на друга (SSE / SST). Это покажет нам процент отклонения, который модель не может объяснить. Но на самом деле мы хотим знать, какой процент отклонения объясняет эта модель. Вычитание этого значения из 1 приведет нас к этому.

1 - (Error Sum of Squares/Total Sum of Squares) or 1 - (SSE/SST)

И после запуска начальной модели R-квадрат составил 0,619. Это означает, что наша модель учитывает только около 62% разброса данных. Это не очень хорошо.

Проверка наших предположений

Но ждать! Линейная регрессия имеет много предположений, и важно проверить, действительно ли наши данные работают для этой модели.

Предположение №1: Есть ли линейная связь между целевой переменной и функциями?

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

Ух ты! Это резкое улучшение. Любой может провести через это черту! Как видите, часто бывает необходимо преобразовать данные определенным образом, чтобы они соответствовали допущениям модели, которую мы используем.

Примечание. Всегда не забывайте после этого отменять это преобразование, чтобы вернуть ваше значение обратно в исходный контекст. В конце концов, что вообще означает логарифм стоимости Medicare?

Допущение №2. Нормально ли распределены цель и функции?

На приведенном выше рисунке левый график показывает целевую переменную до использования логарифмического преобразования; как видите, он ужасно перекошен вправо. Правый график, с другой стороны, показывает, как применение этого преобразования приводит к удивительно нормальному распределению.

Допущение №3. Есть ли мультиколлинеарность между функциями или почти нет?

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

Но на самом деле мы видим, как повсюду появляются более темные цвета, что указывает на то, что мы нарушаем это предположение. Это может привести к неточным коэффициентам регрессии или, что еще хуже, к изменению знака для одних и тех же признаков в разных выборках, что затрудняет надежное извлечение значения из этих коэффициентов.

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

Предположение №4: коррелируют ли остатки сами с собой?

Автокорреляция возникает, когда остатки для определенного признака не независимы друг от друга. Это считается плохим, потому что это указывает на то, что модель не извлекает всю возможную информацию из данных, и, таким образом, мы видим это в остатках.

Это можно измерить с помощью теста Дарбина-Ватсона. Значения около 2 указывают на отсутствие автокорреляции, а значения около 0 или 4 указывают на сильную автокорреляцию. Наша исходная модель имеет значение 1,998, что указывает на то, что модель извлекает как можно больше информации и предположение было выполнено.

Предположение № 5. Являются ли данные гомоскедастичными?

Здесь мы хотим избежать гетероскедастичности, громкого слова с простым объяснением. Это когда дисперсия остатков изменяется в диапазоне значений в элементе.

Как вы можете видеть в этом гипотетическом примере, очень ясно, что разница увеличивается с возрастом. Это нехорошо, так как означает, что наша модель будет хуже делать прогнозы, чем старше кто-то станет. На самом деле нам нужна постоянная предсказуемость и дисперсия по всему диапазону ценностей, известная как гомоскедастичность. Другими словами, две пунктирные красные линии будут параллельны друг другу.

Здесь мы видим прогнозируемые значения в сравнении с остатками для нашей модели по данным Medicare. Это совсем не выглядит хорошо. Существует резкое отсечение отрицательных остатков (из-за того, что государственные расходы всегда больше или равны 0), а дисперсия совершенно непоследовательна во всем диапазоне значений.

Но после применения логарифмического преобразования, которое мы делали раньше, график теперь выглядит относительно гомоскедастичным, и мы выполнили это предположение. Бум!

Вторичное моделирование

Поэтому, проверив предположения для всех функций, я решил применить преобразование журнала к 3 функциям и целевой переменной.

Теперь я поместил эти недавно преобразованные данные обратно в модель, и после обучения она произвела R-квадрат 0,92. Фантастика! Это надежный результат, поскольку новая модель может объяснить на 30% больше дисперсии данных по сравнению с базовой моделью. Это демонстрирует, насколько важно преобразовать ваши данные в соответствии с предположениями выбранной вами модели.

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

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

Я экспериментировал как с регрессией гребня, так и с LASSO и выполнил настройку гиперпараметров альфа-членов, которые определяют, насколько сильной будет регуляризация. Удивительно, но обе модели с оптимизированными альфа-каналами показали в основном те же результаты, что и модель OLS с R-квадратом 0,92, с незначительно лучше, чем LASSO. Это указывает на то, что регуляризация существенно не помогла модели.

Коэффициенты LASSO также подтверждают этот вывод. LASSO обычно обнуляет все избыточные функции, оставляя лишь некоторые из них. Напротив, лучшая модель LASSO обнулила только 1 из 38 функций. Это удивительный результат, указывающий на то, что большинство функций способствуют предсказуемости модели, и поэтому более сильная регуляризация только повредит ее производительности.

Важность функции

Говоря о коэффициентах, мы можем определить важность каждой характеристики, посмотрев на знак и величину коэффициентов. Это позволяет нам предоставлять ценную информацию о бизнесе нашим заинтересованным сторонам, в данном случае Центру услуг Medicare и Medicaid.

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

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

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

Если посмотреть на самые дорогие специальности, хирургия явно выделяется. И это имеет смысл; операция невероятно дорогая. Это означает, что правительство лучше всего направит свои усилия на сокращение затрат на операции, чтобы наиболее существенно повлиять на их чистую прибыль.

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

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

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

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