Недавно закончился конкурс CardioQVARK по разработке алгоритма определения курящего человека по его кардиограмме, в котором автор принимал участие. Публикую весь код и полный отчёт по решённой задаче.
Задача
Организаторами была поставлена классическая задача бинарной классификации сигналов, но с маленькими обучающей (100 кардиограмм, из которых 50 соответствуют кардиограммам курильщиков) и контрольной (250 неразмеченных кардиограмм) выборками. Но самое нестандартное, что было в задаче — критерий качества. Все участники упорядочивались по чувствительности решения — определялось место каждого участника по чувствительности. Аналогично определялось место по специфичности. Сумма мест по чувствительности и специфичности – итоговая оценка решения (чем меньше – тем лучше). На втором этапе оценивались отчёты первых 10 (по сумме мест) участников. Но, как показали результаты соревнования, итоговые места в точности совпадают с местами первого этапа (т.е. особо стараться с отчётом не надо было 😉 ).
Мотивация
Автор, после своего долгого несоревновательного периода, занялся этой задачей, поскольку недавно имел небольшой опыт работы с фотоплетизмограммами, которые тоже (пусть и очень опосредованно) отражают работу сердца — сейчас как раз пишет статью на эту тему. А тут такая дополнительная мотивация поработать ещё и с кардиорграммами. Если добавить сюда прошлые хорошие работы с электрокортикограммами и (правда, чуть менее хорошие) с ЭЭГ, то получается неплохой послужной список в области обработки и анализа сигналов…
Выводы
Из того что не вошло в отчёт:
- Все фильтры разные. Раньше как-то не особо придавал этому значению. Есть у меня несколько любимых способов фильтрации и обработки сигналов. Но, оказывается, я раньше работал с очень хорошими сигналами. Если сигнал плохой (шумный, с артефактами), то с ним приходится повозиться. И от способа фильтрации много зависит.
- Значения некоторых функционалов качества сверхинформативны. По чувствительности и специфичности решения можно вычислить confusion matrix, а значит, и все другие показатели качества (например, F-меру). Как это сделать — об этом надо будет рассказать в отдельном посте.
- Хочешь решить задачу — решай сам. Эту задачу я дал и магистрам нашей кафедры как очередное задание. Магистры были, правда, двоечники (шли на пересдачу), но всё-таки в ШАДе учатся, бакалавриат у нас заканчивали, и шанс вылететь должен подстёгивать… В итоге, они болтаются внизу турнирной таблицы, не переплюнув даже среднее случайное решение. Примерно такой уровень у большинства выпускников современных учебных программ по АД (см. отчёт)…
Материалы
Код, правда, не получится просто так взять и запустить — часть сделана в Матлабе и только алгоритм классификации на Питоне. Чтобы разобраться с кодом — читайте отчёт.
Поздравляю с победой — Белавина Владислава и с третьим местом — Исакова Романа! Всем удачи в дальнейшем.
Отличный отчёт, у всех бы так.
А почему у выпускников плохие результаты? С нагрузкой не справляются или не до конца понимают куда идут? 🙂
У все это вряд ли…
Ой, это масштабный вопрос. На мой взгляд, умение решать задачи это трудно тренируемая вещь. Например, нужна определенная дисциплина. Пример. В этом конкурсе организаторы дали концы кардиоциклов, но они не совсем корректные. Мои магистры просто взяли их, хотя можно самому написать эвристическую процедуру выделения и сделать лучше. Ну и много есть таких мелочей, которым формально не учат на теоретических курсах. Тут только практика под присмотром опытного человека.
Добрый день!
Увлекательный отчет, расширяет кругозор.
Я на шестом месте, возьмете к себе диссертацию бакалавра написать)? Учусь на втором курсе ВМК ВВО)
Заранее спасибо за ответ!
Надо для начала побеседовать в реале. Вдруг мы психологически несовместимы? 😉
Александр, добрый день.
На страничке с конкурсом больше нет ссылок на выборки- нет возможности воспроизвести код.
Можете выложить выборки или указать ссылку?
Спасибо!
Здравствуйте! По этому вопросу лучше обратитесь к организаторам. По идее, они не против, чтобы данные были доступны.
Я не помню точно правила конкурса, но стандартная практика — участник имеет право использовать предоставленные данные только для участия в конкурсе. По поводу кода и отчета я у них уточнял — они разрешили выложить в интернете, хотя могли запретить (все-таки если получаешь приз, то чего-то лишаешься взамен).
Спасибо, Александр, за подробный отчет.
Мне с моим тривиальным решением (возможно случайным, хоть и попавшим в Ваш шорт-лист),
было очень познавательно,как так высоко можно было сделать.
Ах, кардиограммы! Вот что мне надо было на дипломе мучить полиномами Майкснера как пример практического использования 🙂 У них как раз такой вид — всплеск и затухание.
Очень познавательный отчет!