Продукт на .NET, помогающий спасать жизни

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

tspu7ey2xpsgz761bal93m1tmdg.jpeg

Передаю слово автору.

Несколько лет назад на хакатоне по созданию социальных сервисов я пытался разработать проект для автоматизации жалоб на работу ЖКХ. Разработка продвигалась туго, демо версия была сложной и технологичной, поэтому жюри не оценило ни усилий, ни саму идею. Но на этом мероприятии я познакомился с девушкой, руководителем общественной организации, которая до этого уже несколько лет занималась решением различных проблем в сфере донорства крови в Украине. Слово за слово — и ты уже кофаундер нового проекта.

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

Имея огромный опыт автоматизации процессов и написания корпоративных систем, я решил, что создание базы данных и автоматизация тех или иных процессов не займет много времени.

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

yfy7y6-yyybmogbgy8ixxjha2fc.jpeg

Во всех странах законодательство в сфере донорства очень и очень строгое. К примеру, в Украине нельзя сдавать кровь целый год, если сделал пирсинг или татуировку, или пару месяцев, если съездил в экзотическую страну или просто поменял партнера. Список противопоказаний и ограничений к донорству занимает не одну страницу.

В развитых странах, где явных проблем с донорской кровью нет, вопрос решается достаточно просто — государство щедро финансирует эту сферу. В менее развитых и в слаборазвитых странах дефицит донорской крови может составлять до 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 и… снова выиграли.

l-lc8_zgptjgyk0llwequvj2yvg.png

Слева — общая схема работы Natural Language Processing и процесса преобразования текста в структурированный объект. Справа — пример сообщения и сущностей, которые могут быть извлечены из него.

Из сообщений мы можем автоматически извлекать такие данные как имя реципиента, необходимое количество доноров, срочно или нет, группу крови и резус фактор, город и контактные данные. Для обучения моделей мы использовали WIT.AI и Microsoft LUIS. Для английского языка мы получили очень хорошие результаты, но, к сожалению, подобные системы достаточно плохо работают кириллическими языками — русским и украинским. А с учетом того, что система заточена на эти языки, развитие этого направления отложили до лучших времен.

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

wfaj9fyyo4d1bzynvnir7nlqe8k.png

Пример того, как могли бы выглядеть диалоги между чат-ботом и потенциальными донорами крови

Увы, эту идею сложно реализовать — в первую очередь, из-за скандала Facebook и Cambridge Analytica, а также после того, как в Европе приняли закон GPRD, не позволяющая вольготно собирать, анализировать и распоряжаться персональными данными.

Персональный ассистент донора — ДонорUA.Бот


Но после победы в Стокгольме мы оценили потенциал чатботов и очень расстроились отсутствием NLP/NER инструментов для украинского языка. Так родился сайд проект — ДонорUA.Бот.

Создавая ДонорUA.Бот, мы хотели решить несколько проблем:

  • разобраться с темой чатботов — успешно;
  • создать Named Entity Recognition для украинского языка — частично успешно;
  • собрать базу знаний по противопоказаниям к донорству, а также законодательству, ограничениях и льготах для донорах — успешно, база постоянно дополняется;
  • создать, в первую очередь, инструмент для себя — для службы поддержки, ведь 80% вопросов — одни и те же — успешно.


Кроме того, с нашим чат-ботом мы смогли отказаться от большого количества email-рассылок, которые заменили персонифицированными и автоматическими сообщениями в Viber и Telegram. Электронная почта по-прежнему доступна в списке вариантов, но всё большее количество людей предпочитают мессенджеры.

td2p6xel2x-6dn8ignr-lbcge4q.png

Бот в Skype и Messenger

А вот с SMS рассылками у нас не срослось. Все национальные операторы отказали проекту в предоставлении SMS шлюза. Поэтому использование чатботов и мессенджеров — очевидный шаг, да ещё и очень и очень дешевый.

Что сейчас?


На сегодняшний день ДонорUA — полноценная CRM/CMS платформа для рекрутинга доноров и их управления, которая включает в себя:

  1. Кабинеты администратора, донора крови, центра крови, доктора.
  2. Система рекомендаций, позволяющая донорам увидеть актуальный список реципиентов, которые нуждаются в их группе крови, а администраторам системы — подходящих доноров для конкретного реципиента.
  3. Система нотификаций, которая автоматически рассылает уведомления в Viber/Telegram/Email при нахождении совпадения донор-реципиент.
  4. Кровопедия — набор полезной информации для доноров в формате вики.
  5. Бонусная программа для доноров.
  6. Официальные открытые (и обработанные) данные от Министерства Здравоохранения Украины и открытая статистика.
  7. Мониторинг социальных сетей.
  8. ДонорUA.Бот и ИИ.
  9. Мобильные приложения для Android, iOS, Windows.
  10. Мобильные приложения для партнеров бонусной программы для iOS/Android.
  11. Карта центров крови и отзывы на центры крови.
  12. Служба поддержки доноров.
  13. Открытое API, на базе которого реализовано несколько интеграций с другими сервисами.
  14. Корпоративное донорство.
  15. Специальные программы и скидки для доноров от партнеров.


Вот так, например, выглядит информационный стенд в одном из центров крови:

gfq1hzst-5-v4o8lfks9h0ahjyy.png

И вот так это выглядит в нашей системе:

6moydfstks-v5eg9hvhz91nih3a.png

Красный цвет значит, что крови критично мало, желтый — кровь заканчивается, зеленый — достаточно

Или вот еще один пример автоматизации. Перед каждой сдачей крови донор должен заполнить анкету, которая состоит из примерно 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 для интеграции чат-бота в мобильные приложения.

qhooi5t60-kvvswwkwkxzl0h8ac.png

Стандартная архитектура чат-бота на 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 тыс. спасенных жизней.

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

Бизнес обладает огромными ресурсами. У нас есть огромное желание и большой опыт решения проблем в сфере донорства крови.

Давайте решать эти проблемы вместе.

Об авторе


0b04f124bf38494eeff9a709afeb50bb.jpgАлександр Краковецкий — CEO DevRain Solutions, CTO ДонорUA, к.т.н., Microsoft Artificial Intelligence Most Valuable Professional, Microsoft Regional Director.

© Habrahabr.ru