<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Блог Антона Репушко: заметки с тегом соревнования</title>
<link>https://repushko.com/tags/sorevnovaniya/</link>
<description>Блог Антона Репушко</description>
<author>Антон Репушко</author>
<language>ru</language>
<generator>E2 (v3565; Aegea)</generator>

<itunes:owner>
<itunes:name>Антон Репушко</itunes:name>
<itunes:email></itunes:email>
</itunes:owner>
<itunes:subtitle>Блог Антона Репушко</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>Дневник соревнования OpenEDS 2020</title>
<guid isPermaLink="false">49</guid>
<link>https://repushko.com/all/openeds2020/</link>
<pubDate>Tue, 04 Aug 2020 21:38:13 +0300</pubDate>
<author>Антон Репушко</author>
<comments>https://repushko.com/all/openeds2020/</comments>
<description>
&lt;p&gt;Мы со &lt;a href="https://www.linkedin.com/in/sviatoslav-skoblov"&gt;Святославом Скобловым&lt;/a&gt; 2 месяца решали &lt;a href="https://research.fb.com/programs/openeds-2020-challenge/"&gt;OpenEDS 2020 Challenge&lt;/a&gt;, где в одном треке заняли первое место, а во втором восьмое. Про второй трек тут не будет, потому что он скучный и не очень интересный. И ещё нас изредка консультировал Вова Михеюшкин по всяким CV-вопросам. Может быть кому-то тоже будет интересно почитать, как проходят соревнования по ML.&lt;/p&gt;
&lt;h2&gt;Про соревнование&lt;/h2&gt;
&lt;p&gt;На основе &lt;a href="https://arxiv.org/abs/2005.03876"&gt;датасета OpenEDS2020&lt;/a&gt;, собранного &lt;a href="https://research.fb.com/category/augmented-reality-virtual-reality/"&gt;Facebook Reality Labs&lt;/a&gt;, запустили два трека. Оба связаны с VR/AR, Oculus и всем таким. Треки шли в рамках &lt;a href="https://openeyes-workshop.github.io/"&gt;воркшопа к ECCV 2020&lt;/a&gt;.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/099.png" width="640" height="400" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Один из тысяч кадров&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;b&gt;В первом треке&lt;/b&gt; даны последовательности по 100 (трейн) и 55 (валидация) фотографий глаз с gaze-векторами каждого кадра. Представьте, что вы умеет стрелять лазерами из глаз. Вот отнормированный вектор из вашего зрачка до объекта на VR/AR экране и есть gaze-vector.&lt;br /&gt;
Частота записи последовательности — 100Гц. В тесте были те же последовательности по 50 кадров, но уже без настоящих векторов. Общая задача — научиться предсказывать по 50 кадрам последовательности в тесте следующие 5 кадров (т.e. 50мс). Нужно это для &lt;a href="https://en.wikipedia.org/wiki/Foveated_rendering"&gt;foveated rendering&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Во втором треке&lt;/b&gt; нужно было сегментировать части глаза (бэкграунд, склеру, радужку и зрачок) по кривой разметке 5% данных в каждой последовательности из 200 кадров. Многие (по отзывам других участников) боролись именно с кривой разметкой, мы же начали решать второй трек за 2 недели до конца и не слишком преуспели, хотя разрыв между топом очень маленький. Важнее и интереснее для нас был именно первый трек.&lt;/p&gt;
&lt;h2&gt;Технические особенности&lt;/h2&gt;
&lt;p&gt;Соревнование проводилось на платформе &lt;a href="https://evalai.cloudcv.org/"&gt;EvalAI&lt;/a&gt;. Там можно скрывать свои сабмиты, но перед этим на какую-то долю секунды они попадают на общую таблицу. Поэтому было решено написать своего бота, который бы мониторил изменения лидерборда, генерировал красивые картинки и присылал их в наш общий диалог. С помощью него мы могли трекать и отслеживать настоящих лидеров, а не те результаты, которые были показаны вручную.&lt;br /&gt;
Был только 1 сабмит в день, каждую ночь предыдущая возможность сабмита сгорала.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/lb.jpg" width="1280" height="897" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Команда BTSD скрыла свой сабмит&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Своего железа у нас было не очень много, поэтому мы время от времени арендовали машины на &lt;a href="https://vast.ai/"&gt;vast.ai&lt;/a&gt;. Потратили на это около 230 долларов за 2 месяца соревнования.&lt;/p&gt;
&lt;h2&gt;Дневник&lt;/h2&gt;
&lt;p&gt;&lt;i&gt;1 июня&lt;/i&gt;&lt;br /&gt;
Создан чат в Телеграме, начали разбираться в предметной области, с платформой, читать правила. Выяснили, как части глаза называются на английском. Создали репозиторий на Гитхабе и настроили всем доступы.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/eye.jpg" width="500" height="239" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;&lt;i&gt;3 июня&lt;/i&gt;&lt;br /&gt;
Выкачиваются данные, визуально посмотрели gaze-вектора. Появляется идея классическими CV-методами поисков контуров искать зрачок на изображении и смотреть на изменение его положение внутри склеры. Разбираемся в типах движения глаза (саккады, скольжения, статичное положение и т. д.). Наконец-то понимаем вообще в чём суть трека.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;4 июня&lt;/i&gt;&lt;br /&gt;
Нашли &lt;a href="https://pupil-labs.com/"&gt;pupil-labs&lt;/a&gt;, с помощью оборудования которых Facebook генерировал свой датасет. Ничего полезного, но очень интересно.&lt;br /&gt;
Научились находить зрачок обычными CV методами. В итоге это потом использовалось только в визуализациях.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/pupil_center.jpg" width="399" height="133" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Пытались добавить ещё всяких контуров, но ничего не получилось.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/countur_orig.jpg" width="640" height="400" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Оригинальный кадр&lt;/div&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/countur.jpg" width="657" height="417" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Посчитанный контур&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;b&gt;Важное решение&lt;/b&gt;: посчитали правильным разделить пайплайн на две части: gaze-estimator (модель, которая по кадру предсказывает его gaze-вектор) и gaze-predictor (модель, которая по истории gaze-векторов предсказывает gaze-вектора следующих 5 кадров).&lt;/p&gt;
&lt;p&gt;&lt;i&gt;6 июня&lt;/i&gt;&lt;br /&gt;
Начали визуализировать вектора, чтобы посмотреть на всю последовательность целиком. Нам нужен gaze-predictor, но насколько сложным он будет? Если в данных в основном статичное положение глаза, то тогда сложная модель тут не нужна (так в итоге и оказалось).&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/static_gaze.jpg" width="518" height="281" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Глаз практически неподвижен&lt;/div&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/saccade.jpg" width="423" height="358" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;А тут уже двигается&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Где-то тут было решено для обучения эстиматора (модели, которая будет по кадру предсказывать gaze-вектор) использовать &lt;a href="https://habr.com/ru/company/smartengines/blog/264677/"&gt;аугментации&lt;/a&gt;. Но проблема в том, что при изменении изображения нужно будет менять и изначальный вектор: вращаешь изображение -&gt; вращаешь вектор. Решили патчить &lt;a href="https://github.com/albumentations-team/albumentations"&gt;albumentations&lt;/a&gt;.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/vector_visualize.jpg" width="391" height="251" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Проекция вектора&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;i&gt;11 июня&lt;/i&gt;&lt;br /&gt;
Начали гонять первые модели, оптимизировать параметры. Стали разбираться с предиктором. Попробовали всякие стандартные штуки для форкаста временных рядов типа &lt;a href="https://facebook.github.io/prophet/"&gt;prophet&lt;/a&gt;, но они предсказуемо не зашли из-за специфики данных: нельзя вытащить сезонность (которой нет), другие фичи вроде дней недели, времени и прочего, что активно эксплуатируется в таких местах.&lt;br /&gt;
Обучили первый resnet для эстиматора.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;12 июня&lt;/i&gt;&lt;br /&gt;
Скор первого трека: &lt;b&gt;0.1556&lt;/b&gt;&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/submit.jpg" width="949" height="355" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Сделали первый сабмит (команда baccaddes)&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Начали глубже разбираться с метрикой и сравнивать предикты модели с реальными данными, чтобы понять, где косяк. Настроили честную локальную валидацию эстиматора.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;15 июня&lt;/i&gt;&lt;br /&gt;
Скор первого трека: &lt;b&gt; 0.0786&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Засабмитили улучшенную модель (VAR поверх хорошего эстиматора).&lt;br /&gt;
Это приблизило нас к остальным на ЛБ.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;16 июня&lt;/i&gt;&lt;br /&gt;
Скор первого трека: &lt;b&gt;0.0747&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Написан и запущен Big Brother — бот, который следит за ЛБ. С этого момента до конца соревнования он работал с одним перебоем на полдня, после без ошибок.&lt;br /&gt;
Засабмитили скользящее среднее по 5 последним кадрам.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/submit_bot.jpg" width="1280" height="708" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Бот отрабатывает как надо&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;i&gt;17 июня&lt;/i&gt;&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/ezgif.com-video-to-gif.gif" width="256" height="160" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Начали смотреть глазами на глаза (это анимация одной последовательности)&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Посмотрели на статические генераторы таких данных (NVGaze и UnityEyes). В итоге для сореванования их так и не использовали.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;22 июня&lt;/i&gt;&lt;br /&gt;
Предикт эстиматора очень грязный: колбасит вектора между кадрами и получается, что между ними как будто бы сильное движение глаза.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;28 июня&lt;/i&gt;&lt;br /&gt;
Подумали, что было бы классно научиться группировать авторов одних и тех же последовательностей (количество участников при сборе датасета на порядки меньше числа последовательностей), чтобы вытаскивать оттуда какие-то фичи специфичные для конкретного участника. Эту идею так и не доделали.&lt;/p&gt;
&lt;p&gt;Начали думать про классическое CV снова: хотели вытаскивать крайние точки глаз и прочее.&lt;/p&gt;
&lt;p&gt;Обучили LSTM для предиктора. Сработало чуточку хуже средних по 5 кадрам.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;29 июня&lt;/i&gt;&lt;br /&gt;
Закончили патчить albumentations.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/orig.jpg" width="387" height="251" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Оригинальный кадр&lt;/div&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/flipped.jpg" width="385" height="249" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Сработавший Vertical Flip (и пересчитанный вектор)&lt;/div&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/shift_scale_rotate.jpg" width="380" height="247" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Живой ShiftScaleRotate&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;i&gt;1 июля&lt;/i&gt;&lt;br /&gt;
Начали подозревать, что в тесте всё таки в основном статика. И что самый большой буст тут даст улучшение эстиматора, а не предиктора.&lt;/p&gt;
&lt;p&gt;Нафигачили для эстиматора аугментаций.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;4 июля&lt;/i&gt;&lt;br /&gt;
Скор первого трека: &lt;b&gt;0.0613&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Стали думать, как сделать интереснее предиктор. Взяли потыкать &lt;a href="https://github.com/unit8co/darts"&gt;darts&lt;/a&gt; — это такой враппер над всякими стандартными моделями для форкаста.&lt;/p&gt;
&lt;p&gt;Запустили старый метод среднего по кадрам (или какую-то оч простую эвристику) над данными нового эстиматора. Очень сильно улучшились.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;5 июля&lt;/i&gt;&lt;br /&gt;
Скор первого трека: &lt;b&gt;0.0570&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Выучили пачку effnet’ов (до этого был resnet). Начали дробить на фолды и мешать предикты с разных фолдов.&lt;/p&gt;
&lt;p&gt;Сняли тачку на &lt;a href="https://vast.ai"&gt;vast.ai&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Посмотрели на тестовые данные на основе более-менее нормальных предиктов эстиматора. Оказалось, что какая-то динамика в последних 10 кадрах последовательности есть всего в 600-700 последовательностях из 6400.&lt;/p&gt;
&lt;p&gt;Засабмитил старые методы предикта на среднем фолдов effnet’а. Почти до самого конца это было нашим лучшим результатом и первым местом на ЛБ.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;9 июля&lt;/i&gt;&lt;br /&gt;
Обучили mobnet. Стали экспериментировать с предиктором: ExponentialSmoothing, VAR, ARIMA и т. д.&lt;br /&gt;
Методы ничего не докинули, а некоторые и ухудшили скор относительно просто среднего.&lt;br /&gt;
Скор самого предиктора при этом был очень хороший, около 0.000400+ на кадр по их метрике.&lt;/p&gt;
&lt;p&gt;Первый раз открыли данные второго трека, порисовали маски.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/mask.jpg" width="1098" height="1034" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;&lt;i&gt;10 июля&lt;/i&gt;&lt;br /&gt;
Засабмитили скользящее среднее по 3 кадрам на куче разных фолдов — не сработало.&lt;/p&gt;
&lt;p&gt;Постарались достраивать вектора регрессией. Тоже не сработало.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;11 июля&lt;/i&gt;&lt;br /&gt;
Начали играться с фильтрами над сигналом, чтобы сгладить разницу предиктов эстиматора между соседними кадрами. Получалось хорошо, использовали &lt;a href="https://en.wikipedia.org/wiki/Savitzky%E2%80%93Golay_filter"&gt;фильтр Савицки-Голая&lt;/a&gt;. Кажется, что всякие неровности эстиматора очень красиво сглаживаются.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/savgol_2.jpg" width="751" height="558" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;&lt;i&gt;12 июля&lt;/i&gt;&lt;br /&gt;
Разбирались с предиктором. Выяснили, что наша регрессия багованная и искали ошибку в разнице валидаций друг у друга. Нашли. Смотрели глазами на фильтрованные предикты и думали, что делать дальше.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;14 июля&lt;/i&gt;&lt;br /&gt;
Нарисовали красивые картинки градиентов по разным осям между двумя соседними кадрами по предиктам на всём тесте. Выяснили, что у нас действительно всё — статика. Поэтому опять же нет смысла во всяких сложных моделях предиктора.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/gradient_x.jpg" width="664" height="422" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Выяснили, что локальная метрика эстиматора напрямую коррелирует с результатами на ЛБ и что результат одного хорошего фолда лучше, чем его же со смесью фолдов чуть-чуть хуже. Опять упёрлись в то, что надо дотюнивать эстиматор. Вернулись к resnet’у.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;14 июля — 23 июля&lt;/i&gt;&lt;br /&gt;
Скор первого трека: &lt;b&gt;0.0552&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Разбирались с сегментацией, удивлялись кривой разметке, сложным случая с закрытыми глазами и т. д.&lt;/p&gt;
&lt;p&gt;Вытюнили 1 фолд для эстиматора до ошибки 0.000197 (в 3 раза лучше прошлых). В предиктор засунули простую эвристику: если статика, то скользящее среднее по 2 последним кадрам, а если была динамика в последних 5 кадрах, то добавляем градиент дальше до упора (из-за особенностей движения глаза, там бОльшая часть движений — линейная).&lt;/p&gt;
&lt;p&gt;&lt;i&gt;23 июля — 29 июля&lt;/i&gt;&lt;br /&gt;
Тюнили и думали над сегментацией. Смотрели на то, как нам применить синтетические данные в сегментаци. Генерировали синтетику.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/unity_eye.jpg" width="1148" height="648" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Типичный несуществующий глаз&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Из интересного: один сабмит пропустили, потому что кое-кто заснул от усталости и не слышал звонков с просьбой прислать данные. Два сабмита в два дня были сделаны за 30 и 20 секунд до сгорания.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/sega.png" width="720" height="720" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Кусочек каких-то сравнений моделей по сегментации&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;i&gt;30 июля — 31 июля&lt;/i&gt;&lt;br /&gt;
Скор первого трека: &lt;b&gt;0.0537&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Смотрели и думали над всякими сложными случаями в сегментации&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/sega2.jpg" width="1280" height="287" alt="" /&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/sega3.jpg" width="1280" height="277" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;По первому треку доучили остальные бленды эстиматора, сблендили и засабмитили. Так и осталось нашим лучшим результатом.&lt;/p&gt;
&lt;p&gt;По сегментации остались на 8ом месте.&lt;/p&gt;
&lt;h2&gt;Что хотели попробовать, но не попробовали&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Не использовали никакую синтетику, а скорее всгео надо было бы. Можно и в обоих треках&lt;/li&gt;
&lt;li&gt;Надо было учить LSTM на чистых данных (в том числе из теста и из трейна) и сразу на векторах. Наши эвристики в итоге были по каждой оси отдельно&lt;/li&gt;
&lt;/ul&gt;
</description>
</item>

