Тестовое задание
на Data scientist
Пиклема

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

Сам по себе карьер состоит из пунктов погрузки (откуда вывозят породу), пунктов разгрузки (куда её отвозят) и маршрутов между ними. На картинке показан пример исходных данных координат самосвалов (синие точки) и примерных дорог на карьере (фиолетовые). Пункты погрузки и разгрузки на картинке не указаны.

Одним рейсом самосвала называется его движение от пункта погрузки до пункта разгрузки и обратно до пункта погрузки.

Задание #1
Дано:
Перед тобой упрощенная схема базы данных

telemetry - таблица с телеметрией карьерных самосвалов следующего формата:

где
  • id - номер записи в таблице
  • objectid - идентификатор самосвала
  • time - момент времени
  • sensorid - идентификатор датчика
  • value - значение, которое передал датчик
  • lat, lon - координаты
  • speed - текущая скорость самосвала
objects - таблица, в которой хранится информация о самосвалах:

где
  • id - идентификатор самосвала
  • modelname - модель самосвала
  • enterprise_id - идентификатор предприятия
  • created_at - временная метка создания записи
  • sensors - таблица с описанием датчиков

где
  • id - идентификатор датчика
  • name - наименование датчика
  • tag - тег датчика
  • min_value - минимальное допустимое значение датчика
  • max_value - максимальное допустимое значение датчика
Задание:
Какова вероятность, что из 60 кликнувших пользователей мы получим хотя бы 1 лид?
Задание #2
Дано:
Та же упрощенная схема базы данных
Задание:
Необходимо написать запрос, для вывода уникальных значений по датчику satenum (количество доступных спутников связи) для каждого самосвала с идентификатором из списка [34, 42, 99] за последние двое суток.
Задание #3
Дано:
Та же упрощенная схема базы данных
Задание:
В таблицу с телеметрией собираются данные с датчика уровня топлива в процентах (тег fuel_tank_level). В данной задаче будем считать, что самосвалы в течение последнего часа ездят непрерывно, а значит и уровень топлива постепенно снижается.

Необходимо написать запрос, который для каждого самосвала модели “БелАЗ-75131” вернет 1, если был зафиксирован хоть один случай, когда между двумя последовательными временными точками изменение уровня топлива было более 5%, или вывести 0, если подобной аномалии не было.
Задание #4
Дано:
telemetry.parquet - данные телеметрии

  • objectid - идентификатор самосвала
  • tripid - идентификатор рейса
  • driverid - идентификатор водителя
  • time - время получения данных с датчиков
  • lat, lon - широта и долгота самосвала в текущий момент времени
  • x, y, - координаты самосвала на плоскости (https://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system)
  • speed - данные с датчика скорости
  • height - высота в текущий момент времени
  • engine_speed - обороты двигателя
  • fuel_cons - мгновенный расход топлива
  • fuel_tank_level - уровень топлива в баке (в процентах)
  • weight_dynamic - мгновенное значение веса с датчика (растет, пока самосвал грузит, колеблется вокруг константы, когда едет загруженный и обнуляется при разгрузке и движении без груза обратно на погрузку)
  • weight - значение веса груза, который перевез самосвал за текущий рейс (константа для каждого рейса. Даже на той части рейса, где самосвал ехал пустым обратно на погрузку значение этого параметра будет равно весу груза)
  • DQ_vertical_bump - вертикальное ускорения
  • accelerator_position - позиция педали газа
  • w_fl - ?

Пропуски в колонках fuel_tank_level и weight_dynamic обусловлены тем, что эти датчики собираются с меньшей дискретностью (условно, раз в 10 секунд, а не раз в секунду). При необходимости, можно восполнить Nan значения последним определенным значением (т.е. [1, 2, nan, 3, nan, 4, ...] -> [1, 2, 2, 3, 3, 4, ...])

weather_hourly.parquet - почасовая погода на карьере. Значения колонок понятны из их названий.

Задание:
1. Отобразить на графике все местоположения самосвалов из исходных данных (предварительно убрав очевидные выбросы по координатам) = карта карьера (пока некорректная из-за ещё некоторых проблем с координатами)

2. Обнаружить самосвал(ы), для которых всё ещё есть проблемы с координатами (обозначить их идентификаторы)

3. Понять, по какому параметру можно избавиться от этих выбросов по координатам, и сделать чистку

4. Нарисовать корректную карту карьера (если удалость определить, как сделать чистку)

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

6. Предположить, что обозначают значения колонки w_fl (путем анализа имеющихся данных) - ответ написать в текстовом поле и обосновать
Задание #5
Дано:
Представьте, что вы аналитик в крупном интернет-магазине. За последний месяц факт продаж оказался на 15% ниже прогноза и вам необходимо выяснить, в чем причина.
Задание:
1. Все пункты делаются на данных, оставшихся после чистки в Задании 1. Правильных ответов (по числам) нет, т к препроцессинг может отличаться. Нам интересно увидеть, как Вы это делаете.

2. Вывести средние значения параметров ['hdop', 'speed', 'engine_speed', 'DQ_vertical_bump', 'height'] по самосвалам

3. Построить гистограмму суммарных расстояний за каждый рейс.

4. Вывести таблицу средних скоростей самосвалов за каждый час суток (формат: колонки - час суток, строки - самосвалы, в ячейках - средняя скорость)

5. Выбрать по одному рейсу для каждого самосвала. Для каждого рейса: нарисовать его на общей карте карьера, нарисовать на одном графике кривую изменения скорости от времени и высоты от времени (шкалы должны быть на разных осях).

6. Присоединить данные погоды к данным телеметрии
Задание #6
1. Обучить модель для предсказания значений скорости самосвала (колонка speed)

2. Можно (и даже нужно) генерировать дополнительные фичи.

3. Выполнить необходимые (на Ваш взгляд) преобразования датасета.

4. Выбрать метрику(и) для оценки качества модели, объяснить причину выбора данной метрики

5. Обучить несколько моделей и сравнить их. Интерпретировать результаты.
Тестовое задание на Data Scientist в Пиклема. Ознакомьтесь с примерами реальных тестовых заданий, которые предлагаются кандидатам. Узнайте, какие задачи могут встретиться и как они связаны с будущей работой. Это поможет лучше подготовиться к собеседованию в Пиклема и понять ожидания работодателя.
хочешь поделиться решением или заданием с собеседования?

Оставь свои контакты через форму, и я свяжусь с тобой в течение 24 часов
© No Data No Growth, 2024