Aspiring Data Science – Telegram
Aspiring Data Science
386 subscribers
465 photos
12 videos
12 files
2.15K links
Заметки экономиста о программировании, прогнозировании и принятии решений, научном методе познания.
Контакт: @fingoldo

I call myself a data scientist because I know just enough math, economics & programming to be dangerous.
Download Telegram
Forwarded from data hate (Артём Церех)
На заре своей карьеры я работал в компании Pfizer. Сейчас она известна благодаря одноименной вакцине. Но восемь лет назад, когда говорили о Pfizer, многие путали её с брендом шоколадок Fazer.

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

Эти эффекты не обязательно должны быть отрицательными. Если после таблетки от головной боли улучшилось зрение, об этом тоже нужно сообщить.

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

С похожими ситуациями я сталкивался при работе с данными. Несколько раз возникала следующая ситуация: я занимаюсь пайплайном обработки данных и замечаю какой-то мелкий косяк — немного дублей или непонятные NaN. Я игнорирую эти мелкие косяки, а через несколько дней нахожу серьезную ошибку в пайплайне обработки данных. Оказывается, что всё неправильно, криво приджойнилось или что-то в таком духе. А те мелкие косяки, которые я видел за несколько дней до этого, могли бы указать на проблему раньше, если бы я обратил на них внимание.

Поэтому я стараюсь обращать внимание даже на мелкие ошибки, потому что они могут быть признаками более существенных проблем.
3
Forwarded from data hate (Artem Tserekh)
Вы наверняка знаете про компания X5 Retail Group. В нее входят Пятерочка и Перекресток. Но не все знают, что раньше этой компании принадлежала торговая сеть “Карусель”. Сейчас эта сеть закрыта, а часть магазинов переделали в Перекресток. Но когда “Карусель”, еще не объявила о своем закрытии я там работал DS’ом в управлении, которое отвечало за целевой маркетинг. Но речь пойдет не про то, как там работалось.

Я как-то лазил по корпоративному порталу и наткнулся на интересную страницу. На ней были регулярно обновляющие фотографии из столовой. По сути это было видео с fps один кадр в 2-3 секунды, но реализовано это было в виде обновляющихся фотографий.

Это была еще доковидная эпоха. Поэтому я ходил в офис, обедал в столовой. В столовой были очереди. Неплохо было бы иметь телеграм бот, который бы информировал об очередях.

Тогда я написал скрипт, который забирает эти картинки с корпоративного портала. Я взял готовую модель, распознающую людей на фото. Все это запустил в бесконечном цикле и добавил сохранения в postgres. Потом я добавил график в Tableau и все готово. До прогноза очередей я не добрался. В телегу из корпоративной сети просто так писать нельзя поэтому я остановился только на сборе данных.

Особо интересных инсайдом не было. Самый большой пик посещаемости был в обед. Еще один поменьше - утром. От погоды зависимости я не обнаружил.
Forwarded from data hate
Как-то давно Яндекс проводил митам, где собирался рассказывать про беспилотники. Даже обещал что-то показать. Из-за ажиотажа и нежелания того, чтобы на митап попали журналисты было тестовое задание. Причем в отличие от других митапов Яндекса это были не совсем простые вопросы на 5 минут, а достаточно сложная задача.

Заключалась она в следующем. Есть “игра” или “среда”, которая представляет собой двумерное поле из клеток. Есть клетки, по которым можно двигаться, есть стены, через которые нельзя двигаться. В этом пространстве двигается ровер - робот доставщик. На поле спавнятся заказы. Эти заказы нужно было быстро доставлять. Чем быстрее доставил, тем больше очков получил. Если не успел доставить заказ за указанное время, то получил 0 очков. Это соревнование проводилось на платформе Яндекс.Контест. Топ N участников по очкам попадали на митап.

