Bitcoin Forum
June 23, 2024, 11:09:20 PM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: « 1 2 3 4 5 6 7 [8]  All
  Print  
Author Topic: ANN [HLTH] SimplyVital Health - Качественное медицинское обслужив  (Read 2697 times)
mikhailr
Sr. Member
****
Offline Offline

Activity: 812
Merit: 443


★777Coin.com★ Fun BTC Casino!


View Profile
March 02, 2020, 03:20:06 PM
Last edit: March 03, 2020, 08:21:41 AM by mikhailr
Merited by xandry (9), Symmetrick (1)
 #141

Машинное обучение в Apache Spark для начинающих - Анализ данных здравоохранения - Диабет


Вступление:
Apache Spark-это кластерная вычислительная платформа, предназначенная для быстрых и эффективных вычислений. Он может обрабатывать миллионы точек данных с относительно низкой вычислительной мощностью. Apache Spark построен поверх и является расширением Hadoop Map-Reduce, который эффективно использует различные комбинации кластерных вычислений. Основная особенность Spark-это кластерные вычисления в памяти, что повышает скорость работы приложений, включая интерактивные запросы и потоковую обработку.
Эта статья представляет собой краткое руководство по разработке модели прогнозирования в Spark с использованием Databricks.
Я буду использовать бесплатную версию от сообщества Databricks, спасибо им!


О данных / справочная информация:
В этом посте я буду использовать машинное обучение, чтобы помочь нам предсказать вероятность диабета у пациента. Набор данных загружается из хранилища машинного обучения UCI.
Здесь я прогнозирую вероятность диабета, используя предоставленную информацию о пациенте. Это проблема бинарной классификации, где я попытаюсь предсказать вероятность наблюдения, относящегося к категории диабета.
Сначала я продемонстрирую минимальный объем исследовательского анализа, а затем перейду к моделям машинного обучения (т. е. к регрессионным и древовидным моделям), сравню и обобщу результаты.
Предварительная обработка и исследование данных:
Следующие строки кода загружают данные и создают объект dataframe. Если для Inferschema задано значение true, это может дать правильное представление о типе данных каждого столбца.


Я также создал словарь для хранения функций относительно их типов данных. В нашем случае у нас есть «Integer Type» и «Double Type».




Давайте посмотрим на первые 5 строк нашего набора данных.



Набор данных диабета состоит из 768 точек данных с 9 функциями в каждом:



«Outcome» - это функция, которую мы собираемся предсказать, где 0 означает, что у пациента нет диабета, а 1 означает, что у пациента есть диабет. Из этих 768 точек данных 500 помечены как 0, а 268 как 1.



Одним из преимуществ использования Databricks является то, что они помогают визуализировать запрос в некоторые основные параметры графика, чтобы обеспечить лучшее понимание данных вместе с кодом.
У нас есть полный набор данных без каких-либо пропущенных значений, но чтобы найти дополнительную информацию о работе с пропущенными данными, вы можете обратиться к этой статье: https://www.analyticsvidhya.com/blog/tag/missing-values-treatment/

Обработка категориальных данных:
В наших данных у нас есть только один категориальный столбец, то есть «Pregnancies» с более чем 17 категориями. В следующем коде показано, как можно преобразовать категориальные столбцы / функции в одноразовое кодирование. В Spark используется «String Indexer», который присваивает уникальное целочисленное значение каждой категории. 0 назначается самой частой категории, 1 - следующей наиболее частой категории и т. д.



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

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



Применение модели:
У нас есть пара встроенных классификаторов, в том числе Random Forest, Boosting Trees, logistic regression и т. д. Для начала я реализую Random Forest в качестве примера, определяя количество Trees в классификаторе и оставляя оставшиеся параметры на их значение по умолчанию.
Чтобы оценить производительность нашей модели, я использую метрику кривой ROC. Вы можете выбрать «metricName» на ваш выбор.
Точность этой модели составляет 82,5%. Это указывает на то, что наша модель работает достаточно хорошо с параметрами по умолчанию.



