Aspiring Data Science – Telegram
Aspiring Data Science
385 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 asisakov
Что перепробовать для улучшения моделей

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

Какие варианты улучшения предложили:

1. Рассматриваем корреляцию наших признаков с таргетом, а так же попарно
2. При работе с OHE (one-hot-encoding):
2.1. Удаляем один из сгенерированных признаков, чтобы убрать мультиколлинеарность
2.2. Смотрим корреляцию друг с другом
2.3. Вместо OHE для дней недели предполагаем sin/cos с fourier_order = 2, либо делаем нолики или единички для выходной/не выходной
2.4. Пробуем WOE-преобразование для категориальных переменных
2.5. Делаем проверку на VIF-score для того, чтобы избежать мультиколлинеарности в наших признаках, которые попадают в модель
3-4 дропнул
5. (опционально) Предполагаем дополнительную генерацию степеней признаков не дискретно = 1.1, 1.2, 1.3
6. При работе с фолдами в кросс-валидации рассматриваем пристально бакеты, где сильно разлетелись по метрикам на тесте (сравниваем распределения и средние у каждого признака и таргета, тут можно применить PSI)
7. Для проверки на важность рассматриваем следующее:
7.1. Накатываем Катбуст / lightgbm:
7.1.1. Смотрим важность по GAIN
7.1.2. Смотрим важность по SHAP-values
7.1.3. Смотрим важность по permutation importance
7.1.4. Отбираем фичи, которые попали в условный топ-N каждого из способов и предполагаем, что они самые крутые - далее смотрим, насколько сильно их скор разлетается
7.2. Делаем Recursive Feature Elimination
7.3. На сформированном финальном списке признаков пробуем найти дата-лики на будущее и смотрим просто по логике и выкидываем те, которые совсем не подходят.
7.4. (опционально) Если фичей меньше N, делаем полный перебор по всем вариантам применения этих признаков

Дополнительно про отбор признаков тут
Про генерацию признаков для временных рядов тут

Уверен, это вам точно пригодится при работе над вашими модельками. В комментариях кидайте ваши предположения по тому, что я мог упустить.

@asisakov_channel

#ml
👍1
Forwarded from Aleksandr
Возможно кэпство, но тем не менее:
- в доставшихся мне проектах частенько не дропаются константные/квазиконстантные (где > 99% значений одинаковые) фичи + дублированные фичи
- для снижения кардинальности кат фичей можно сливать редкие категории в одну "Others", удобно делать это вот этой тулзой. В целом рекомендую использовать feature-engine, в ней оч много преобразователей, делающих много рутинной работы
- автобиннинг: бьет вещ фичи на интервалы, на которых достигается максимальная дискр. способность фичи. Кат фичи он разбивает на группы по тому же критерию, опять-таки умный способ снижения кардинальности. Доступно несколько параметров, регулирующих размер и кол-во бинов , которые можно подбирать по CV. Для логрега это прям классическая схема: биннинг -> WOE-преобразование. Есть 2D вариант, когда бины "двумерные"
- еще пример использования автобиннинга для кат фичей: генерим парные фичи, например, "сем положение + тип занятости", получим сильно "кардинальную" кат фичу, но если ее прогнать через автобиннинг, то иногда такая побиненная пара у меня неожиданно выходила в топ, при том, что отдельные ее компоненты были слабыми. Тут главное не переобучиться и не делать парные фичи с очень большой кардинальностью
- все знают, что надо удалять корр. фичи, но как? Допустим, есть группа из фичей, у которых попарная корреляция больше 0.8, как и сколько из них убирать? Тут возможны варианты:
- Сортируем по значимости/корр с таргетом, оставляем топ-N, остальные дропаем. Способ измерения важности, N и порог корреляции подбираем по CV
- Видел и такую экзотику, как ужатие этой группы при помощи PCA, правда сам не пробовал. Если групп много, то для каждой будет свой PCA транформер (выглядит конечно громоздко)
- про важность фичей: пока что катбустовый встроенный механизм показал себя адекватнее всего
👍2
Forwarded from Yan Budakyan
С квазиконстантными фичами (как и с имеющими много NA) нужно быть осторожнее в задачах с сильным дисбалансом классов, редкое значение фичи вполне может быть важным для какой-то редкой группы семплов в датасете