Как решать задачу? Для начала нужно представить поле в виде графа. А дальше уже дело техники. Проблема была в том, что из библиотек был только pandas и numpy и ничего для графов. Не было у них библиотеки networkx или аналога. Нужно было писать самому. Пришлось залезть в исходники networkx и по их мотивам реализовать граф и поиск кратчайшего пути. В итоге я написал свой mini-networkx и реализовал свой бейзлайн для движения ровера. Проходили не все тест кейсы, где-то падал по времени, где-то алгоритм ломался при нескольких одновременных заказах. Но где-то в топе я оказался. Кто написал мне на почту с предложением купить этот код. Но я не продался.

В итоге я попал в заветные топ N, но не смог пойти на митап, так как уехал в Сочи.
Forwarded from data hate
Есть такая библиотека pandas-profiling. Её суть в том, что ты берешь датафрейм и она выдает тепе EDA, то есть графики, гистограммы картинки про этот датафрейм по одному клику. Как понятно из названия датафрейм, который она принимает на вход - это pandas dataframe.

Много лет назад я искал аналог для spark'a. Тогда я обнаружил заглушку для библиотеки с названием spark-profiling https://pypi.org/project/spark-profiling. Там было написано To be released. С тех пор я каждые пол года захожу на эту страницу. Жду хоть каких-то обновление. а там все так же:

Released: Apr 27, 2020
Project denoscription: To be released
Forwarded from data hate
Продолжение истории с одного из прошлых мест работы.
Суббота, день. Я бегу по беговой дорожке. Не думаю о работе, погрузился в свои мысли, смотрю на солнечный пейзаж в окне. И тут получаю сообщение от бота c алертами. Проблема при монтировании вольюма. И не просто сообщение, а сообщение, которое тегает меня. А теганье через @ продировается через все мьюты. И ты не можешь его не заменить.

В итоге я вышел из этого чата с алертами. Потом правда пришлось незаметно возвращаться, но это уже другая история.

Я прочитал в одном курсе про system design очень важные слова. Алертинг - это всегда призыв к действию. Иначе он не нужен. Как же это точно. Зачем мне этот алерт. Я не шарю что этот алерт значит, надо ли что-то чинить. А если и надо, то я не смогу, потому что я занимаюсь своими делами, И не должен потому что этом мой выходной. А дежурства тогда у нас не были предусмотрены.
Forwarded from data hate
Случай с одного из прошлых мест работы. У нас был пайплан в airflow, который работал каждый час. Однажды у нас этот пайплан сломался. Я уже не помню почему - главное что упал прод. Узнали мы о том, что все упало только в воскресенье. То есть спустся 2 дня. Почему-то не сработал мониторинг, который должен был написать нам в телеграм, что все плохо.

Не сработал он из-за того, что в процессе нижнее подчеркивание сломало сообщение об ошибки. А появилось это сообщение из-за того, что у нас появился новый сотрудник с _ в нике в телега. А в критичных случаях телеграм бот должен тегал всех DS'ов.

Потом я этому коллеге в шутку написал: "из-за тебя сломался мониторинг"
Forwarded from data hate
На 2 курсе бакалавриата у нас был выбор: пойти на обычное программирование или на интересное. В интересном было много курсов, и я выбрал программирование на LabVIEW. LabVIEW - язык программирования на основе блок диаграмм. Но его главная особенность - возможность быстро подключиться к любой железке и быстро набросать интерфейс для взаимодействия с ней. В конце курса каждый студент должен был сделать проект. Мой проект назывался “задача слежения”. Заключалась она в следующем. Имелась камера Logitech Orbit. Она могла поворачиваться влево вправо и наклоняться вверх вниз.

Можно попробовать выбрать объект и следить за ним. Если он не в центре, то необходимо повернуть камеру в нужную сторону. Сегодня эта задача не звучит сложной, но как это сделать если на дворе 2013 год, а код нужно писать на языке LabVIEW. К счастью, все не так плохо, как кажется. Была готовая библиотека, которая по небольшой картинке находит расположение максимально похожее на заданное изображении. За давностью лет я не помню как она работала, но там точно и речи не шло про нейронные сети.