<item>
<title>Junction 2019 — русские, русские, русские, VK</title>
<guid isPermaLink="false">20</guid>
<link>https://repushko.com/all/junction-2019/</link>
<pubDate>Mon, 18 Nov 2019 16:11:17 +0300</pubDate>
<author>Антон Репушко</author>
<comments>https://repushko.com/all/junction-2019/</comments>
<description>
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://repushko.com/pictures/Screenshot-from-2019-11-17-07-41-05.png" width="732" height="173" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Был на выходных на Junction-2019 (топовый европейский хакатон в Хельсинки), а это заметка фактами по свежим следам.&lt;/p&gt;
&lt;h2&gt;Выжимка&lt;/h2&gt;
&lt;p&gt;Русские, русские, автобусы из Питера, иностранцы придумывают, как интегрировать VK с AliExpress 🤯, ещё русские, детская безопасность в интернете, клёвое название нашего проекта, купленные шрифты, Люси в восторге, треки не очень, старость.&lt;/p&gt;
&lt;h2&gt;Чуть более развёрнуто&lt;/h2&gt;
&lt;p&gt;Похоже Junction окончательно стал главной выездной площадкой для IT-шников в СНГ. Русскоговорящих было по ощущениям больше половины. Приглашения для визы генерил скриптик на сайте, это ли не победа над бюрократией?&lt;/p&gt;
&lt;p&gt;Вспомнил, что он же в 2016 был моим первым выездным IT-мероприятием и атмосфера была совсем другой: пиццабургеры, Yousician с укулеле, на которых можно было играть ночью, лазерный луч через всё пространство мероприятия. Тогда это чувствовалось как что-то близкое, организованное такими же как и ты. Сейчас — построенный бизнес, который (видимо успешно) штампует мероприятия для студентов и ищет спонсоров. Ну и призы подросли.&lt;/p&gt;
&lt;p&gt;Чувствовалась старость и лень: зачем не спать всю ночь, когда после сна ты сможешь что-то пофиксить за 20 минут? Зачем не спать, когда в понедельник на работу?&lt;/p&gt;
&lt;h2&gt;Победители&lt;/h2&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Приложение для авторизации детей, которые ещё не умеют читать и писать (а потреблять контент хочется) в соцсетях. Суть в том, что ты придумываешь историю с вымышленными персонажами, и вот эта твоя история и становится паролем.&lt;/li&gt;
&lt;li&gt;Симуляция потоков людей на мероприятии. Создали комнатку в игровом движке, наплодили агентов, хакнули A* алгоритм и ПОБЕЖАЛИ ВСЕ НА ВЫХОД ПОЖАРНАЯ ТРЕВОГА УПС, ТЫ СГОРЕЛ И НЕ ДОБЕЖАЛ. Демка выглядела классно.&lt;/li&gt;
&lt;li&gt;Оказывается, фины очень много тратят на гэмблинг. Ребята сделали рулетку на телефоне, где проигранные деньги отправляются тебе на банковский счёт и вернутся к тебе только через год.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;sad but true&lt;/h2&gt;
&lt;p&gt;В итоге мы с Дашей набросали вдвоём маленькое демо приложения для личного контроля финансов, собрав в кучку все лучшие идеи, которые нашлись в других приложениях (типа burnout-char’a для отслеживания твоего ежедневного бюджета). Сервер я уже грохнул, так что есть только скрины. Возможно как-то допилим и сделаем интеграцию со своими банковскими аккаунтами. Оказывается в Европе это сильно проще, чем с российскими банками.&lt;/p&gt;
&lt;p&gt;Называется sad but true, потому что в миллениальном настоящем денег у тебя сильно меньше, чем приходит с ЗП на карту: это на квартирку, это на Netflix, а за Spotify кто заплатит, Пушкин? Вот и хочется, чтобы оно там само где-то считалось, списывалось, советовало как сэкономить, а ты повиновался бы бездушным if-else и средним по окнам в временных рядах.&lt;/p&gt;
&lt;p&gt;Фронтендик на Svelte оказался удобным. Мне как глупому `if err!= nil ` бэкендеру прям самое то.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="603" data-ratio="0.64561027837259"&gt;
&lt;img src="https://repushko.com/pictures/Screenshot-from-2019-11-17-07-31-28.png" width="603" height="934" alt="" /&gt;
&lt;img src="https://repushko.com/pictures/Screenshot-from-2019-11-17-07-31-41.png" width="869" height="938" alt="" /&gt;
&lt;img src="https://repushko.com/pictures/Screenshot-from-2019-11-17-07-31-55.png" width="680" height="923" alt="" /&gt;
&lt;/div&gt;
&lt;/div&gt;
</description>
</item>

<item>
<title>Santander 2019 на Kaggle: 52 место</title>
<guid isPermaLink="false">12</guid>
<link>https://repushko.com/all/santander-2019/</link>
<pubDate>Sat, 20 Apr 2019 22:47:40 +0300</pubDate>
<author>Антон Репушко</author>
<comments>https://repushko.com/all/santander-2019/</comments>
<description>
&lt;p&gt;С коллегами из &lt;a href="https://ods.ai"&gt;ODS&lt;/a&gt; заняли 52ое место в соревновании на Kaggle среди 8800 команд.&lt;br /&gt;
Santander в этот раз молодцы: обошлось почти без ликов.&lt;/p&gt;
&lt;p&gt;Данные были странные и несколько тысяч команд застряли на скоре 0.901. В итоге сильно докинула частотность значения признака и хороший тюнинг.&lt;/p&gt;
&lt;p&gt;Kaggle = веселье.&lt;/p&gt;
</description>
</item>


</channel>
</rss>