Типичное собеседование #3. Позиция Senior Data Scientist. Rejected!

Поділитися
Вставка
  • Опубліковано 3 чер 2024
  • На этот раз мы встретились уже с опытным кандидатом в Data Science.
    Будет много разноплановых практических вопросов по ML!
    Канал Александра: t.me/datafeeling
    Канал Андрея t.me/dzis_science
    Таймкоды встречи:
    0:00:00 - Расказ о кандидате
    0:09:23 - Фидбек #1
    0:10:50 - Первый вопрос по Python
    0:16:36 - Второй вопрос по Python
    0:17:36 - Задачка на Python
    0:23:39 - Фидбек по Python
    0:27:26 - Первая задача на SQL
    0:29:57 - Вторая задача на SQL
    0:40:04 - Фидбек по SQL
    0:41:30 - Задача на ML с одним таргетом
    0:54:10 - Оценка модели не тесте
    1:01:14 - Выбросы и аномалии в датасете (спойлер: их нет)
    1:02:17 - Feature Engneering и улучшение точности
    1:04:36 - Нормализация (StandardScaler) VS Стандартизация (MinMaxScaler)
    1:08:35 - Задача на ML с двумя таргетами
    1:18:45 - Метод максимизации правдоподобия
    1:22:02 - Будстрап и статистические критерии
    1:26:35 - Фидбек по ML
    1:31:53 - Разбор резюме
    1:36:23 - Общий фидбек

