Krittika Krishnan была Insight Fellow летом 2018 года, а сейчас работает специалистом по анализу данных в CVS. До Insight она получила докторскую степень в области поведенческой нейробиологии в Техасском университете в Остине, где изучала влияние химических веществ, нарушающих эндокринную систему (обнаруженных в большинстве пластмасс и косметики), и того, как их эффекты передаются от одного поколения к другому.

Заинтересованы в переходе к карьере в области науки о данных в области здравоохранения? Узнайте больше о Программе стипендиатов Insight Health Data Science Fellows Program в Бостоне и Кремниевой долине, подайте заявку сегодня или зарегистрируйтесь обновления программы.

Вы или кто-то из ваших знакомых часами беспокоился о том, какой из противозачаточных средств лучше всего подойдет вам, и задавался вопросом, каковы их побочные эффекты? Вы пролистывали бесчисленные интернет-форумы, пытаясь понять, что другие женщины испытывают при использовании своих противозачаточных средств? Я сама испытала это, поэтому в течение первых 4 недель программы Insight Data Science я решила создать инструмент, который мог бы помочь женщинам принимать эти осознанные решения! Я так многому научился у своих товарищей по программе Boston Insight Fellows и программных директоров, и без них не смог бы создать это приложение!

Мое веб-приложение было создано для трех вещей:

  1. Предложите женщинам противозачаточные средства на основе того, что используют другие женщины, похожие на них.
  2. Проанализируйте, как другие женщины относятся к побочным эффектам, связанным с каждым противозачаточным средством и
  3. Показать наиболее обсуждаемые (популярные) темы, связанные с этим противозачаточным средством

Давайте разберем, что входило в эти три части.

Шаг 1. Предложите противозачаточное средство

Моя цель состояла в том, чтобы предложить женщинам противозачаточные средства на основе того, что используют другие женщины, подобные им. Для этого я использовал данные Национального исследования роста семьи за несколько лет. Опрос проводился партиями, каждая из которых охватывала данные, собранные за 3–4 года (с 2006 по 2015 гг.). Это национальное обследование содержит информацию, полученную от женщин, в том числе информацию об их демографических характеристиках и средствах контрацепции, которые они использовали в то время. После того, как я объединил данные из каждого опроса в один фрейм данных в пандах, я предпринял несколько шагов, чтобы очистить его.

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

  1. Изменены названия противозачаточных средств, чтобы они соответствовали разным партиям коллекции. Например, «Имплант» и «Нэкспланон и Импланон» были просто изменены на «Имплант».
  2. Удаление строк с НА в различных полях

После чистки у меня остались данные от ~ 12000 женщин.

Исследовательский анализ данных:

Я решил начать с некоторого исследовательского анализа данных (EDA). Ниже приведены графики количества пользователей каждого типа противозачаточных средств и гистограммы каждого типа контрацепции по возрастным группам.

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

Функции:

Некоторые из характеристик включали возраст, этническую принадлежность, семейное положение, количество партнеров и т. Д. Я долго и усердно думал об инструменте, который я хотел создать, и знал, что я не смогу порекомендовать противозачаточное средство, если женщина, использующая мой инструмент. вводит всю необходимую информацию, и запрос количества половых партнеров будет слишком агрессивным. По этой причине я решил включить в свою модель только три функции: возраст, этническая принадлежность * и семейное положение. Поскольку было несколько типов семейного положения («отдельно», «женат», «проживают вместе», «вдовец» и т. Д.), Я сгруппировал их по трем уровням, которые охватывают все эти типы отношений - холост, замужем или проживают вместе. Отношение. Кроме того, этничность была мгновенно закодирована с использованием предварительной обработки sklearn.

Мы готовы к моделированию!

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

Моделирование:

Изначально я пытался создать модель, которая предсказывала бы наиболее вероятный контрацептив для женщины, независимо от типа. Затем, получив ценные отзывы от моего технического консультанта Insight, я разделил противозачаточные средства на две подгруппы - полупостоянные и непостоянные - и создал по две модели для каждой подгруппы. В каждой подгруппе было четыре противозачаточных средства в качестве прогностических классов, и данные были случайным образом разделены на 80% обучающий и 20% тестовый набор с использованием выбора модели sklearn.

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

Для обеих подгрупп модель GNB имела немного более высокую точность, чем случайная (0,60), которая в этом случае будет предсказывать класс большинства каждый раз (0,57). Однако модель GNB предполагает полную независимость между характеристиками - здесь мы знаем, что возраст и семейное положение наверняка будут коррелированы. Чтобы принять во внимание корреляцию функций, следующей моделью, которую я использовал, был случайный лес (RF), который работал немного лучше, чем GNB (0,65). Я решил реализовать RF в продукте, так как он будет легко масштабироваться по мере добавления дополнительных функций. Ниже вы увидите пример матрицы неточностей для полупостоянной группы.