Выбор функций:
Процесс выбора функции помогает отфильтровать менее важные переменные, которые могут привести к более простой и стабильной модели. В Spark реализация выбора функций не так проста, как, например, в Python, scikit-learn, но этим можно управлять, сделав выбор функций частью конвейера. Идея заключается в следующем:
1.   Сначала установите классификатор. Например, вы можете использовать регрессионные или древовидные модели, любые модели на ваш выбор.
2.   Найдите значение функции, если вы используете random forest, найдите коэффициент, если вы используете logistic regression.
3.   Храните самый важный набор функций в списке.
4.   Используйте метод VectorSlicer из библиотеки ml и создайте новый вектор из списка, который вы только что выбрали.
Следующий код показывает, как создать список важных функций из модели, которую мы ранее использовали. Сохраняются характеристики больше 0,03, rf_model - модель подобранного random forest.



Выбор 0.03 является случайным, можно попробовать разные значения на основе метрики AUC. Позже я использовал vector slicer, чтобы собрать все объекты, значение которых превышает 0,03.



При выборе функции мы увидели улучшение точности на 1% при общей точности 83%. Из полного набора функций мы получили точность 82%. При работе с большими данными даже улучшение на 1% имеет значение.

В конце концов, я просто хочу закончить, сказав, что Apache Spark является лаконичным и простым в использовании фреймворком с открытым исходным кодом.

Команда SimplyVital Health надеется, что вам понравился урок по машинному обучению в Apache Spark! Это то, с чем мы сталкиваемся каждый день и пытаемся вернуть сообществу эти уроки! Чтобы узнать больше о SimplyVital Health, подпишитесь на нас в Facebook , Twitter и просмотрите наши вакансии в AngelList.

Перевод.
Оригинал: https://medium.com/simplyvital/machine-learning-in-apache-spark-for-beginners-healthcare-data-analysis-diabetes-276156b97e92

KTChampions
Legendary
*
Online Online

Activity: 2366
Merit: 1907


Leading Crypto Sports Betting & Casino Platform


View Profile
March 03, 2020, 12:53:06 PM
Merited by Symmetrick (1)
 #142

Работа с данными по заявкам в сфере здавоохранения в Python

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



Введение в данные по заявкам в сфере здравоохранения

Вы быстро заметите, что большая часть этой статьи является текстом, и в ней только несколько примеров кода.

Отраслевые знания - это то, что отличает простой набор данных от глубокой и практичной аналитики.

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

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

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

Структура данных по заявкам

Ресурсы ResDAC также могут помочь вам понять, как структурированы данные заявок. Для многих плательщиков разные виды услуг выставляются в разных форматах и хранятся в разных файлах. Если пациент проходит лечение в больнице, счета, которые больница отправляет страховщику за пребывание в больнице, могут быть в отдельном файле от счетов, которые врач отправляет страховщику за лечение пациента, хотя всё происходит в той же больнице. Несмотря на то, что пациент воспринимает госпитализацию как одно «событие», каждый участвующий субъект отдельно выставляет свой собственный счет страховой компании. Вначале это сбивает с толку большинство людей, но это имеет смысл, если вы понимаете, что такое медицинская страховка. Если разные услуги для одного и того же пациента разделены по файлам, вам, конечно же, необходимо найти уникальный идентификатор пациента, который позволит вам связать их вместе.

Чтение в данных заявок

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

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



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

Как и при любом анализе данных, очистка данных имеет решающее значение для получения хороших результатов и занимает около 80% работы. При написании статьи предполагалось, что вы уже знаете основы очистки данных в Python.

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



