Как я резюме обновлял, или ML-эксперимент с базой ФОПов
Появилась свободная минута на то, чтобы не в последний раз смахнуть пыль со своего резюме и удалить аббревиатуры, расшифровки которых я уже не помню, а вместо них добавить чего-нибудь посовременнее. Что там сейчас в тренде? Data Science, ML, AI? Ну что же, начнем...
Анаконда уже установлена и нежится на рабочем столе в ожидании данных. Титаник мне не интересен, до Чемпионата мира еще далеко, а вот нашумевшая база ФОПов (да-да, та самая с адресами и фамилиями) — в самый раз. Забегая наперед, успокою многоуважаемых, что под катом никаких личных данных.
Все желающие могут лицезреть полный исходный код с датасетами на Kaggle.
Анализ данных
Для начала разомнемся и выведем количество IT-шников, сгруппировав по статусу ЧП. Предварительно отфильтруем их от остальных ФОПовцев по КВЭД
Одной картинки на Data Science инженера маловато будет — нужно кодить. И не просто кодить, а геокодить! Положиться на бесплатные сервисы и загеокодить ~250 000 записей по точному адресу — никаких лимитов не хватит, а заморачиваться с установкой своего инстанса Open Street Map ой как не хотелось. Ищем на просторах интернета и находим базу украинских почтовых адресов с геокоординатами — то что нужно!
17 000+ не замапилось (ожидал, что будет хуже). Не беда — поселим ~10 000 «бездомных» на соседние почтовые индексы, а остальные 7 000 распределим на уровне городов — на общие цифры это не повлияет.
Забываем пока об остановленных (мы к ним еще вернемся) и выведем распределение зарегистрированных IT-шников по регионам:
Останавливаться тут не над чем — тройка лидеров известна каждому джуну. Задачка на мидла — проецируем записи из базы на карту:
Чем темнее точка — тем больше IT-шников зарегистрировано в данном регионе. Недостаток вышеприведенной карты в том, что в максимально красной точке может быть зарегистрировано сколько угодно IT-шников. Например, визуально кажется, что во Львовской области больше зарегистрированных, чем в Киевской. Хотя осмелюсь предположить, что в Киеве они просто любят жить в обществе себе подобных.
Фиксим график путем притягивания за уши Machine Learning алгоритмов. В сеньоры не метим и ограничимся одним из самых простых — k-means алгоритмом. Эмпирическим путем выбираем количество кластеров, равное
Как видно из картинки, ML разбил позиции всех IT-шников на 15 кластеров. В центре масс каждого кластера расположена точка с радиусом, пропорциональным количеству зарегистрированных особ в данном кластере. Все становится на свои места: в Киеве в два раза больше зарегистрированных, чем в Харькове. Львовяне тем временем не отстают.
В чем сила, брат? В параметрах! Тонкий тюнинг моделей с последующей оценкой ее качества — довольно сложный процесс и больше похож на искусство. В k-means особо тюнить нечего, кроме как количество кластеров, поэтому в преддверии выборов немного поиграемся и установим n_clusters = 2:
Ха! Запад победил! Ну а справедливости ради, если делить по Днепру... Меньше воды, больше графиков. Вспомним о неактивных ЧП и распределим их по регионам:
Причины остановки ЧП могут быть самыми разнообразными. Осмелюсь предположить, что одна из наиболее распространённых — эмиграция. Построим график только закрытых ЧП в процентном соотношении к общему количеству в данном регионе и посмотрим, откуда «мозги текут» активнее всего:
Среди наиболее лояльных (меньше всего закрытых) — львовяне, харьковчане и киевляне. Крымчан, если честно, ожидал увидеть в первой тройке — не могу объяснить данную аномалию.
Вывод
Пока скрипт экзекьютится, а графики отрисовываются, подведем итоги:
1 статья, 19 комитов, 7 графиков, 80 строк на питоне и +3 строчки в резюме, а выводы делайте сами.
Что дальше
Еще во времена, когда Nokia выпускала своего первого убийцу айфона, а Android делал первые неуверенные шаги, уже тогда наш Screenshot-based доморощенный солюшен использовал Computer Vision техники (видосик для затравочки в конце статьи). Поэтому в следующий раз поговорим о том, как далеко можно послать селекторы и применим Computer Vision и Deep Learning техники для Screenshot-based автоматических тестов.