Продукт на .NET, помогающий спасать жизни
В некоторых жизненных ситуациях нужно действовать очень быстро. Иногда это условие невыполнимо: например, просто невозможно без огромного везения за очень короткое время найти человека с редкой группой крови, так еще и готового ей поделиться. Ребята создали продукт под названием DonorUA, который действительно помогает спасать жизни при помощи чат-бота. Подробнее под катом.
Передаю слово автору.
Несколько лет назад на хакатоне по созданию социальных сервисов я пытался разработать проект для автоматизации жалоб на работу ЖКХ. Разработка продвигалась туго, демо версия была сложной и технологичной, поэтому жюри не оценило ни усилий, ни саму идею. Но на этом мероприятии я познакомился с девушкой, руководителем общественной организации, которая до этого уже несколько лет занималась решением различных проблем в сфере донорства крови в Украине. Слово за слово — и ты уже кофаундер нового проекта.
В тот момент о донорстве крови я не знал ровным счетом ничего. Единственным знанием был тот факт, что люди иногда сдают кровь другим людям. Как это всё организовано, с какими проблемами живет эта сфера, сколько это стоит и где мы находимся — для меня было полной загадкой.
Имея огромный опыт автоматизации процессов и написания корпоративных систем, я решил, что создание базы данных и автоматизация тех или иных процессов не займет много времени.
Сначала оказалось, в стране отсутствует единый реестр доноров крови. Потом я узнал, что все без исключения отечественные донорские организации, в лучшем случае, используют Excel файл со списком доноров, их телефонов и группой крови. Когда поступала заявка на поиск доноров, сотрудники организации садились за телефон и начинали звонить всем подряд в надежде, что кто-то таки откликнется. Как вы понимаете, эффективность такого подхода была практически нулевой.
Во всех странах законодательство в сфере донорства очень и очень строгое. К примеру, в Украине нельзя сдавать кровь целый год, если сделал пирсинг или татуировку, или пару месяцев, если съездил в экзотическую страну или просто поменял партнера. Список противопоказаний и ограничений к донорству занимает не одну страницу.
В развитых странах, где явных проблем с донорской кровью нет, вопрос решается достаточно просто — государство щедро финансирует эту сферу. В менее развитых и в слаборазвитых странах дефицит донорской крови может составлять до 90%, что делает кровь дорогим товаром и создает огромный теневой рынок. Также во многих постсоветских странах государство часто абстрагируется от поиска доноров, перекладывая ответственность на родственников пациентов, которым, собственно, и нужна донорская кровь. А с учетом того, что жизнь пациента очень сильно зависит от того, сделали вовремя переливание или нет, то вопрос быстрого поиска доноров становится без преувеличения вопросом «жизни и смерти».
Как оказалось впоследствии, это далеко не все проблемы, поэтому проект на “две недели” перерос в нечто гораздо большее.
Первые шаги
Реальным стартом проекта можно назвать участие в конференции IDCEE 2014, в рамках которой проходил хакатон по социальным инновациям. В тот день мы победили, и нам стало ясно, что тема интересная, важная, поэтому с большим энтузиазмом мы приступили к реализации проекта. Вуаля и через 4 месяца, весной 2015 года, мы запустили первую версию, содержащую базу реципиентов и доноров из Excel таблички, а также достаточно простой механизм подбора доноров и реципиентов. Забегая наперед скажу, что система рекомендаций претерпела огромное количество изменений и в данный момент учитывает от 10 до 15 различных параметров.
Первый переломный момент случился через месяц-полтора после запуска проекта, когда координаторы впервые смогли найти донора в течение 15 минут после размещенной заявки на сайте. Буду честным — многие в нашей организации отнеслись с большим скептицизмом к автоматизации и разрабатываемой системе. Но после того, как система справилась с первым заданием, мы обрели уверенность в том, что движемся в правильном направлении.
К концу 2015 года в базе было уже около 4000 доноров, что позволило закрывать, как минимум, половину запросов на поиск доноров. Вторая половина закрывалась по старинке — с помощью телефона. Весь 2015 год прошел в борьбе старого подхода и нового. В конце концов, новый подход победил. Мы запретили искать доноров по телефону и пользоваться Excel, ограничили доступ к системе всем координаторам без исключения и отключили все телефонные линии. Мы поняли, что нам нужен единый координатор платформы, у которого будет одна задача — искать доноров с помощью штатных средств системы ДонорUA. Было больно, что-то пришлось докрутить, но в результате система полноценно заработала, и мы поняли, что можем закрывать больше заявок. Но о проекте никто не знал (одно из наиболее известных украинских изданий в единственной публикации о новых социальных проектах в 2015 году даже словом не обмолвилось о нашем проекте), соответственно, к нам обращалось малое количество людей. Несмотря на огромное количество сообщений о поиске доноров в Facebook/Twitter/Вконтакте. И тогда…
Мониторинг социальных сетей
… я обратился с предложением к компании YouScan, которая занимается мониторингом социальных сетей в ру- и укрнете. Их система заточена на большой и средний бизнес, и, откровенно говоря, моё предложение об использовании их системы для нахождения сообщений о поиске доноров их обескуражило. Представитель компании взял паузу, чтобы провести несколько тестов и вернулся через несколько дней с информацией, что наша гипотеза верна и что их система хорошо справляется с задачей поиска сообщений. Таким образом, в один миг мы получили возможность в реальном времени мониторить все сообщения по теме и быстро на них реагировать. Этот подход позволил нам стать лидером в социальных сетях — в большинстве публикациях о поиске доноров в комментариях идет ссылка на наш проект, а остальные публикации мы находим через YouScan. После нахождения тех или иных сообщений мы связываемся с авторами публикаций и предлагаем разные варианты сотрудничества.
Возросшее количество заявок на поиск доноров крови нужно было компенсировать увеличением базы доноров. И после недолгих раздумий возникла идея автоматизировать рекрутинг доноров крови через социальные сети. Мы решили объединить мониторинг социальных сетей, чатботов и системы обработки естественного языка (Natural Language Processing) для поиска потенциальных доноров. С этой идеей мы приехали в Стокгольм на Startup Weekend: Social Innovations и… снова выиграли.
Слева — общая схема работы Natural Language Processing и процесса преобразования текста в структурированный объект. Справа — пример сообщения и сущностей, которые могут быть извлечены из него.
Из сообщений мы можем автоматически извлекать такие данные как имя реципиента, необходимое количество доноров, срочно или нет, группу крови и резус фактор, город и контактные данные. Для обучения моделей мы использовали WIT.AI и Microsoft LUIS. Для английского языка мы получили очень хорошие результаты, но, к сожалению, подобные системы достаточно плохо работают кириллическими языками — русским и украинским. А с учетом того, что система заточена на эти языки, развитие этого направления отложили до лучших времен.
На самом деле идея была гораздо шире: разработать чатбот, с помощью которого можно автоматически рекрутить доноров крови через социальные системы и мессенджеры.
Пример того, как могли бы выглядеть диалоги между чат-ботом и потенциальными донорами крови
Увы, эту идею сложно реализовать — в первую очередь, из-за скандала Facebook и Cambridge Analytica, а также после того, как в Европе приняли закон GPRD, не позволяющая вольготно собирать, анализировать и распоряжаться персональными данными.
Персональный ассистент донора — ДонорUA.Бот
Но после победы в Стокгольме мы оценили потенциал чатботов и очень расстроились отсутствием NLP/NER инструментов для украинского языка. Так родился сайд проект — ДонорUA.Бот.
Создавая ДонорUA.Бот, мы хотели решить несколько проблем:
- разобраться с темой чатботов — успешно;
- создать Named Entity Recognition для украинского языка — частично успешно;
- собрать базу знаний по противопоказаниям к донорству, а также законодательству, ограничениях и льготах для донорах — успешно, база постоянно дополняется;
- создать, в первую очередь, инструмент для себя — для службы поддержки, ведь 80% вопросов — одни и те же — успешно.
Кроме того, с нашим чат-ботом мы смогли отказаться от большого количества email-рассылок, которые заменили персонифицированными и автоматическими сообщениями в Viber и Telegram. Электронная почта по-прежнему доступна в списке вариантов, но всё большее количество людей предпочитают мессенджеры.
Бот в Skype и Messenger
А вот с SMS рассылками у нас не срослось. Все национальные операторы отказали проекту в предоставлении SMS шлюза. Поэтому использование чатботов и мессенджеров — очевидный шаг, да ещё и очень и очень дешевый.
Что сейчас?
На сегодняшний день ДонорUA — полноценная CRM/CMS платформа для рекрутинга доноров и их управления, которая включает в себя:
- Кабинеты администратора, донора крови, центра крови, доктора.
- Система рекомендаций, позволяющая донорам увидеть актуальный список реципиентов, которые нуждаются в их группе крови, а администраторам системы — подходящих доноров для конкретного реципиента.
- Система нотификаций, которая автоматически рассылает уведомления в Viber/Telegram/Email при нахождении совпадения донор-реципиент.
- Кровопедия — набор полезной информации для доноров в формате вики.
- Бонусная программа для доноров.
- Официальные открытые (и обработанные) данные от Министерства Здравоохранения Украины и открытая статистика.
- Мониторинг социальных сетей.
- ДонорUA.Бот и ИИ.
- Мобильные приложения для Android, iOS, Windows.
- Мобильные приложения для партнеров бонусной программы для iOS/Android.
- Карта центров крови и отзывы на центры крови.
- Служба поддержки доноров.
- Открытое API, на базе которого реализовано несколько интеграций с другими сервисами.
- Корпоративное донорство.
- Специальные программы и скидки для доноров от партнеров.
Вот так, например, выглядит информационный стенд в одном из центров крови:
И вот так это выглядит в нашей системе:
Красный цвет значит, что крови критично мало, желтый — кровь заканчивается, зеленый — достаточно
Или вот еще один пример автоматизации. Перед каждой сдачей крови донор должен заполнить анкету, которая состоит из примерно 30 вопросов, что занимает от 1 до 3 минут. Если представить, что в день центр крови может принять в среднем 40-50 человек, то экономия составит 1-1,5 часа из 4-5 рабочих в день (!). В нашей системе донор может заполнить анкету онлайн один раз и обновлять её по мере изменения информации (что происходит очень редко), а центр крови может скачать заполненные анкеты в своем кабинете. И таких примеров, где мы смогли оптимизировать те или иные процессы, достаточно много.
Перевод всех процессов в цифру имеет еще один положительный эффект: мы можем оценить ситуацию в любой момент — как на уровне отдельного центра крови, так и на уровне города или всей страны в целом.
Архитектура и технологический стек
Проект сделан на ASP.NET MVC + Web API + Entity Framework на платформе Microsoft Azure. Мы используем Azure SQL Database, Azure Blob storage, Azure Jobs, Azure CDN, Cognitive Services + Microsoft Bot Framework. Мобильные приложения разработаны на Xamarin. Для командной работы используется Office 365, Slack, Asana и Visual Studio Team Systems. В целом, стандартный .NET/Azure стек, ничего особенного.
Мы написали собственный (достаточно простой) NER для украинского языка поверх Microsoft Bot Framework + дописали интеграцию с Viber, что позволило нам быстро создавать QnA (questions and answers) чат-боты на украинском языке (аналог QnA Maker от Microsoft, который является частью Azure Cognitive Services) и быстро их разворачивать на всех популярных платформах — Messenger, Viber, Telegram, Skype, Skype for Business, Slack, Microsoft Teams, email, web chat и использовать Direct Line API для интеграции чат-бота в мобильные приложения.
Стандартная архитектура чат-бота на Azure + Microsoft Bot Framework
Компания Microsoft любезно предоставила нашему проекту Azure ресурсы в рамках программы Microsoft Bizspark. С недавних пор Microsoft Bizspark заменили на программу Microsoft for Startups, и получить ресурсы стало намного сложнее, но мы успешно подались на другую программу — Microsoft for Nonprofit, в рамках которой можно получить Office 365 на 300 пользователей и ресурсы Microsoft Azure на $5000 в год совершенно безвозмездно. Таким образом, несмотря на то, что проект, по факту, является социальным, все процессы построены как в реальном бизнес-проекте.
Кстати, о бизнесе.
Бизнес модель и позиционирование
Вопрос о финансировании нам задают очень часто, как и, собственно, о том, как мы позиционируем наш проект.
С самого начала мы позиционировали ДонорUA как неприбыльный социальный проект. Но неприбыльный не значит, что людям не нужно платить зарплату и оплачивать счета. Все же в сознании многих людей не прибыльный равно бесплатно. Грантоедством мы заниматься не хотели, да и, честно говоря, практически все фонды отфутболили нас на раннем этапе переговоров — мол, не формат. А заполнять бесконечные тендерные бумажки мы не хотели, да и, по правде говоря, и не умеем. Поэтому практически всё финансирование проекта — это собственные средства и частично — финансовая помощь одного человека, не связанного с проектом.
Вариант монетизации проекта на реципиентах мы не рассматривали — большинство реципиентов, которые к нам обращаются и так испытывают проблемы как психологического, так и материального плана. А те, кто могут купить наши услуги, как правило, к нам не обращаются, а решают проблемы по “своим каналам”.
Когда позиционирование с социальным проектом «не пошло», мы начали позиционировать проект как ehealth-стартап, что, на самом деле, не очень далеко от правды, но с некоторыми нюансами. Такое позиционирование принесло свои плоды — мы регулярно начали попадать в СМИ, смогли выиграть несколько стартап-конкурсов и нас начали приглашать как экспертов по civic tech и social innovations. К сожалению, грантов, партнеров и инвестиций это нам не принесло.
Забавная ситуация произошла на одном из стартап-конкурсов, в котором победитель должен был получить около $75 тыс. на развитие. Но после того, как мы выиграли и это состязание, нам подарили… книгу. Да, украинские стартап-конкурсы — бессмысленные и беспощадные :-) Потом было еще несколько финалов, побед и участий, но в какой-то момент мы поняли, что это пустая трата времени.
В данный момент мы предлагаем социально ответственному бизнесу проводить корпоративные дни донора и быть частью развития донорского движения. Мы активно ищем такие компании для сотрудничества, предлагая абсолютно новый уровень тимбилдинга, а также корпоративно-социальной ответственности.
Так мы начали немного зарабатывать. Ключевое слово — немного :-) А планов у нас еще очень много!
Машинное обучение и искусственный интеллект
Мониторинг социальных сетей, чат-боты, NLP/NER — фактически, мы уже используем отдельные элементы ИИ для решения тех или иных задач. Но возможности применения МО и ИИ шире.
В данный момент мы занимаемся решением нескольких задач.
Прогнозирование спроса на донорскую кровь исходя из исторических данных
Задача достаточно стандартная, но проблема в том, что исторических данных очень мало, они, в лучшем случае, агрегированы, поэтому использовать их нельзя. А наших данных пока не достаточно. Тем не менее, надеюсь, что в будущем более тесная интеграция с центрами крови позволит нам получить деперсонифицированные исторические данные и это позволит нам использовать всю мощь алгоритмов ИИ для прогнозирования спроса.
Прогнозирование события, что донор повторно сдаст кровь в ближайшие X дней с вероятностью N
Для разработки моделей мы использовали открытый датасет — Blood Transfusion Service Center Data Set, который, собственно, содержит реальные данные одного из центров крови. Потренировавшись на общедоступных данных, мы занялись анализом данных, которые собрали с помощью ДонорUA. Более детально об этом можно почитать здесь.
Уменьшение количества совпадений донор-реципиент
Алгоритм матчинга доноров и реципиентов работает достаточно хорошо, но в нем есть один существенный недостаток: при увеличении базы данных и выборе популярных групп крови мы получаем тысячи совпадений. Больше — не всегда лучше. Мы очень не хотим, чтобы сообщения от нас воспринимались донорами как спам. Таким образом, необходимо решить задачу уменьшения количества совпадений донор-реципиент без утраты качества. Кроме того, мы должны склонять не очень активных доноров к регулярному донорству.
Для решения задач мы используем большое количество инструментов — начиная от Microsoft Azure Machine Learning, заканчивая различными python библиотеками и новым инструментом от Microsoft — библиотекой ML.NET.
Вместо заключения
Современные технологии открывают огромное количество новых возможностей, в том числе для решения острых проблем человечества.
Своим примером мы хотим показать, что синергия активных людей и современных технологий может творить чудеса. За три года в рамках ДонорUA мы непосредственно помогли 2,5 тыс. реципиентам, а 20 тыс. сдач крови — это потенциально 60 тыс. спасенных жизней.
Облачные технологии, алгоритмы искусственного интеллекта и машинного обучения открывают новые возможности для разработчиков, бизнеса, о которых еще десять лет можно было только мечтать.
Бизнес обладает огромными ресурсами. У нас есть огромное желание и большой опыт решения проблем в сфере донорства крови.
Давайте решать эти проблемы вместе.