Понятно, что классы несбалансированы. Чтобы попытаться смягчить эту проблему, я использовал передискретизацию синтетического меньшинства (SMOTE из imblearn API с несбалансированным обучением; изображение ниже), чтобы сгенерировать некоторые точки данных в классах меньшинства, чтобы помочь лучше обучить модель. SMOTE работает, генерируя данные на основе k-соседей в классе меньшинства. Я подумал о недостаточной выборке для большинства классов, но понял, что с моим и без того ограниченным набором данных я буду тренировать свою модель на еще меньшем количестве данных. Как и ожидалось, точность набора тестов упала без улучшения запоминания.

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

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

Движение вперед:

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

Шаг 2. Анализ побочных эффектов противозачаточных средств

Чтобы понять, что женщины думают о различных типах противозачаточных средств, я скопировал сообщения r / BirthControl за два года с помощью API Reddit pushshift.io. Это привело к ~ 21000 сообщений. Начиная с основной части каждого сообщения, я использовал различные инструменты, чтобы очистить текст.

Очистка текста:

  1. Удалите стоп-слова. Чтобы гарантировать, что мнение о противозачаточных средствах остается точным, я сохранил «отрицательные» слова, которые есть в наборе английских стоп-слов из корпуса Natural Language Toolkit (NLTK).
  2. Стандартизированный текст путем удаления URL-адресов и других ненужных символов, но с сохранением знаков препинания.

3. Токенизированные (разделенные) предложения друг от друга с использованием sent_tokenize из NLTK.

4. Слова на основе стеблей, чтобы удалить их суффиксы, чтобы одни и те же слова не учитывались несколько раз (т. Е. Пилюля превращается в пилюлю).

После того, как я разделил все предложения, я специально хотел посмотреть на предложения, в которых упоминаются восемь форм контроля над рождаемостью, используемых в модели прогнозирования, приведенной выше. Я извлек предложения, в которых только упоминаются вышеупомянутые противозачаточные средства, и разбил их на соответствующие фреймы данных pandas (т.е. все предложения, в которых упоминается «таблетка», попадают в фрейм данных «таблетка»). Чтобы анализ настроений был как можно более точным, я извлек только предложения, в которых упоминалось интересующее меня противозачаточное средство. Таким образом, предложение, в котором упоминается таблетка и ВМС, не будет учитываться во фрейме данных для таблетки ИЛИ ВМС. Хотя это уменьшает объем данных, с которыми мне приходится работать, он сохраняет анализ тональности каждого предложения как можно точнее.

Извлечение упоминаний о побочных эффектах:

Я составила список потенциальных побочных эффектов на основе перечисленных на сайте FDA и других, о которых мне говорили женщины. Используя этот список, я создал новый фрейм данных pandas с каждым предложением и независимо от того, упоминается ли в нем конкретный побочный эффект (1 или 0). Вы можете думать об этом как об индивидуальной модели «мешка слов», подсчитывающей, сколько раз побочный эффект упоминался в конкретном предложении о противозачаточных средствах.

Анализ настроений:

Я применил NLTK Sentiment Intensity Analyzer (SIA) из пакета VADER (Valence Aware Dictionary и sEntiment Reasoner) к каждому предложению. Этот анализатор настроений был предварительно обучен на данных социальных сетей и использует подход, основанный на лексике, чтобы учитывать не только тип настроения (отрицательное или положительное), но и интенсивность выраженного настроения с помощью показателя полярности. . Есть отличная статья о том, как было создано это SIA и как оно работает здесь.

Вот пример кода и результирующего набора данных.

Я мог:

  1. Рассчитайте частоту упоминаний о побочных эффектах относительно всех предложений, в которых упоминается конкретное средство контрацепции.
  2. Умножьте «показатель полярности» на конкретный побочный эффект, упомянутый в предложении, для каждого противозачаточного средства.

Это привело к моему окончательному фрейму данных, как показано ниже:

Исходя из этого, я смог создать вторую часть моего приложения, используя Plotly в Dash.

Проверка VADER

Один из директоров программы Insight дал мне ценный отзыв о том, что мой анализатор настроений был бы бесполезен без проверки. Он посоветовал мне попросить других исследователей взглянуть на те же предложения и оценить их как положительные, отрицательные или нейтральные. Для этого я сначала сгруппировал оценки полярности VADER в три подмножества:

  1. Оценка полярности ›0,1 = 1 (положительный результат)
  2. Оценка полярности ‹0,1 = -1 (отрицательная)
  3. Оценка полярности от -0,1 до 0,1 = 0 (нейтральный)

