Архив недели @AndLukyane
Воскресенье
Привет!
Это первая неделя коллективного твиттера DS. На этой неделе с вами Андрей Лукьяненко (@AndLukyane), мастер соревнований на Kaggle и грандмастер в двух других категориях.
Поскольку это первая неделя, то большая часть контента будет посвящена карьере и саморазвитию.
Примерный список тем на неделю (если будут запросы, то может измениться):
Общие советы по карьере
Нетворкинг и сообщества
Личный бренд
Книги: для развития и для удовольствия
Hard vs soft skills
Чистый ml - существует ли?
Kaggle
Понедельник
Для начала совсем кратко о себе, чтобы можно было понимать мой background. Образование экономическое. ~4 года проработал аналитиком/консультантом на внедрении ERP-систем (Галактика, SAP) в нескольких консалтинговых компаниях. В свободное от работы время изучал иностранные языки.
Понял, что консалтинг не для меня, после долгих раздумий решил стать DS, это было в 2016 году. Уволился и стал ботать, ушло ~8 месяцев на изучение необходимого чтобы найти первую работу в DS.
Дальше постепенно дорос до сеньора, участвую в волонтерских проектах, начинаю делать контрибьют в open source, участвую в ml соревнованиях (достиг успехов на Kaggle), выступаю и понемногу участвую в организации мероприятий от ods.ai.
Теперь перейдём к теме дня: карьера.
О начале и развитии карьеры написаны тонны книг и блогпостов, записано множество видеороликов и вообще полно материала. Но при этом эти вопросы всё равно остаются актуальными и востребованными.
Сложно быть оригинальным, так что побуду капитаном Очевидность, но при этом постараюсь написать и от себя. Думаю, что многие видели диаграммы венна с тремя основными сферами знаний для DS: математика/статистика, программирование, доменная экспертиза/понимание бизнеса.
Если не видели, то вот один из примеров: i.pinimg.com/originals/6a/e…
Лично мне больше нравится вот такая схема: miro.medium.com/max/775/1*bgvR… (источник: events.yandex.ru/events/ds/21-o…)
С одной стороны, идеальный DS находится в середине треугольника и умеет всё. С другой стороны, сложно быть профессионалом во всех трех направлениях, да и не всем это интересно.
Кто-то предпочитает общаться с людьми, кто-то предпочитает тренировать модельки, кто-то акцентируется на написании качественного кода, полно и других вариантов.
Дальше попробуем разобраться как стать и быть хорошим data scientist.
Во-первых, важно понимать, что направление DS не появилось из ниоткуда несколько лет назад. Было много людей, которые занимались тем же самым, просто назывались по-другому. Но аналитика существовала давно, прогнозирование тоже, даже нейронные сети использовались на практике.
Понятно, что тогда это имело другие масштабы, другие инструменты, другие названия, но всё это существовало.
А вот хайп и известность появились лишь недавно.
Кстати, стоит помнить, что машинное обучение - не панацея. В эту тему мне нравится статья: thinkgrowth.org/the-startup-fo…
Многим компаниям даже простая аналитика принесет большую пользу. Да и компании могут быть не готовы к внедрению ML: недостаток данных, отсутствие инфраструктуры и многое другое.
Интересно, что за последние пару лет появилось много крутых курсов и прочих способов получения информации. Ещё года 3 назад было довольно грустно в этом плане: были крутые книги (например Бишоп), был отличный курс от Andrew NG, были лекции Воронцова и специализация Яндекса и МФТИ
Были, конечно, и другие варианты, но маловато.
Помню как я после прослушивания курса Andrew NG полез на каггл, поигрался с соревнованием по титанику, пошёл на собеседования и осознал, что этого недостаточно. Стал изучать ML по блогпостам, потом прошёл специализацию от Яндекса
А сейчас материалов просто море и на любой вкус. От бесплатных (mlcourse.ai) до платных (типа курсов от Нетологии). И возникает уже проблема того, что выбор слишком большой и не знаешь с чего начать.
Пожалуй я дам несколько советов для начинающих. Их я писал в этом блогпосте, и они остаются актуальными: towardsdatascience.com/a-long-term-da…
Уметь писать код надо, без этого никуда. Python/R - выбирайте, пожалуй это основные языки для начинающих, и в последние годы Python доминирует. Потратьте время на это, оно окупится.
Изначально я думал, что это несложно, но со временем вижу много людей пишущих жуткий код, как в плане читабельности, так и производительности. Так что надо вложиться в это.
Курсы по ML - всё-таки необходимость. Ибо встречаю людей, которые не слышали о валидации, пробуют измерять качество регрессии метрикой accuracy и делают другие ужасы. Не надо так, это грустно.
SQL. От него никуда не деться. Не, если вы работаете с нейронками, то скорее всего это будет лишним. Однако, большинство компаний работает с табличными данными и без SQL никуда. Поверьте, это не страшно. За неделю можно изучить SQL до достаточного для работы уровня.
Грустный совет, но стоит тратить время на пет-проекты или другую активность. В настоящее время существует огромное количество желающих поработать в DS. Пет-проект или приличный github сильно поднимут шансы найти работу.
Но это всё были технические навыки. Помимо этого важны и другие вещи. Первое - soft-skill. Об этом я буду писать отдельно, но хочется сразу сказать: soft-skill это не какая-то магия, и это не "бредовые хотелки работодателей".
По работе нам всем надо контактировать с людьми, и надо уметь это делать, это просто один из аспектов работы.
Второе - готовность к постоянному изучению нового. В принципе это релевантно для любой работы, но в DS особенно актуально. Если вы только начинаете изучать DS, то перед вами огромное количество информации и навыков которые надо освоить.
Если вы опытный, то всё равно полезно следить за новыми трендами.
И как отдельное - надо иметь мозги в голове и уметь их применять. Если вы не умеете гуглить или не готовы думать и размышлять над сложными вопросами, то успеха достичь будет нереально.
А дальше - стандартное для любой IT-работы (да и не только IT): тайм-менеджмент, ответственность, адекватность и всё остальное.
И вот крутая статья с советами по карьере в целом: thehftguy.com/2017/01/23/car…
Есть отдельная тема про чистый ML, но надо сказать сразу: многие начинающие DS (и я, когда был в этой шкуре) думают, что основная работа будет заключаться в обучении моделек. Увы, это не так.
Если вы не попали в какую-то R&D команду, то скорее всего "чистый ml" будет занимать меньше 20%, а то и 10% от всего времени.
Часто люди спрашивают: мне 25-30-40 лет, я программист-аналитик-менеджер-химик-кто угодно, могу ли я перейти в DS? Ответ всегда один: можно, но зависит много от чего.
Если вы никогда не писали код, не занимались аналитикой, забыли математику, имеете семью и живете в маленьком городе - естественно будет очень сложно. Смена профессии - всегда означает большие траты (времени, денег, других ресурсов), возможно краткосрочное понижение уровня дохода
Но если вы готовы вкладываться, то стоит использовать свой старый опыт как нечто бонусное. Есть опыт программирования - значит умеете писать код, есть знания математики/статистики - будет проще осваивать ML и так далее.
Даже просто сам по себе опыт работе в какой-то сфере это плюс, ибо означает наличие доменных знаний.
Теперь о пет-проектах, самообразовании и прочем.
Первым делом хочется сказать: всё это необязательно. Никто не требует, чтобы вы всё свободное время посвящали ml-соревнованиям и каким-то проектам. У каждого есть своя жизнь и интересы.
У вас могут быть интересные проекты на работе которые развивают скилы, может быть компания проводит курсы или даёт возможность что-то изучать в свободное время, может быть в трудовом договоре прописано, что компания получает право на всё сделанное вами в свободное время.
Может быть вы уже довольны своим уровнем развития. Это отлично!
Однако, надо понимать, что наличие дополнительных ачивок (соревнования, пет-проекты, open source) само по себе развивает ваши скилы так, как их невозможно развить на работе, и усиливает вашу позицию.
Если вы чем-то круче других кандидатов, это помогает получать зарплату повыше, проекты поинтереснее, компании получше и так далее.
Ещё один момент, о котором хотелось бы сказать:
Компании часто не понимают, зачем из data scientist-ы, и, в свою очередь, ожидания DS от работы часто не совпадают с реальностью.
Для компании нанять первого ds сложнее всего, как минимум потому, что сложно оценивать экспертизу человека и пользу от найма. Одной из первых задач может быть необходимость в целом разобраться в том, какие данные есть в компании, что нужно сделать и что можно сделать.
Чем больше технических людей, чем больше развита экспертиза в компании и чем больше людей понимают пользу от аналитики и DS, тем проще будет дальше.
И чем менее опытен DS, тем меньше он понимает как реально принести пользу компании (впрочем, это относится и к менеджерам).
Поделюсь двумя ссылками: blog.mldb.ai/blog/posts/201… и habr.com/ru/company/ods…
Тут правда есть ещё один аспект. Возможно для компании на текущем этапе развития достаточно аналитики и базовых sql-запросов для получения большой выгоды (low hanging fruits) и понадобится пару лет, чтобы перейти к машинному обучению.
С одной стороны, работая над этими задачами ты будешь приносить настоящий business value. С другой стороны, это грустно - ты потратил месяцы на изучение программирования и машинного обучения, а это всё не пригождается. Что делать? Ответ на этот вопрос каждый должен искать сам.
Написанное выше было местами грустно, так что хочется сменить настроение на более позитивное. Data Science - это офигенно.
В этой сфере полно интересных задач на любой вкус, есть множество инструментов, которые можно использовать: можно использовать проверенные и работающие решения, может делать что-то cutting-edge; есть офигенные задачи с табличками прикладного характера.
Есть возможность поработать с графами, с нейронными сетями и многим другим. Очень много крутых и умных людей вокруг, которые мотивируют развиваться. Большой потенциал развития сферы в целом.
Потрясающее сообщество ods.ai, аналогов которому в других сферах практически нет. Если вам повезло работать над проектами с супер новыми решениями, то есть шансы, что вы сделаете что-то новое и крутое, что будет использоваться по миру.
Если вам повезло работать над прикладными проектами, то вы можете увидеть, как ML генерит реальные деньги.
Вторник
Я считаю, что нетворкинг - это очень важно как для карьеры, так и в целом для жизни. И ods.ai является крутым сообществом, которое дает широкие возможности нетворкинга (не считая всего другого), но пока речь не об этом.
Для начала история из жизни.
Как я уже писал, после вуза я работал в консалтинге на внедрении ERP-систем. Первым местом работы была небольшая компания (< 15 человек). Потом работал в крупном консалтинге, но 99% времени проводил на территории заказчика вместе с командой.
Последнее место - небольшая компания, базирующаяся в Сколково. Думаю, что внутри компании за все время я пообщался лишь с парой десятков людей.
К чему я всё это?
К тому, что пока я работал в этих компаниях, я общался только с коллегами (ну и заказчиками, естественно).
Внешние мероприятия не посещал, да их особо и не было. (дополнительно влияла моя стеснительность и замкнутость, но это уже совсем другой вопрос)
В результате ты живёшь внутри этого тесного круга и даже не знаешь, что может быть по-другому.
Конечно, можно читать статьи в интернете, смотреть видео-ролики и развиваться другими способами... но, во-первых, в этой сфере было не так много подобных материалов, во-вторых, когда коллеги особо не говорят о других способах получения информации, ты особо и не думаешь о них.
А затем я сменил сферу работы и вступил в ods. Оказалось, что существует большое профессиональное сообщество, множество мероприятий, обмен знаниями и многое другое. И это замечательно.
Нетворкинг - очень полезная штука. Как минимум он открывает глаза на многое, так сказать "а что, так можно было?". Узнаешь, что какие-то процессы в компании не очень хорошие, а какие-то, наоборот, отличные.
Узнаешь о новых штуках, которые могут реально упростить/улучшить работу (это польза не только для людей, но и для компаний). Можно найти работу или, наоборот, пригласить людей поработать в твоей команде. Можно познакомиться с новыми людьми и поддержать контакты со знакомыми.
Можно обсудить насущные темы и позадавать вопросы докладчикам. Всё это отлично помогает развитию карьеры. Если есть возможность выступить - выступайте. Это прекрасная возможность рассказать о себе и завести новые знакомства.
Если говорить про профессиональные сообщества, то их много, на любой вкус и цвет. Кто-то обитает в телеграме, кто-то в слаке, кто-то на форумах. С одной стороны, стоит присоединиться к нескольким для расширения кругозора, но не стоит пытаться охватить необъятное.
Можно просто утонуть в общении без какой-либо пользы.
ods.ai - самое крупное русскоязычное сообщество DS (впрочем, возможно и самое крупное в мире, если не считать форумов типа reddit), обитает в slack.
Уникально как минимум тем, что вся история сообщений сохраняется (а их уже больше 5 млн) и можно найти информацию почти на любую около-ds тему. Есть десятки каналов: про карьеру и работу, по языкам программирования, по различным сферам и направлениям ds, по ml-соревнованиям.
Для общения людей в разных странах и организации митапов и про многое другое.
Был организовал курс mlcourse.ai, были (и есть) волонтерские проекты, организуются самые разные активности - от работы над пет-проектами до крупных конференций, например data fest.
Существует фирменный мерч, организуются ml-соревнования и происходит много всего другого.
Для меня ods давно стал частью жизни и я не знаю чего бы мне удалось достичь без него.
Отдельно стоит отметить, что нетворкинг - не только личное общение, но и соцсети. LinkedIn, Facebook, Twitter, даже Instagram. Стоит быть активным хотя бы в одной соцсети и постепенно расширять круг контактов.
Это позволяет делать примерно тоже самое, что и обычный нетворкинг, но с намного большим кругом людей.
От нетворкинга не мероприятиях есть ещё один интересный бонус. Если много сидеть в соцсетях, то может начать казаться, что все вокруг крутые, а ты - никто. Одни публикуют научные статьи, другие успешно запускают продукты, третьи побеждаю на соревнованиях, четвертые выступают.
И ты сидишь такой и думаешь - как же они все успевают. Общение на мероприятиях позволяет бороться с такими мыслями. Можно поговорить с этими самыми людьми и увидеть, что у них тоже проблемы, фейлы, множество заброшенных активностей.
Можно пообщаться с другими людьми и понять, что вокруг вполне нормальные люди. Что-то получается, что-то нет. В итоге выдыхаешь и живешь спокойнее.
Среда
Если загуглить "личный бренд", можно найти множество статей с советами о том как продвигать себя, находить аудиторию и так далее. Если интересно - можно почитать, это будет полезно, но я хотел писать не об этом.
Для меня личный бренд - немного другое. В первую очередь это реальные успехи и достижения, и потом уже самопиар (и при этом пиар важен). Об этом хорошо сказано в книге Rise (amazon.com/Rise-Practical…)
Ещё одна история про себя.
За первый год моей карьеры в DS я поработал в трех компаниях (причины смены работы - совсем другая история), прошёл кучу разных курсов, поделал пет-проекты, начал более или менее активно писать в ods. За этот год меня уже начали узнавать.
Для меня показательным было следующее: на каггле организовали соревнование, надо было написать тетрадки с анализом данных, авторы с наибольшим количеством лайков получали призы. Я рекламировал свою работу везде, где мог, в итоге попал на 2 место и получил приз.
Если бы меня никто не знал, скорее всего был бы фейл и неважно насколько хорошо или плохо был сделан сам анализ.
После некоторого времени я пришёл к такой идее: если ты сделал что-то офигенное и крутое, но об этом никто не узнал, то польза будет минимальной.
А если ты делаешь крутые вещи, и о тебе знают, то пользы будет на порядок больше. Эта мысль вряд ли оригинальная, но я её прочувствовал на своей шкуре.
Теперь собственно про бренд. Я как-то не задумывался о создании образа и целенаправленном продвижении. Обычно для меня это выглядело так: я что-то сделал, теперь хочу получить feedback - для этого надо показать сделанное людям.
Или: у меня есть планы, хотелось бы их обсудить с другими людьми, может я о чём-то не подумал. Ну и лучшее: я успешно что-то сделал, надо поделиться этим. Об этом хорошо рассказал ternaus (Владимир Игловиков) в своём выступлении на Data Fest² Minsk 2018 youtu.be/v6Wv01GJQnI?t=…
Я знаю, что многие люди стесняются пиарить себя, говорить о своих успехах, выступать с докладами. Я не призываю писать в соцсетях каждый день, без конца напоминать о себе без повода. Но сообщать миру о своих успехах стоит.
Считайте сделанное дело и рассказ о нём двумя частями единого целого. И если вы совсем не любите пиар, то посмотрите на ситуацию с другой точки зрения: вы сделали что-то крутое, вам было интересно это сделать и вы гордитесь результатами.
Наверняка это будет кому-то полезно и интересно, так поделитесь своими знаниями и помогите другим людям!
Теперь немного конкретики. По моему мнению личный бренд состоит из двух частей: что знают о вас и сколько людей это знают.
Поэтому надо быть консистентными в действиях, хранить репутацию (может быть как хорошей, так и плохой) и постепенно наращивать круг людей, которые слышат о вас. Соцсети, блогпосты, выступления - всё что угодно.
Наверное стоит поговорить и о пользе, а то люди не всегда понимают, зачем всё это делать. Самое банальное: найти новую работу; если вы известны, то у вас растут шансы. Причём тут играет роль не только сама известность, но и суть известности.
Мы ведь знаем, что нередко одним из важных критериев при приёме/поиске сотрудников является cultural fit. Если вы имеете некую известность, то компаниям проще решить насколько вы соответствуете их стандартам. Это же относится и к повышениям внутри компании.
Кроме того, если вы являетесь известным экспертом в какой-то области, то вам будут ставить меньше барьеров, будет легче продвигать решения. Особенно это актуально для крупных компаний.
Ещё развитый личный бренд позволяет проще находить единомышленников - людей, которые интересуются тем же, что и вы. И в целом открывает новые двери.
Четверг
Человечество за время своего существования написало миллионы книг. Сущестует огромное количество жанров - на любой вкус. В последние годы я обычно читаю книги по саморазвитию, для получения каких-либо технических знаний и фентези/фантастику.
Факт из жизни: когда я учился в школе, я прилежно делал то, что нам задавали. Так что в результате я прочитал 95% школьной литературы, которую задавали на лето или во время учебы.
И я 3 раза прочитал "Войну и мир". В полном варианте.
В первый раз - летом, по списку для чтения. Второй раз - для учебы: у нас была отличная преподавательница литературы и довольно требовательная. По многим книгам у нас были длительные обсуждения, а по "Войне и Мир" в частности, надо было отвечать на много вопросов по каждой книге.
В итоге мне было проще перечитать все, чем искать ответы на отдельные вопросы. Ну и в третий раз читал перед выпускными/вступительными экзаменами - для сочинения.
Думаю, что никогда больше не буду читать это :))
Книг для получения технических навыков я читал мало. Для изучения питона я проработал "Automate the Boring Stuff with Python" и был доволен, но после этого было может 1-2 книги и все.
Мне кажется, что такие книги могут быть полезными в двух случаях: когда они дают мощные фундаментальные знания и когда содержат уникальные практические идеи, которые не получить другим способом.
Есть немало хороших книг из первой группы по DS: Pattern Recognition and Machine Learning, Elements of Statistical Learning и другие.
Но я их не осилил, да и не уверен в том, что они принесут ощутимую пользу в наше время - большая часть материала может быть получена на курсах или из других источников. И скорее всего это будет в более понятном виде.
Но это лично мой опыт - я встречал немало людей, для которых эти книги были полезны.
Вторая группа книг - это книги от топовых людей в DS которые делятся практическим опытом. Но тут есть нюанс в том, что обычно большинство описанных подходов, техник и трюков уже доступны и известны
С другой стороны, такие книги удобны тем, кто не любит собирать информацию мелкими кусочками из интернета.
Книг для саморазвития очень много. О них трубят со всех сторон и убеждают, что эти книги изменят жизнь к лучшему, стоит только их прочитать. Ну, я прочитал немало таких книг и понял, что большиство имеет минимальную пользу.
Некоторые релевантны только для людей на управляющих позициях (ибо постоянно предлагают делегировать дела), другие полезны, но переполнены водой, третьи дают не особо подходящие советы.
Как было сказано на баше : Все книги по самосовершенствованию, GTD, мотивации, тайм-менеджменту и прочему сводятся к тому, что человек из Беверли-Хиллз советует человеку в Магадане выйти из зоны комфорта. (bash.im/quote/435963)
Тем не менее были книги, которые произвели на меня впечатление, кратко поговорю о нескольких из них. Возможно будет полезно.
Thinking fast and slow. Это отличная книга о двух типах мышления человека: инстинктивном и логическом. Весьма интересно написано и может быть полезно для понимания того, как мы принимаем решения.
В качестве продолжения - Джедайские Хроники. Можно воспринимать как в некоторой степени продолжение предыдущей книги. Только она сфокусирована на прикладных аспектах и дает советы о том, как быть продуктивным.
Deep Work. Это прекрасная книга о том, что если нужно сделать что-то творческое и сложное, то лучше уединиться, избавиться от любых раздражающих факторов и посвятить работе большой и непрерывный кусок времени. Это реально эффективно, я делал так раньше и продолжаю делать сейчас.
Ну и теперь художественная литература. Я прочитал сотни книг в жанре фентези/фантастики и продолжаю читать. Это интересно, позволяет посмотреть на мир другими глазами, пережить самые разнообразные события и просто забыть о реальном мире.
Один из дополнительных бонусов - прокачивание знания иностранного языка. Одни из первых больших книг, которые я читал на английском, были 5-7 книги про Гарри Поттера. Это было тяжело, бывало по нескольки незнакомых слов в каждом предложении. Но постепенно становилось легче.
Потом я прочитал все вышедшие на тот момент книги "Игры Престолов" (это был примерно 2012 год). Следующей длинной серией были "Хроники Амбера". В целом это было достаточно, чтобы дальше читать практически свободно.
Перечислить все впечатлившие меня книги я, конечно не могу, поэтому поговорю лишь о тех, которые читал в последние годы.
Из отечественной фантастики хотелось бы отметить Алексея Пехова, Виталия Зыкова и Алексея Коша. Читал все или почти все их книги и всегда получал удовольствие. Отдельно хотелось бы отметить "Пересмешник" Пехова - это книга с хорошо прописанным миром и интересными героями.
Думаю, что почти все читали Гарри Поттера. А теперь представьте, что главный герой старше, магия все также скрывается от остального мира, сам мир более жесток и печален, система магии прописана лучше.
Это тот мир, в котором живет Harry Dresden. У книг, да и у главного героя много недостатков, но для меня достоинства значительно перевешивают минусы. Наверное, самое интересное для меня - смотреть как герой меняется от книги к книге, взрослеет, принимает более адекватные решения
Если говорить о мире Гарри Поттера, то стоит упомянуть Harry Potter and the Methods of Rationality - это прекрасный fanfiction, где, как следует из названия, герой рационален и смотрит на мир с научной точки зрения.
Местами это переходит адекватные границы, но в целом произведение очень хорошее и заставляет задуматься о многих вещах.
Кстати, когда-то давно я и не думал читать fanfiction - думал, что это мелкие рассказики с низким качеством. Как же я ошибался. Точнее, конечно, есть много мусора, но бывают и произведения, которые утрут нос многим известным книгам.
Например, я читал "Victory at Ostagar" - фанфик по игре Dragon Age: Origins, в которой главная героиня успела подать сигнал и Логейн спас Кайлана. В сумме более 1 миллиона слов.
Если говорить про такие произведения, которые не являюся книгами, я хотел бы отметить веб-новеллу The Wandering Inn. Автор рассказывают историю, где люди с Земли попадают в фентезийный мир, в котором сущестуют уровни, классы и прочее.
Суммарный размер уже превысил несколько миллионов слов и история продолжается. Для меня это в самом топе моих любимых книг.
Ещё мне нравятся книги indie-авторов. Выделю пожалуй одного - Will Wight и серия Cradle. Это книга западного автора в стиле xianxia. Отличные книги с упором на развитие персонажей. Много героев с хорошо прописанными характерами.
Если говорить про "серьёзное" фентези, то тут для меня самый любимый автор - Brandon Sanderson. Его отдельный рассказ Emperor's Soul просто прекрасен - не смотря на его небольшой размер, мы видим интересный мир и запоминающихся героев.
Да и остальные книги/серии во вселенной Cosmere очень хороши: Elantris, Mistborn, Stormlight Archive.
Чтобы исправить опечатку в названии книги в одном из твитов:
"Джедайские Техники" Максима Дорофеева (и ее продолжение - "Путь джедая"). Можно воспринимать как в некоторой степени продолжение книги "Thinking Fast and Slow".
Фокус на прикладных аспектах, даёт много адекватных советов о том, как быть продуктивным в работе и в жизни. Одна из ключевых идей для меня (впрочем, я это делал и раньше) - дробление задач на как можно более мелкие подзадачи. Это уменьшает желание прокрастинировать.
Пятница
В практически любой технической профессии в начале карьеры необходимо делать упор на hard skills, ибо в этом и заключается суть работы. Но со временем soft skills играют все большую и большую роль, и не всегда люди начинают прокачивать эти навыки вовремя.
Я не пытаюсь приуменьшить важность технических навыков - они являются основой и сутью нашей работы. И если они отсутствуют, то на soft skills не выехать.
Конечно, есть случаи, когда люди косячат и отбалтываются, перекидывают на других свою работу, а потом говорят, что это результат их труда или любыми другими способами скрывают отсутствие необходимых профессиональных навыков - но не будем сейчас об этом.
Я считаю, что и hard, и soft навыки очень важны. И для всех них стоит придерживаться принципа T-shaped skills. Суть этого принципа заключается в том, что стоит иметь широкую экпертизу и глубокие знания в конкретных областях. Это особенно актуально для технических навыков.
Можно за неделю научиться писать SQL, а потом при желании углубляться в оптимизацию запросов. Можно за пару дней научиться пользоваться докером или git, за несколько дней освоить использование базовых вещей в новом фреймворке,
за несколько часов овладеть новой идеей feature engineering, за час прочитать какую-нибудь статью на arxiv. Ну а при необходимости можно изучать это глубже.
Но тут ещё есть один аспект - изучать новые вещи можно, но не всегда нужно или интересно. То есть теоретически можно иметь базовые знания в ml, frontend, backend, devops и так далее, но в результате может оказаться, что прийдётся делать мелкие задачки во всех этих направлениях.
А это не дает особой пользы и погружает в пучину бесконечных коротких задач.
Меня спросили про случаи/проекты, которые сильно прокачали мои hard skill.
У меня таких проектов/ситуаций было несколько.
Самое яркое и до сих пор актуальное:
habr.com/ru/company/ods…
Весной-летом 2017 года я работал джуном в банке, но хотелось чего-то большего.
В свободное время проходил cs231n, осилил половину, дальше решил не идти (тогда tensorflow и pytorch были молодыми и имели страшноватый api). На всякий случай мой background на тот момент: самостоятельно изученный python, базовые знания в веб-разработке, немного ML.
То есть опыта разработки продуктов не было.
А по итогам cs231n предлагалось сделать какой-нибудь проект. Я не был готов делать исследование, но хотелось бы запилить что-то крутое. Описание этого можно увидеть по ссылке выше.
Это сайт, где можно нарисовать цифру, и две модельки попробуют её распознать. FNN на numpy и CNN на TF. И кроме того, эти модельки дообучаются на нарисованных цифрах.
То есть я самостоятельно собирал (то есть рисовал) данные, сделал хранение на amazon s3 и разобрался, как работать с либой boto. Сделал прилично выглядящий сайт и прикрутил Flask. Организовал хранение и использование моделей так, чтобы они могли дообучаться.
И даже сделал аугментацию картинок на numpy. И это даже работает на смартфонах
На всё это ушло месяца два, но я сделал проект от начала и до конца сам и научился делать много всего.
Правда потом, через 1-2 года я обновил версию tensorflow в проекте и он стал иногда убивать веса моделей, так что проект уже подключивает. Поэтому я сделал новую версию, на Pytorch. На это ушло меньше недели: github.com/Erlemar/digit-…
Кстати, этот проект до сих пор впечатляет людей, когда я показываю его.
Были и другие ситуации, но менее интересные: когда надо было несколько раз настраивать удаленную машинку для deep learning и надо было научиться этому.
Когда меня в первый раз посадили на linux и надо было во всем разбираться, ну и конечно каггл. Но о каггле будет в воскресенье. Отдельно хочется отметить ситуацию, когда я решил сделать contribution в albumentations и в первый раз столкнулся с проектом с серьёзными тестами, ci/cd
И да, я активно продолжаю прокачивать свои навыки.
Теперь хотелось бы немного поговорить о soft skills.
Их очень много, они разные и многими из них так просто не овладеть (прям как hard skills, правда?) Какие-то релевантны больше для технических людей, какие-то тем, кто организует работу других людей.
Как минимум нужно уметь коммуницировать/общаться с людьми: надо уметь слушать и понимать чужие точки зрения, уметь излагать свою позицию так, чтобы это было понятно конкретному собеседнику, вести диалог, убеждать и приходить к результату.
Как следующий шаг - хорошо бы уметь выступать, делать презентации и доносить свои идеи до широкого круга людей.
Хорошо брать за себя ответственность за задачи и доводить их до завершения. Иметь хорошую деловую этику.
Отдельно стоит группа навыков, которая в какой-то степени является врождённой, но всё же может быть развита: критическое мышление, харизма, гибкость, умение быстро принимать решения.
Для сеньорских позиций и выше нужно уметь быть лидером, вести и вдохновлять людей.
Список soft skills очень большой и, естественно, не нужно стараться овладеть всеми, но стоит научиться многим из них, поскольку без них далеко не уйдешь.
И напоследок на сегодня: мой любимый совет о том, как прокачать любой навык:
Суббота
Сегодня я буду писать о том, можно ли заниматься чистым ML на работе. Сразу спойлер: если вы не супер крутой исследователь в R&D отделе или универстите, то такого не будет. Впрочем, даже в таких крутых местах невозможно 100% времени заниматься чистым ML.
С другой стороны, доля времени, уходящего на ML, может расти со временем, если приложить к этому усилия.
Есть несколько причин того, почему ML не занимает большую часть работы.
Во-первых, не очень понятно, что вообще такое "чистый ML". Взять табличные данные, пробовать тренировать разные модели и тюнить гиперпараметры?
Это можно автоматизировать, к тому же feature engineering даст значительно больший прирост метрик, чем тюнинг параметров. Можно ли считать feature engineering "чистым ML"? А если его приходится делать на SQL? :)
Вот есть вы занимаетесь чем-то выходящим за рамки табличных данных - тексты, изображения/видео, звук, то скорее всего понадобится экспериментировать с разными моделями, читать статьи и пробовать разные подходы.
Но при этом скорее всего основной проблемой будет наличие и качество разметки - если с этим проблемы, то никакие супер-современные нейронки не вытянут.
Во-вторых, надо понимать, что ML не существует сам по себе. Вот известная схема на эту тему.
И это лишь инфраструктурная часть. По факту, вначале нужно найти/получить задачу, сформулировать её и перевести на язык ML, собрать данные и обработать их.
Потом уже ML. А дальше защита проекта и вывод в production. Есть ещё много-много шагов вокруг этого: споры с теми, кто не хочет автоматизации их работы, a/b тесты, переписывание кода в приличный вид, оптимизация скорости и многое другое.
Нельзя забывать о том, что у проектов всегда есть какая-то цель. Если цель - сделать проект и получить прибыль от него, то скорее всего будет невыгодно тратить недели на то, чтобы увеличить метрику на пару процентов.
Наконец, надо помнить, что никто не работает в вакууме - надо ещё ходить на встречи, договариваться с заказчиками, договариваться с руководством, коллегами и подчиненными, использовать те самые soft skill, о которых я писал ранее.
И вообще делать много всего другого напрямую не связанного с работой над проектами.
Но теперь давайте о позитивном.
В конечном итоге все хотят, чтобы ML давал максимально хорошие результаты, поэтому если вы в адекватные сроки можете использовать трюки, которые улучшат результат и не слишком сильно усложнят использование модели, все будут только рады.
Поэтому есть свобода действий.
В том же самом feature engineering на табличных данных есть множество интересных подходов, которые могут быть нетривиальными для тех, кто и них не задумывался.
Например: кодирование циклических переменных (часы, дни, недели и т. д.) с помощью sine and cosine transformation, трансформация категориальных признаков с помощью mean encoding - в этом весьма легко ошибиться и допустить лик, но зато правильное использование дает прирост метрик.
Подсчет разнообразных аггрегированных признаков (статистики по вещественным переменным относительно категориальных) и их разница с оригинальными признаками часто хорошо работает. И есть множество других интересных подходов, которые помогают.
На грани ML и качественного кода может быть написание пайплайнов, которые позволят гибро и удобно менять модули для подготовки данных и тренировки моделей.
Чем больше разных данных появляется, тем больше становится поле для исследований.
Как уже говорилось, для нейронок часта нужна оптимизация для деплоя. Но это вполне может быть частью ML-решения - более легкие сетки, подход teacher-student, distillation и другие трюки.
Ну и при тренировке нейронок есть широкое поле для выбора подходов (если доступные данные позволяют).
И вот тут всплывает польза от каггла. Об этом подробнее я поговорю завтра, но кое-что хочется и сказать и сегодня.
При всех минусах каггла он все же заставляет осваивать самые современные подходы, трюки и другие способы увеличения результата. И многие из них вполне реально применять в реальных рабочих задачах.
Воскресенье
Про kaggle я могу писать много. Для начала, для тех кто не знает: kaggle.com это самая известная платформа для соревнований по машинному обучению. Она существует уже много лет, заработала репутацию и одной из самых известных её фичей является геймификация.
Существует несколько рейтингов - по соревнованиям, по notebooks, по обсуждениям и датасетам. За активность можно получать медали и звания, вплоть до грандмастера.
Есть те, кто любит соревнования на каггле, есть те, кто считает это играми далёкими от реальной жизни. Как обычно, обе позиции в чём-то правы, в чем-то неправы. Сегодня я поделюсь своим мнением о каггле.
Для начала о том, чем является каггл для меня.
Первое знакомство с кагглом для меня было в 2016 году, тогда я попробовал свои силы во всем известном соревновании Titanic, а также в небольшом соревновании, где написал первый публичный кернел: kaggle.com/artgor/eda-and…
В 2017 году практически ничего не делал на каггле, поскольку не было интересно и считал, что не готов участвовать в соревнованиях.
В 2018 начал активничать: писать кернелы, участвовать в соревнованиях, писать на форуме.
В соревнованиях получилось заработать несколько серебряных медалей. И стал понимать, что мне нравится писать кернелы, и это получается хорошо - людям нравится.
Уже тогда стал понемногу задумываться о будущем. Каггл показался хорошим способом показать свои навыки другим людям.
Соревнования казались тяжелыми, поэтому решил развиваться именно в сторону написания кернелов. Это научило делать хорошие визуализации и анализ, быстро въезжать в новые темы, потихоньку писать код в едином стиле и переиспользовать стырый.
Можно сказать, что написание кернелов для меня было схоже с созданием MVP - быстро изучить данные, проанализировать их и построить работающую модель.
В 2019 году удалось получить золотую медаль в соревнованиях и я стал мастером соревнований.
Заодно совсем незаметно стал грандмастером обсуждений. А незадолго до этого (весной) занял первое место в рейтинге кернелов (теперь notebooks) и удерживаю его до сих пор.
Каггл дал мне много опыта и знаний, помог найти новых знакомых и в целом расширил круг общения. Ну и много людей слышали обо мне именно благодаря kaggle.
Перед обсуждением плюсов и минусов хотелось бы уточнить один момент: когда я говорю про плюсы и минусы каггла для людей, я имею ввиду тех, кто проявляет реальную активность и добивается успехов.
Если кто-то скопировал чужой код без изменений и использовал его или пару недель делал рандомные эксперименты и ничего не добился, или просто не имеет ни одной хотя бы медальки, то пользы и быть не может.
Как и в любом деле - тут требуется прикладывать реальные усилия для получения результата.
Теперь предлагаю обсудить пункты по которым критикуют каггл.
Первая критика. Каггл - не реальное машинное обучение.
В жизни надо понять и сформулировать бизнес-проблему, общаться с заказчиком, определить метрику, достать и почистить данные, запустить модель в прод, мониторить качество работающей модели.
Это действительно так. Вот только каггл и не позиционирует себя как аналог всей работы DS.
Это платформа для соревнований, можно сказать, что это как leetcode для программистов. Но уже давно Kaggle - не только платформа для соревнований. Большую роль играет возможность публиковать notebooks для того, чтобы делиться знаниями/навыками/анализом.
Есть форумы, на которых люди делятся информацией. Есть отдельный раздел посвященный датасетам. Уже много раз проводились чисто аналитические соревнования, в которых совсем не было ml.
Вторая критика. В соревнованиях важна только метрика, а в реальной жизни важен размер моделей, оптимизация скорости работы и многое другое. В целом это так, в соревнованиях критерий успеха - наилучшее значение метрики.
Но в последнее время появляется всё больше kernel-only соревнований, где inference делается в четко ограниченным ресурсами и в четко ограниченное время.
Третья критика. Как следствие предыдущего пункта - излишняя геймификация вызывает желание читерить. Увы, это так. На платформе существуют те, кто готовы нарушать правила. С ними борются и банят.
Четвертая критика. Для победы надо тренировать модели часы и дни напролёт, блендить сотни и тысячи моделей, тюнить гиперпараметры и вообще железо главное. Это верно, но есть нюанс. До сих пор время от времени золотые медали получают решения сделанные одной моделью.
И даже когда победители делают блендинг, их отдельные модели могут претендовать на золото или минимум серебро. Железо важно, но это актуально и для жизни
Пятая критика. Соревнования не покрывают все возможные типы задач. Ну да, нельзя объять необъятное.
Шестая критика. Данные уже готовы, ничего не надо с ними делать, да и метрика фиксирована. Не могу с этим согласиться. Feature engineering - ключевое для успеха в табличных соревнованиях. Люди иногда трансформируют не только признаки, но и саму целевую переменную.
Плюс иногда данные даются в неподходящем для моделирования виде, и их надо обрабатывать. И существует целый раздел с датасетами, где можно найти грязные данные.
Кстати, вроде DS постоянно жалуются, что большая часть работы уходит на чистку данных. Но кто-то недоволен тем, что этой чистки данных меньше в соревнованиях? :)
А про метрику... Вот прямо сейчас идёт соревнование, где организаторы изменили метрику по ходу соревнования, ибо оказалось, что первоначальная метрика слишком легко оптимизируется.
Седьмая критика. За победу дают маленькие призы относительно временных затрат. Это да. Сотни и тысячи людей тратят десятки и сотни часов на соревнования. Но никто ж не заставляет.
Восьмая критика. Если ты получил плохой результат в соревновании - это не значит, что плохой data scientist. Да, согласен. Но если построение модели является часть работы, то ведь надо уметь делать это хорошо, правда?
Позитивное:
Первый плюс. Очень быстрое изучение нового и осваивание навыков. Когда ты серьезно участвуешь в соревновании, то приходится рыться в кернелах, на форумах, в статьях и в других местах в поисках нового, а затем быстро использовать это.
Особенно актуально для соревнований с нейронными сетями - ибо их проще переиспользовать в рабочих задачах, чем решения для табличных данных
Второй плюс. Фокус на самом интересном. Многие пришли в DS благодаря интересу к машинному обучению. И соревнования как раз дают шанс заняться именно интересными вещами.
Третий плюс. С каждым соревнованием у вас появляются всё более крутые бейзлайны. После участия в соревновании остаются разнообразные наработки.
Если по работе встретится похожая задача, то можно будет быстро сделать решение, которое скорее всего будет значительно лучше чем если бы у вас не было знаний от соревнования.
Четвертый плюс. При серьезном участии просто приходится выстраивать систему экспериментов, писать работающие пайплайны, долго долбить одну и ту же задачу и так далее. Это полезно и для работы.
Пятый плюс. Каггл - не только соревнования. Повторюсь - на каггле есть датасеты, notebooks, форумы. Они содержат очень много полезной и практической информации. Можно вообще не участвовать в соревнованиях, а заниматься другими активностями
А теперь добавлю критики/ворчания от себя.
Соревнования идут очень неравномерно: то их всего 2-3, то штук 10, то все по CV, то все по разным направлениям. А хочется попробовать всё! >_<
Читеры есть. Причём есть немало тех, кто использует дополнительные аккаунты для набивания лайков. И некоторые делают это на грани легальности так, что их не забанить.
Лично я считаю, что реальные грандмастера каггла - лишь в рейтинге соревнований, а не в других. Поэтому слегка раздражают люди, которые, например, стали грандмастерами обсуждений и заявляют, что они теперь грандмастера каггла.
В соревнованиях с нейронками железо решает, правда. Но даже не для самой тренировки, а потому что позволяет гонять больше экспериментов в единицу времени.
Интерфейc время от времени меняется и не всегда в лучшую сторону.
Кернелы - боль. Большая боль. Каждый, кто пробовал делать сабмиты в последних kernel-only соревнованиях по картинкам, понимает эту боль.
Появляются соревнования по аналитике. Кажется, что это не для каггла, ибо совсем не объективно принимается решение о победителях.
Все больше и больше людей участвует на каггле. И многие крутые люди продолжают участвовать в соревнованиях годами. В итоге с каждым годом все сложнее получать медали в соревнованиях, и все легче в остальных рейтингах.
В целом я очень уважаю каггл и рад, что активен на этой платформе. Единственное большое сожаление заключается в том, что стоило бы начинать раньше.
На этом моя неделя в этом твиттере заканчивается, надеюсь всем было интересно. Передаю аккаунт следующему. Со мной можно продолжать поддерживать связь через @AndLukyane
Кстати, если хотите стать автором, пишите :)
Скоро будет анонс автора на следующую неделю.
Хороших выходных!