От себя добавлю что неплохо работал метод отбора фичей, реализованный в Powershap (https://github.com/predict-idlab/powershap), идея достаточно простая - добавить в датасет несколько рандомных фичей, обучить модель много раз с разными сидами и сделать для каждой фичи t-test что ее shap-value выше, чем у случайных фичей
👍1
#sklearn #wizards

Авторы sklearn не перестают меня удивлять своими решениями.

На этот раз, они поленились проверять дубликаты комбинаций в RandomizedSearchCV, из-за чего на интовых и категориальных гиперпараметрах с низкой кардинальностью он теряет 20-30% времени впустую.

https://github.com/scikit-learn/scikit-learn/issues/29794
😁1
#mlstories

"По сообщению The New York Times, 52-летний музыкант Майкл Смит (Michael Smith) был обвинён в мошенничестве, связанном с манипуляцией стриминговыми сервисами. Как утверждают прокуроры, он использовал нейросети для создания сотен тысяч фальшивых песен, которые затем размещал на популярных платформах, таких как Spotify, Apple Music и Amazon Music. В результате своего мошеннического плана Смит заработал по меньшей мере 10 миллионов долларов, подделывая роялти и обманывая слушателей, которых на самом деле не существовало.

Схема Смита была тщательно продумана. Он создал тысячи фальшивых аккаунтов для стриминга, купив электронные адреса на онлайн-площадках. Имея до 10 000 таких аккаунтов он, в виду трудоёмкости процесса, привлёк других пользователей (соучастников) для оплачиваемой помощи в их создании. Смит также разработал программное обеспечение для многократного воспроизведения своих песен с разных компьютеров, создавая видимость, что за музыкой следят реальные слушатели. В 2017 году, по данным прокуроров, он рассчитал, что сможет стримить свои треки 661 440 раз в день, что обеспечивало ему доход более $3000 в день.

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

По состоянию на июнь 2019 года Смит зарабатывал около 110 000 долларов в месяц, часть из которых уходила его соучастникам. В одном из своих писем в феврале этого года он похвалился, что достиг 4 миллиардов стримов и 12 миллионов долларов в виде роялти с 2019 года."

https://3dnews.ru/1110553/neyroseti-pomogli-muzikantu-obmanom-zarabotat-10-mln-na-strimingovih-servisah
Forwarded from Data notes
Сервис, позволяющий оценить, насколько Ваше cv мэтчится под конкретную вакансию:

https://cvwolf.com/
Forwarded from Data notes
Forwarded from Data notes
The second edition of "The Theory and Practice of Enterprise AI" has been released! You can now download the free PDF version from the book's website, and the hardcopy is available for purchase on Amazon.
Free PDF: https://lnkd.in/gjBv3DM7
Forwarded from Data notes
Позвали пособесить двух ребят на позиции DS в нигерийский банк. Да, там у них это тоже есть :) Открываю резюме первого, написано все довольно неплохо, заявлено 6 лет релевантного опыта (почти как у меня), линкедин профиль пафосный с кучей контактов и активностей, много разного на гитхабе (правда, код не посмотрел, а зря, как потом выяснилось) думаю, интересно будет поговорить. На деле оказалось, что из 6 лет опыта там только 2-3, про проекты рассказать подробнее, чем описано в резюме, не смог , а когда стали спрашивать по технике что-то вроде "как строится ROC кривая и какой смысл у площади под ней) парень не стесняясь включенной камеры стал вбивать вопросы в гугл/чатЖПТ и зачитывать ответы...задачку на кодинг решил не давать. Ну ладно, разные люди бывают, подумал я и подключился к звонку со следующим кандидатом. Но чуда не случилсоь и второй коллега вел себя абсолютно аналогично.

Спрашиваю нанимающего менеджера, как так, на что они расчитывают, ну допустим ты как-то незаметно считерил и получил оффер, а как потом работать?) На что он ответил, что уже три года они ищут внутренних кандидатов по требованию руководства (сейчас там в основном внешники из других стран на аналогичных позициях работают), но наняли только одного адекватного человека, все остальные ведут себя примерно так как описано выше:)

Современные технологии позволяют пройти собеседование по видео практически не имея опыта (тут можно пофантазировать, как именно, допустим чел не печатает, а у ему просто кто-то диктует ответ во второй наушник и т.д.) и получить оффер. У индусов вот целая индустрия есть, где за вас сделают все этапы от сочинения несуществующего опыта до прохождения интервью за вас. Особенно это стало актуально сейчас во время возросшей конкуренции. Похоже, что background checking становится одним из наиболее критических этапов найма.
💯2
Forwarded from Data notes
Прочел Credit Risk Scorecards: Developing and Implementing Intelligent Credit Scoring. Несмотря на почтенный возраст (книга вышла в 2005 году), оказалась невероятно полезной для погружения в кредитный скоринг. Поскольку сам сейчас работаю над задачами, связанными со скорингом, в очередной раз убеждаюсь, что основа успеха data based products - это понимание специфики индустрии, и только потом технологии. Для себя узнал много неочевидных фишек, которые специфичны именно для скоринга, которые скорее всего будут упущены, если проектом заниматься без знания этой специфики даже будучи технологическим ниндзя. Этот тренд уже очевиден при поиске работы: приоритет отдается кандидатам с опытом именно в конкретной индустрии, а не тем, у кого в разделе Stack в резюме перечислено больше всего хитроумных названий и аббревиатур.
Designing Machine Learning Systems by Chip Huyen