Основываясь на ~ 200 предложениях, оцененных обоими коллегами по VADER Insight, я смог разработать матрицу путаницы, представленную ниже:

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

Движение вперед:

Я могу придумать несколько способов улучшить этот раздел продукта:

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

Шаг 3. Предоставление соответствующих рекомендуемых сообщений

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

Как работает тематическое моделирование?

Тематическое моделирование - это статистический метод, используемый для обнаружения абстрактных тем, лежащих в основе корпусов текста. В этом случае конкретные методы моделирования тем могут использовать распределение слов в сообщении Reddit и во всех сообщениях Reddit для создания тем и соотнесения конкретного сообщения Reddit с определенной темой. Есть несколько отличных статей, описывающих техники тематического моделирования (здесь, здесь и здесь), но я кратко опишу ту, которую выбрал - Latent Dirichlet Allocation (LDA).

LDA - это вероятностная модель, что по сути означает, что она дает распределение вероятностей для события. И наоборот, детерминированная модель дает единственный результат для события. В случае тематического моделирования LDA состоит из двух матриц (показанных ниже) - вероятности выбора слова в теме и вероятности выбора темы в сообщении Reddit. Он использует частоту появления слова в сообщениях и между ними для создания тем.

Например, у меня есть три очень упрощенных сообщения:

  1. «Бананы для собак и кошек»
  2. «Бананы бананы бананы»
  3. «Кот, кот, кот»

LDA отметит вероятность появления слов внутри и между тремя сообщениями и создаст темы на основе этих распределений. Здесь Тема 1 может быть «собаками», Тема 2 может быть «кошкой», а Тема 3 может быть «бананами». Затем LDA назначит сообщение 1 как имеющее равную вероятность прихода из темы 1, 2 или 3, в то время как два других сообщения почти наверняка происходят из темы 2 или темы 3 соответственно.

Реализация LDA с помощью сообщений Reddit

Для этой части веб-приложения мне нужно было понять, какая тема для обсуждения каждого из противозачаточных средств наиболее популярна среди женщин. Кроме того, мне нужно было отображать сообщения, наиболее актуальные по данной теме. Использование LDA помогло мне выделить самую популярную тему для каждого противозачаточного средства и 3 главных сообщения, связанных с этой темой. Шаги ниже.

  1. Создайте модель мешка слов с помощью sklearn CountVectorizer

2. Определите количество тем (поскольку LDA не может сделать это автоматически) и запустите алгоритм из sklearn.decomposition.

3. Отображение результирующих тем с указанием количества постов.

Это позволило мне отображать соответствующие сообщения из Reddit в моем приложении:

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

Недостатки тематического моделирования:

К сожалению, у использования тематического моделирования есть несколько недостатков. Во-первых, вы должны указать k количество тем. Как я выбрал количество тем 10? Честно говоря, я пробовал разные номера тем, и в результате были получены 10 тем, которые не были ни слишком широкими, ни слишком конкретными. Во-вторых, вы должны пометить темы. Примером самой популярной темы, которую я извлек из сообщений, связанных с ВМС, было «только периодические судороги в днях». Это имеет очень мало смыслового смысла, но мы можем сказать, что это связано с временными рамками периодов и побочным эффектом спазма. Ярлыки помогут нам проверить, правильно ли наше тематическое моделирование построило темы и сгруппировало сообщения в эти темы.

Движение вперед:

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

Резюме

Короче говоря, я надеялся (через 4 недели) создать приложение, которое не только предлагало бы женщинам противозачаточные средства, но и анализировало бы мнения других женщин по поводу их побочных эффектов и предоставляло бы им соответствующую информацию о том, что говорят другие женщины. Вы можете ознакомиться со всем веб-приложением здесь. Мне очень нравится использовать науку о данных и машинное обучение для создания такого масштабного инструмента, который, надеюсь, может помочь женщинам принимать важные решения. Я многому научился, создавая это веб-приложение, и это было бы невозможно без помощи замечательных бостонских стипендиатов и директоров программ Insight !!

Не стесняйтесь комментировать, если у вас есть какие-либо вопросы или предложения - я хотел бы услышать ваши отзывы!

Заинтересованы в переходе к карьере в области науки о данных в области здравоохранения? Узнайте больше о Программе стипендиатов Insight Health Data Science Fellows Program в Бостоне и Кремниевой долине, подайте заявку сегодня или зарегистрируйтесь обновления программы.