Несколько различных систем кодирования используются в США для документирования процедур и диагностики, связанными с медицинскими услугами. Введение в различные наборы кодов можно найти на этом правительственном веб-сайте. При рассмотрении сырой (необработанной) заявки по медицинскому обслуживанию, поля процедур и диагностики будут представлять собой буквенно-цифровые коды - например, вы можете увидеть диагноз: J03.01. Чтобы понять диагноз, может быть полезно добавить справочные файлы, которые сопоставляют простые коды с описаниями того, что означают коды, - либо путем объединения описаний, либо путем создания справочной таблицы для соответствующей базы данных. Некоторые ресурсы имеют API, поскольку определения кода могут изменяться и изменяются со временем. В качестве предупреждения: всегда тратьте время на форматирование типов данных и проверяйте их на наличие проблем стартовой нумерации. Например, одна система кодирования процедур здравоохранения всегда состоит из 5 буквенно-цифровых значений, но может начинаться со стартового 0 - это может легко вызвать проблемы в вашем анализе.



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


Более подробную информацию смотрите https://docs.python.org/3/library/sqlite3.html

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

Этот пример показывает лишь несколько типов госпитализации. Более подробную информацию смотрите https://www.resdac.org/sites/resdac.umn.edu/files/Provider%20Number%20Table.txt

Обобщение данных

Если данные заявок распределены по нескольким файлам, может быть полезно объединить их в хронологическом порядке, чтобы понять всю историю болезни и лечения каждого пациента. Этот тип формата обычно называют «виньеткой», и он может быть неоценимым для клинического анализа данных. Создание виньетки требует глубокого понимания данных в каждом файле. Как правило, я сначала обрабатываю файлы в похожую структуру, затем складываю их и упорядочиваю.



Итог

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

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

Оригинал: https://medium.com/simplyvital/working-with-healthcare-claims-data-in-python-36ef70a9a762
Автор: Camille Chicklis
Перевод: KTChampions

Буду благодарен за помощь в исправлении ошибок и неточностей.

..Stake.com..   ▄████████████████████████████████████▄
   ██ ▄▄▄▄▄▄▄▄▄▄            ▄▄▄▄▄▄▄▄▄▄ ██  ▄████▄
   ██ ▀▀▀▀▀▀▀▀▀▀ ██████████ ▀▀▀▀▀▀▀▀▀▀ ██  ██████
   ██ ██████████ ██      ██ ██████████ ██   ▀██▀
   ██ ██      ██ ██████  ██ ██      ██ ██    ██
   ██ ██████  ██ █████  ███ ██████  ██ ████▄ ██
   ██ █████  ███ ████  ████ █████  ███ ████████
   ██ ████  ████ ██████████ ████  ████ ████▀
   ██ ██████████ ▄▄▄▄▄▄▄▄▄▄ ██████████ ██
   ██            ▀▀▀▀▀▀▀▀▀▀            ██ 
   ▀█████████▀ ▄████████████▄ ▀█████████▀
  ▄▄▄▄▄▄▄▄▄▄▄▄███  ██  ██  ███▄▄▄▄▄▄▄▄▄▄▄▄
 ██████████████████████████████████████████
▄▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▄
█  ▄▀▄             █▀▀█▀▄▄
█  █▀█             █  ▐  ▐▌
█       ▄██▄       █  ▌  █
█     ▄██████▄     █  ▌ ▐▌
█    ██████████    █ ▐  █
█   ▐██████████▌   █ ▐ ▐▌
█    ▀▀██████▀▀    █ ▌ █
█     ▄▄▄██▄▄▄     █ ▌▐▌
█                  █▐ █
█                  █▐▐▌
█                  █▐█
▀▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▀█
▄▄█████████▄▄
▄██▀▀▀▀█████▀▀▀▀██▄
▄█▀       ▐█▌       ▀█▄
██         ▐█▌         ██
████▄     ▄█████▄     ▄████
████████▄███████████▄████████
███▀    █████████████    ▀███
██       ███████████       ██
▀█▄       █████████       ▄█▀
▀█▄    ▄██▀▀▀▀▀▀▀██▄  ▄▄▄█▀
▀███████         ███████▀
▀█████▄       ▄█████▀
▀▀▀███▄▄▄███▀▀▀
..PLAY NOW..
Pages: « 1 2 3 4 5 6 7 [8]  All
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!