Machine learning systems are both complex and unique. Complex because they consist of many different components and involve many different stakeholders. Unique because they're data dependent, with data varying wildly from one use case to the next. In this book, you'll learn a holistic approach to designing ML systems that are reliable, scalable, maintainable, and adaptive to changing environments and business requirements.

Author Chip Huyen, co-founder of Claypot AI, considers each design decision--such as how to process and create training data, which features to use, how often to retrain models, and what to monitor--in the context of how it can help your system as a whole achieve its objectives. The iterative framework in this book uses actual case studies backed by ample references.

This book will help you tackle scenarios such as:
- Engineering data and choosing the right metrics to solve a business problem
- Automating the process for continually developing, evaluating, deploying, and updating models
- Developing a monitoring system to quickly detect and address issues your models might encounter in production
- Architecting an ML platform that serves across use cases
- Developing responsible ML systems

Link: https://www.oreilly.com/library/view/designing-machine-learning/9781098107956/

Navigational hashtags: #armknowledgesharing #armbooks
General hashtags: #machinelearningsystemdesign #systemdesign #machinelearning #ml #designingmachinelearningsystems

@data_science_weekly
👍2
Forwarded from Data notes
Пожалуй один из самых полезных курсов, пройденных мной в прошлом году, стал Python 3: Deep Dive от Fred Baptiste. Курс настолько большой, что разбит на 4 отдельных курса на Udemy:

- Python 3: Deep Dive (Part 1 - Functional)
- Python 3: Deep Dive (Part 2 - Iterators, Generators)
- Python 3: Deep Dive (Part 3 - Dictionaries, Sets, JSON)
- Python 3: Deep Dive (Part 4 - OOP)

Сейчас невероятное количество действительно годных курсов по Python именно для начинающих, чего я никак не могу сказать про материалы именно для углубленного изучения. И этот курс именно то, чего я так долго искал, перепробовав и забросив в начале пути достаточно много других материалов. Прелесть этого курса в том, что в нем нет упора на какую-либо конкретную область применения или бибиотеки, вместо этого идет подробный разбор по косточкам именно стандартных конструкций и объектов языка + части стандартной библиотеки, что мне помогло ответить на огромное количество вопросов, которые были для меня белыми пятнами до этого. Наконец-то у меня создалась некая целостная картина о том, как (и почему именно так!) устроены основные типы данных, функции, декораторы, генераторы, классы, модули. Есть практические занятия с подробным разбором решений.

Могу уверенно сказать, что курс полностью закрывает все вопросы (за исключением, пожалуй, асинхронщины) с интервью на middle+/senior Data Scientist по устройству Python (проверено лично и неоднократно)

Ну и бонусом для занимающихся data science будет то, что все лекции и демо проводятся в старом добром Jupyter Notebook :)
1
Forwarded from Data notes
Насущная проблема инвесторов из РФ: лимит на продажу заблокированных активов 100 тысяч рублей, превышать который нельзя. Если таковых на бОльшую сумму, то возникает вопрос, какие активы продать, чтобы использовать лимит по-максимуму? С ответом поможет линейное программирование!

from ortools.linear_solver import pywraplp

def maximize_spending(L, prices, stock):
# Create a linear solver object
solver = pywraplp.Solver.CreateSolver('SCIP')

# Define variables
quantities = [solver.IntVar(0, stock[i], f'quantity_{i}') for i in range(len(prices))]

# Define objective function: maximize the total spending
objective = solver.Objective()
for i in range(len(prices)):
objective.SetCoefficient(quantities[i], prices[i])
objective.SetMaximization()

# Add constraint: total spending should not exceed the limit M
constraint_total_spending = solver.Constraint(0, L)
for i in range(len(prices)):
constraint_total_spending.SetCoefficient(quantities[i], prices[i])

# Solve the problem
status = solver.Solve()

if status == pywraplp.Solver.OPTIMAL:
total_spending = sum(quantities[i].solution_value() * prices[i] for i in range(len(prices)))
items_quantities = {f'I{i+1}': int(quantities[i].solution_value()) for i in range(len(prices))}
return total_spending, items_quantities
else:
return None


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

# Money limit
L = 100000

# Prices of items I1, I2, I3, I4
prices = [709.18, 11851.10, 1528.21, 9395.44]

# Quantities of items in stock Q1, Q2, Q3, Q4
stock = [17, 4, 19, 12]

total_spending, items_quantities = maximize_spending(L, prices, stock)

if total_spending is not None:
print("Maximum spending:", total_spending)
print("Items quantities:", items_quantities)
else:
print("No solution found.")