01 / тестовое задание

Пиклема:
тестовое задание для позиции «Data Scientist»

Реальное тестовое с собеседования на Intern Data Scientist: исходный текст задания, как решать и частые ошибки.

02 / оригинальный текст

Текст тестового задания

Исходный текст задания без редактуры — так, как его прислали кандидату.

Данные к заданиюОткрыть данные →

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

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

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

Задание #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. Обучить несколько моделей и сравнить их. Интерпретировать результаты.

03 / что проверяют

Что проверяет это задание

01

Python

Обработка данных и расчёты: pandas, скрипты, автоматизация.

02

SQL

Выборки, агрегаты, джойны и оконные функции для анализа данных.

03

Аналитическое мышление

Как разложить задачу, выбрать подход и обосновать решение.

04 / как решать

Как подойти к решению

  1. 1

    Разберите условие: что именно просят посчитать и в каких разрезах.

  2. 2

    Сверьтесь с данными: какие таблицы есть, период и нужные фильтры.

  3. 3

    Решайте по шагам и фиксируйте промежуточные результаты и допущения.

  4. 4

    Доведите до финальных чисел и коротких выводов или рекомендаций.

05 / частые ошибки

Частые ошибки

  • Неверный период, разрез или единицы измерения.
  • Не учтены фильтры и сегменты из условия.
  • Решение без промежуточных шагов — только финальная цифра.
  • Нет выводов и рекомендаций по результату.
06 / хороший ответ

Каким должен быть сильный ответ

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

  • короткое описание логики решения;
  • промежуточные таблицы, запросы и фильтры;
  • финальные значения по каждому пункту задания;
  • понятные выводы и рекомендации.
07 / похожие задания

Похожие задания

08 / разборы в telegram

Хочешь больше таких разборов?

В Telegram-канале разбираю тестовые с собеседований, метрики и типичные ошибки кандидатов.

Подписаться в Telegram →
09 / следующий шаг

Разбираешь тестовые, но не уверен в решении?

На интенсиве разбираем реальные кейсы, A/B-секции, метрики, SQL, Python и типовые ошибки кандидатов.