Еще удалось реализовать фичу расчета расстояния от камеры до точки. Делалась это на основе того как смещалось положение объекта в кадре в зависимости от ворота камеры. Тут с со слежением было попроще, потому что окружение объекта не двигалось, а менялся только ракурс. Из-за сильного люфта была очень большая погрешность измерения расстояния. Но отличить 30 см от 1 метра, и метр от 3 метров было реально.

С тех пор к языку LabVIEW больше никогда не возвращался, но еще долго писал его в резюме.
Forwarded from data hate
Есть фраза от которой у меня все полыхает внутри: “История не терпит сослагательного наклонения”. Мол, зачем задумываться, что было бы если бы Наполеон не напал, если бы мы не победили в Сталинградской битве и т.д. Это не случилось вот мы и не знаем, что бы было поэтому и не стоит про это говорить.
Кто там не должен терпеть? Давайте посмотри на определение истории как науки.

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

Как сделать выводы о причинах событий не рассуждая о том куда бы все пришло, если бы не все сложилось иначе. Посмотрим например на Сталинградскую битву. Что было бы если бы мы её проиграли? Предположим, что тогда мы бы проиграли войну. Тогда делаем вывод о причине события: война выиграна, в том числе, благодаря победе в этой битве.
Или если мы считаем, что и без этого была бы одержана победа, то мы вычеркиваем эту битву из причин победы в войне.

Это чем-то похоже на методы оценки экономических эффектов, даже при отсутствии AB теста. Это непросто. Приходится опираться на некоторые предположения и делать допущения. Но можно употребить сослагательное наклонение и сказать, к примеру, если бы не эта рекламная кампания, то продажи были бы такие. Это ничем принципиально не отличается от если бы в истории.
Forwarded from DevFM
This media is not supported in your browser
VIEW IN TELEGRAM
Список матюков

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

И мы узнали, что, оказывается, самые разнообразные матюки можно найти в Steam.

В комментах приложим файлики для изучения и общего развития на русском и английском языках. А также файлики со словами-исключениями, чтобы избегать ложного срабатывания.

Для особо пытливых другие языки можно найти в Windows в Steam, в папочке resource.

#edu
2
#wisdom

Here’s Mark Twain:

“There’s no such thing as a new idea. We simply take a lot of old ideas and put them into a sort of mental kaleidoscope. (…) We keep making new combinations indefinitely, but they are the same old pieces of coloured glass that have been in use through all the ages”.
👍1
#python #codegems #yan

Юджин Ян показывает интересные лучшие практики Питона при разработке своих библиотек.

Кратко - используйте super().init() в методе init базового класса, чтобы работало множественное наследование.

class BaseAdapter:
"""The Base Transport Adapter"""

def __init__(self):
super().__init__()


Почаще используйте миксины для модульности добавления функционала к объектам.
Используйте относительные импорты from .utils.validation import check_X_y.

__init__.py можно использовать, если провели рефакторинг кода и вынесли что-то в отдельный модуль, а ломать совместимость не хочется.

conftest.py можно использовать для хранения глобальных фикстур (к которы можно обращаться из разных тестовых модулей).

https://eugeneyan.com/writing/uncommon-python/
#mlstories

Эту работу можно рассматривать как антипример ) Взяли метрикой R2, нет CV, вместо него единичное разбиение на train/test, нет нормального FS, вместо него какой-то странный неясно по какому датасету выполненный отбор из 500+ 7 признаков с наивысшей (линейной?) корреляцией с таргетом. Veery fishy!

https://www.youtube.com/watch?v=vPdw9I3_kCY
Forwarded from epsilon correct
Правильный HPO: Vizier

Сегодня коллеги наканецта заопенсорсили тулсет для оптимизации гиперпараметров Vizier, который, в отличие от множества альтернатив, адекватно работает. Вот тут можно почитать блогпост о нем, вот тут можно сразу прыгнуть в гитхаб.

Надеюсь, опен-сорсная версия окажется такой же полезной, как и внутренний продукт. К слову, он продается в Google Cloud, и теперь не совсем понятно, как эти два продукта будут сосуществовать (classic Google).
🔥1