КОМЕНТАРІ • 66

  • @goshakucenko9818
    @goshakucenko9818 2 роки тому +30

    Чет с такими познаниями у обоих я начал бояться за будущее технологий))

  • @andreylange7240
    @andreylange7240 Рік тому +11

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

  • @jwegas
    @jwegas Рік тому +11

    Очень полезный видос. Но обратите внимание, пожаулйстаЮ на громкость звука "перемотки".. Очень громко, и бьет по ушам.. Либо может поменять звук? Либо сделать его сильно тише.

  • @user-mq7xq1hi2q
    @user-mq7xq1hi2q 2 роки тому +4

    Как насчёт собеседования на позицию ML Engineer (с секцией по Deep Learning)?

  • @vadimvadim1662
    @vadimvadim1662 Рік тому +2

    когда ждать следующую серию?)

  • @akaktak9002
    @akaktak9002 2 роки тому

    Собеседования на ML Engineer проводите? Было бы интересно

  • @user-mk8eb6yg8x
    @user-mk8eb6yg8x Рік тому +1

    def uniq(string):
    unique = list(set(string))
    P=fact(len(string))
    for el in unique:
    P=P/(string.count(el))
    return P

  • @user-dm9hc1nk3b
    @user-dm9hc1nk3b 2 роки тому

    Привет. Крутая запись!
    Вопрос про задачку с двумя таргетами.
    1) Кажется, это частный подход - когда уникальных лейблов #2 мало. inference затянется на переборе 2 лейбла. На примере рекомендаций обуви нужно перебрать больше размеров. Это применимо только если во 2 лейбле мало уникальных классов?
    2) Как информация о неправильном 2 таргете закладывается в модель при обучении?

  • @iamarkadiypolukhin
    @iamarkadiypolukhin Рік тому

    А можно, пожалуйста, ссылку на данные, чтобы покрутить?)
    Мне кажется по начальному значению без всяких моделей уже точность будет 100%, хотел бы это проверить (я про классификацию)

  • @Extremesarova
    @Extremesarova 2 роки тому +2

    0:16:36 не заработает, так как 1e{number} это вещественное число, а функция range принимает целые числа

  • @kaseke2019
    @kaseke2019 Рік тому

    А нельзя в первой задачке по питону просто длину слова факториал взять?

  • @vadimvadim1662
    @vadimvadim1662 2 роки тому +13

    я думаю большей части аудитории интересны собесы джунов

  • @mlpython1089
    @mlpython1089 2 роки тому +7

    0:41:30 завели парня не туда советами. Эти данные по первым признакам дают точность 1.0. Даже одного признака достаточно.

    • @user-le3vo5jd8n
      @user-le3vo5jd8n 9 місяців тому

      Да, можно тупо было по первому дню классифицировать. В точке старта классы не пересекаются.

    • @savchenkooleksandr2191
      @savchenkooleksandr2191 2 місяці тому

      Точно, сразу это видно. Решающее дерево сходу дало бы 100. Ох уж эти сеньоры.. 😊

  • @user-wq3rp9sp3v
    @user-wq3rp9sp3v 2 роки тому +4

    По-моему самый простой вариант решения задачи по питону - найти длину строки и вычислить факториал

    • @Igor-sp7tw
      @Igor-sp7tw 2 роки тому

      Этого недостаточно

    • @shahahah256
      @shahahah256 2 роки тому +4

      Надо еще поделить на факториалы количества всех повторяющихся символов

    • @shahahah256
      @shahahah256 2 роки тому +1

      Короче просто задачка на полиномиальный коэффициент, вопрос в том как оптимальнее его посчитать

    • @ISandrucho
      @ISandrucho 2 роки тому +3

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

  • @uj8574
    @uj8574 2 роки тому +6

    по sql я решил, легкие задачки, но пока на джуна даже не берут )

    • @bygoodby5553
      @bygoodby5553 Рік тому

      Сейчас принцип у всех выпускники вшэ, бауманка и т. п. Райдер у ребят.

    • @Leha_from_Zavod
      @Leha_from_Zavod Рік тому

      можешь сказать насколько стоит углубляться в SQL? Где учить именно с перспективой связки Python + MySql?

  • @hektq
    @hektq 6 місяців тому

    factorial(len(n))

  • @user-ic2hs4my9d
    @user-ic2hs4my9d 2 роки тому +5

    Задача из ЕГЭ просто)
    def perms(s):
    n = len(s)
    d = dict()
    for e in s:
    if e in d.keys():
    d[e] += 1
    else:
    d[e] = 1
    div = 1
    for v in d.values():
    div *= fact(v)
    return int(fact(n) / div)
    def fact(n):
    if n == 0:
    return 1
    else:
    return n * fact(n - 1)

    • @mrleggard
      @mrleggard Рік тому

      Я понимаю, что факториал - это кол-во всех возможных комбинаций. Очевидно этого недостаточно чтобы найти кол-во уникальных, т.к. буквы могут повторяться.
      div в твоем коде - это количество всех перестановок, среди букв, где каждая буква - позиция, а ее кол-во повторений в строке - кол-во значений для позиции.
      Я вот не могу связать магию в голове, как поделив комбинации на эти, странные для меня, перестановки, получается число уникальных комбинаций.
      Я бы сделал часть с факториалом, потом запулил бы все в set() и не додумался бы до деления на перестановки))

    • @user-ic2hs4my9d
      @user-ic2hs4my9d Рік тому

      @@mrleggard формулы из комбинаторики и ничего более

    • @user-zp6fs7ni5r
      @user-zp6fs7ni5r 5 місяців тому

      @@mrleggard обычная комбинаторика. Факториал от длины это всевозможные с повторениями. Потом надо поделить на факториал количества каждой из букв. Допустим букв 'a' 2, поэтому делим на 2! = 2, потому что в любом зафиксированном слове можно поставить буквы 'a' двумя способами, которые мы посчитали различными. И так для любого.
      Комбинаторика, 9 класс. На 1 курсе в вузе на дискретной математике тоже проходится, но уже как повтор школьной программы

  • @user-mq7xq1hi2q
    @user-mq7xq1hi2q 2 роки тому +7

    Почему в большинстве собеседований на позицию Data Scientist, выложенных на UA-cam, никто не спрашивает Deep Learning? Как по мне это максимально странно, особенно для сеньора. Учитывая тот факт, что основы DL в большинстве случаев должен знать даже стажёр.

    • @dimka11ggg
      @dimka11ggg 2 роки тому +3

      Data Scientist это довольно широкая и размытая должность. Ищи по запросу deep learning interview

    • @hopelesssuprem1867
      @hopelesssuprem1867 2 роки тому +4

      очень часто, как и в этом случае, под дата саентистом скрывается обычный аналитик. Лучше поискать собесы на позицию machine learning engineer (CV, NLP) - вот там у ребят серьезный уровень

  • @user-pq8oo9ye7h
    @user-pq8oo9ye7h 2 роки тому +1

    Решение питоновской задачи без учета уникальности : "def perms(a):
    if len(a)==1:
    return(1)
    else:
    t=2
    for i in range(2, len(a)):
    t=t*(i+1)
    return(t)"

    • @Igor-sp7tw
      @Igor-sp7tw 2 роки тому +1

      Это неверно вы проверьте кейсы 'abc' должно быть 6
      для 'aab' должно быть 3, а вы просто факториал считаете

    • @user-pq8oo9ye7h
      @user-pq8oo9ye7h 2 роки тому +1

      @@Igor-sp7tw Это не готовое решение, я лишь показал начало решения. И я написал что решение без учета уникальности.

  • @dmitriynayanov6428
    @dmitriynayanov6428 2 роки тому +3

    А как это люди, у которых два года опыта, собеседуют людей с 10-летним опытом? 🤔

    • @rednil8242
      @rednil8242 Рік тому +5

      Потому что есть вопросы и конкретные на них ответы, которые характеризуют уровень собеседуемого
      Нет никакой необходимости собеседующему знать все, что знает собеседуемый

  • @Booogieman
    @Booogieman Рік тому +2

    Дядя Джун: "Господи, какая же это всё х**ня"

  • @lainisourgod
    @lainisourgod 10 місяців тому

    вопрос про magic функцию дурацкий. если % то на одной строке, %% то много строк. это решается за одну секунду когда ты неверно запустил код и исправил. в чем тут синьорность

  • @fcz1488
    @fcz1488 Рік тому +1

    за 15 лет в программировании (с БД) мне ни разу не пригодились оконные функции - нафига вы их спрашиваете? ну чего там нельзя сделать без гула?
    блин реально "напишите быструю сортировку"

    • @noname-bi7ve
      @noname-bi7ve Рік тому

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

    • @warpme
      @warpme Рік тому +1

      @@noname-bi7ve И? При чём тут оконные функции? Это специфический инструмент который никто не будет держать в уме, а когда реально понадобится просто загуглит и за 5 минут всё себе сделает. Или вообще даже не зная про них спокойно сделает группировку и по группам посчитает что ему там нужно, тем более что реально адекватной сложности задача через эту ерунду решается запросом размером со стену. Попробуйте сделать запрос где вам нужно найти "подозрительные" события в общем логе пользователей, подозрительные это те между которыми меньше n секунд и типо события отличается (например, зашёл на сайт и через 1 сек вышел, а порог 10 сек). Как сделаете посмотрите на результат и спросите себя а так точно вот делают или дальше собесов дай бог люди только слышали про них.

    • @noname-bi7ve
      @noname-bi7ve Рік тому +1

      @@warpme оконки это несложно, удобно и реально часто используется, если ты работаешь с данными. На собесах большой запрос не дадут. Все остальное - отмазки.

    • @user-su2zk9us1t
      @user-su2zk9us1t 11 місяців тому +2

      Разница в том, сколько времени ты потратишь на то, чтобы написать то, что тебе нужно. И в том, сколько времени ты потом будешь исправлять свои ошибки, нагуглив какую-нибудь хрень, не особо поняв при этом, что к чему

    • @hsqlk
      @hsqlk 6 місяців тому +1

      ​@@noname-bi7veоконки не часто используется у аналитиков, а тут вообще собес на DS

  • @stanferrari4550
    @stanferrari4550 Рік тому

    мне показалось это не синьор а шеф бургер джуниор за 199р в кфс.

  • @han-stroy
    @han-stroy 2 роки тому +2

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

    • @user-mq7xq1hi2q
      @user-mq7xq1hi2q 2 роки тому +2

      Эксплоративный анализ данных же нужен не только для отбора признаков. К тому же иногда невыгодно сначала обучать модель, а потом из обученной модели получать информативность признаков. Представь себе, что у тебя есть 2000 признаков и целевая переменная. Если у тебя при этих 2000 признаках будет ещё и много наблюдений (скажем, пару миллионов), то обучать на таком датасете даже простейший классификатор типа дерева решений (не говоря уже про ансамбли) будет крайне затратно по времени и нерационально. Рационально в такой ситуации будет сначала сделать эксплоративный анализ данных и снизить размерность с помощью PCA / t-SNE / UMAP, тем самым оставив из исходных 2000 признаков только 5-10% наиболее информативных. Такой подход поможет избежать проклятия размерности и существенно увеличит скорость обучения модели, а также её качество.

    • @han-stroy
      @han-stroy 2 роки тому

      @@user-mq7xq1hi2q Мне показалось, что данные анализировались/исследовались вручную, поэтому и задал вопрос о рациональности такого подхода. Как по мне, то я считаю, что следует использовать подход, основанный на автоматизированном выборе признаков.
      Что же касается вашего примера 2000 признаков и пара миллионов примеров, то я полагаю ни кто не будет обучать на всех этим примерах классификатор для выбора признаков. Для этого часто применяют стохастический подход. Быстро и с приемлемым качеством. Когда вы приводите задачи понижения размерности, тот же t-SNE, вы же не обучаете на 2000 признаков и 2 млн примеров, иначе расчеты могут уйти на крайне продолжительное время.
      Кстати, после понижения размерности, выражение "остается не 5-10% наиболее информативных". Это совершенно новые признаки, которые не стоит путать с ранее существующими (или я не прав?).

    • @user-mq7xq1hi2q
      @user-mq7xq1hi2q 2 роки тому +1

      Строительство домов ремонт квартир в Москве и КРСК Я некорректно выразился - под 5-10% наиболее информативных признаков имелись в виду как раз сгенерированные PCA главные компоненты.

    • @ivanesipov2946
      @ivanesipov2946 2 роки тому +2

      EDA необходим в любом случае:
      1) Анализ пропусков/аномалий в данных, возможно, они не случайны и объясняются особенностями предметной области. К тому же в целом полезно понимать, с чем вы работаете, особенно если в работе важна интерпретация содержательных результатов.
      2) Feature Importance в деревьях не всегда информативен, хотя и позволяет забивать на мультиколлинеарность. Он не может оценить объясняющую способность признаков, которые действуют только в комбинации друг с другом (ширина и длина прямоугольника объясняют его площадь только в комбинации друг с другом, по отдельности они получат importance = 0)
      Итого, если Ваши признаки имеют смысл (иначе зачем их включать), и вы хотите получить содержательный результат, простейший EDA будет не лишним. Если ваша цель - подогнать модель под метрику, возможно, EDA не так востребован.

  • @petyap7600
    @petyap7600 9 місяців тому +1

    2 мидла проводят интервью на синьора?=)

    • @freedomtv2295
      @freedomtv2295 2 місяці тому

      В жизни так часто бывает
      Когда собеседует человек который знает хуже

  • @python4173
    @python4173 2 роки тому +1

    А Глеб точно lead data scientist в сбере? Встречал ребят оттуда, как по мне у Глеба знаний как на аналитика данных, ну максимум ведущего аналитика)

    • @puturoi
      @puturoi 2 роки тому

      не лид он. Ты 100% угадал, кто он

    • @user-su2zk9us1t
      @user-su2zk9us1t 11 місяців тому

      Так это известный трюк переводить ведущий как Lead) А для настоящего лида, чтоб не спутать с такими кадрами, можно использовать перевод Team Lead)

  • @hopelesssuprem1867
    @hopelesssuprem1867 2 роки тому +8

    ну блин, ну не верю я, что такие простые задачи дают senior - это максы стажер какой-нибудь)
    я бы сделал задачу вот так за 5 сек
    from itertools import permutations
    print(len(list(permutations([i for i in 'abc'], len('abc')))))

    • @MrLotrus
      @MrLotrus 2 роки тому

      permutations([i for i in 'abc'], len('abc')) == permutations('abc'). Ну и тут повторы не учитываются. Зачастую просят без импортов решать средствами чистого питона. Хотя эта задача чисто на тервер.

    • @hopelesssuprem1867
      @hopelesssuprem1867 2 роки тому +2

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

    • @MrLotrus
      @MrLotrus 2 роки тому +1

      @@hopelesssuprem1867 да, верней комбинаторика. Я ее просто больше всего запомнил когда мы ее в рамках тервера изучали.

  • @annieannie2484
    @annieannie2484 Рік тому

    You lie

  • @user-ic2hs4my9d
    @user-ic2hs4my9d 2 роки тому +2

    Задача из ЕГЭ просто)
    def perms(s):
    n = len(s)
    d = dict()
    for e in s:
    if e in d.keys():
    d[e] += 1
    else:
    d[e] = 1
    div = 1
    for v in d.values():
    div *= fact(v)
    return int(fact(n) / div)
    def fact(n):
    if n == 0:
    return 1
    else:
    return n * fact(n - 1)

    • @MaruiInfantry
      @MaruiInfantry 2 роки тому

      За рекурсию сразу в бан

    • @user-sv1em4jc7i
      @user-sv1em4jc7i 2 роки тому

      @@MaruiInfantry почему?)

    • @user-is4zw4xl8b
      @user-is4zw4xl8b Рік тому

      @@user-sv1em4jc7i для больших n у тебя переполнение по памяти будет/долго работать/надо в sys прописывать, ибо ограничение есть на рекурсию