Сотрудники отдел маркетинга компании Мегафон знают, как важно быть максимально внимательными к нуждам клиентов, но при этом не навязчивыми. Поэтому они разработали
Для того, чтобы окончательно оценить бюджет этой кампании на следующий месяц, маркетологам нужна помощь дата-сайентистов. Важно определить именно тех клиентов, которые на грани ухода и удержать их.
Вам, необходимо предсказать: уйдет ли этот клиент в течение следующего месяца или нет.
Для того, чтобы потренироваться у вас есть данные о клиентах американской телекоммуникационной компании.
В наборе данных, на который рассчитаны задания этого чемпионата, собраны данные о пользователях телекоммуникационной компании:
State
— штатAccount length
— как долго этот клиент с компанией (количество дней)Area code
— код географической зоныInternational plan
— подключен ли специальный тариф для международных звонковVoice mail plan
— подключен ли сервис голосовых сообщенийNumber vmail messages
— количество отправленных голосовых сообщенийTotal day minutes
— продолжительность разговоров в дневное время (минуты)Total day calls
— количество звонков в дневное времяTotal day charge
— расходы на звонки в дневное времяTotal eve minutes
— продолжительность разговоров в вечернее время (минуты)Total eve calls
— количество звонков в вечернее времяTotal eve charge
— расходы на звонки в вечернее времяTotal night minutes
— продолжительность разговоров в ночное время (минуты)Total night calls
— количество звонков в ночное времяTotal night charge
— расходы на звонки в ночное времяTotal intl minutes
— продолжительность разговоров в международных время (минуты)Total intl calls
— количество звонков в международных времяTotal intl charge
— расходы на звонки в международных времяCustomer service calls
— количество обращений в службу поддержкиChurn
— текущий статус клиента (ушел/остался). Целевая переменнаяЗадания разделены на группы по темам:
Python
и numpy
.pandas
.SQL
.Баллы за все задания суммируются.
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 6 |
Требуется написать на языке Python функцию Add(x, y)
, которая принимает два числа и возвращает их сумму.
Пример использования функции в примерах тестов.
Код решения должен содержать только определение и реализацию функции. Он не должен ничего выводить.
№ | Стандартный вход | Стандартный выход |
---|---|---|
1 | x, y = 2, 3
print(Add(x, y))
|
|
2 | print(Add(10, 11))
|
|
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 5 |
Дан вектор произвольной размерности. Необходимо посчитать так называемую норму L1
для этого вектора.
Норма L1 — это сумма абсолютных величин компонент вектора
(абсолютная величина вычисляется функцией abs
).
Входные данные содержат целые числа — компоненты вектора, записанные в одной строке через пробел.
Выходные данные должны содержать одно целое число — норму L1 этого вектора.
№ | Стандартный вход | Стандартный выход |
---|---|---|
1 |
|
|
2 |
|
|
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 10 |
Требуется на языке Python реализовать функцию, вычисляющую значение метрики F-beta.
Функция должна иметь следующий интерфейс
import numpy as np
def fbeta_score(y_true: np.ndarray, y_pred: np.ndarray, *, beta: float) -> float:
"""
Вычисляет метрику F-beta для задачи бинарной классификации.
Параметры:
y_true: одномерный массив булевых значений. Истинные значения целевой перменной.
y_pred: одномерный массив булевых значений. Предсказанные значения целевой переменной.
beta: вещественное число. Параметр `beta` метрики.
Возвращаемое значение:
fbeta_score: вещественное число. Значение метрии F-beta.
"""
pass
При решении задачи запрещено использовать функцию sklearn.metrics.fbeta_score
.
Код решения должен содержать импортируемые модули, определение и реализацию функции.
№ | Стандартный вход | Стандартный выход |
---|---|---|
1 |
|
|
Входной файл: | Стандартный вход | Ограничение времени: | 3 сек | |
Выходной файл: | output.png | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 10 |
Требуется реализовать на языке Python функцию, отображающую оценку плотности распределения столбца данных. Функция должна иметь следующий интерфейс
import pandas as pd
from typing import Union
def draw_pdf(data: pd.DataFrame, column: str, bins: Union[int, str] = 10) -> None:
"""
Отображает оценку плотности распределения столбца данных
Параметры:
data: таблица данных.
column: название столбца для отображения.
bins: спецификация интервалов разбиения, аналогично matplotlib.pyplot.hist.
"""
pass
Стиль оформления графика (цвета, границы, толщину линий, подписи и т.п.) должен соответствовать представленному ниже. Границы значений оси абсцисс должны быть равны минимальному и максимальному значению отображаемого столбца.
Код решения должен содержать только реализацию функции и импортируемые модули. Код НЕ должен самостоятельно создавать фигуры или сохранять изображение в файл.
№ | Стандартный вход | Выходной файл (output.png ) |
---|---|---|
1 |
data.csv
data = pd.read_csv('data.csv')
plt.figure(figsize=(10, 5))
plt.rcParams.update({'font.size': 14})
draw_pdf(data, 'Account length', 'sturges')
plt.savefig('output.png')
|
|
Входной файл: | Стандартный вход | Ограничение времени: | 3 сек | |
Выходной файл: | output.png | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 8 |
Требуется реализовать на языке Python функцию, отображающую долю целевых значений при каждом уникальном значении категориального признака. Функция должна иметь следующий интерфейс
import pandas as pd
def draw_bars(data: pd.DataFrame, column: str, target_column: str) -> None:
"""
Отображает долю целевых значений `target_column` при каждом уникальном значении категориального признака `column` в виде слолбчатой диаграммы.
Параметры:
data: таблица данных.
column: название категориального признака.
target_column: название целевой переменной.
"""
pass
Стиль оформления графика (цвета, границы, подписи, ширина колонок и т.п.) должен соответствовать представленному ниже. Цвета столбцов должны быть получены из палитры tab10
. Вклад долей менее 5% не должен быть подписан на графике.
Код решения должен содержать только реализацию функции и импортируемые модули. Код НЕ должен самостоятельно создавать фигуры или сохранять изображение в файл.
№ | Стандартный вход | Выходной файл (output.png ) |
---|---|---|
1 |
data.csv
data = pd.read_csv('data.csv')
plt.figure(figsize=(10, 5))
plt.rcParams.update({ 'font.size': 8 })
draw_bars(data, 'Customer service calls', 'Churn')
plt.savefig('output.png')
|
|
Автор: | А. Могилёвкин | Ограничение времени: | 1 сек | |
Входной файл: | data.csv | Ограничение памяти: | 256 Мб | |
Выходной файл: | Стандартный выход | |||
Максимальный балл: | 4 |
Требуется на языке Python реализовать функцию
get_businessmen(df: pd.DataFrame)
Функция принимает на вход объект DataFrame
библиотеки
Pandas и возвращает DataFrame
пользователей,
совершивших 20 и более международных звонков.
В объекте DataFrame
присутствуют следующие поля:
ID
— идентификатор пользователя, целое уникальное число
Total day minutes
— сумма минут дневных звонков, вещественное число
Total day calls
— количество дневных звонков, целое число
Total night minutes
— сумма минут ночных звонков, вещественное число
Total night calls
— количество ночных звонков, целое число
Total intl minutes
— сумма минут международных звонков, вещественное число
Total intl calls
— количество международных звонков, целое число
Customer service calls
— количество обращений в техническую поддержку, целое число
Функция имеет следующий интерфейс
import pandas as pd
def get_businessmen(df: pd.DataFrame) -> pd.DataFrame:
"""
Возвращает DataFrame, оставляя в нём только пользователей из df,
совершивших 20 и более международных звонков
Параметры:
df: исходный DataFrame
Возвращаемое значение:
отфильтрованный DataFrame
"""
pass
Код решения должен содержать импортируемые модули, определение и реализацию функции.
№ | Входной файл (data.csv ) |
Стандартный выход |
---|---|---|
1 |
|
|
Автор: | А. Могилёвкин | Ограничение времени: | 1 сек | |
Входной файл: | data.csv | Ограничение памяти: | 256 Мб | |
Выходной файл: | Стандартный выход | |||
Максимальный балл: | 4 |
Требуется на языке Python реализовать функцию join_dataframes(users_df: pd.DataFrame, states_df: pd.DataFrame)
Функция принимает на вход два объекта DataFrame и возвращает объединённый DataFrame пользователей и штатов.
Функция имеет следующий интерфейс
import pandas as pd
def join_dataframes(data: pd.DataFrame, states: pd.DataFrame) -> pd.DataFrame:
"""
Возвращает объединённый DataFrame
Параметры:
data: DataFrame с пользователями
states: DataFrame с штатами
Возвращаемое значение:
объединённый DataFrame, содержащий поля 'Total day calls', 'Total night calls', 'State' в данном порядке
"""
pass
Код решения должен содержать импортируемые модули, определение и реализацию функции.
№ | Входной файл (data.csv ) |
Стандартный выход |
---|---|---|
1 |
|
|
Автор: | А. Могилёвкин | Ограничение времени: | 1 сек | |
Входной файл: | data.csv | Ограничение памяти: | 256 Мб | |
Выходной файл: | Стандартный выход | |||
Максимальный балл: | 4 |
Требуется на языке Python реализовать функцию get_busiest_states(data: pd.DataFrame)
Функция принимает на вход объект DataFrame и возвращает Series, отсортированный по убыванию, в котором штаты являются индексами, а значения — количеством международных звонков в данном штате.
Функция имеет следующий интерфейс
import pandas as pd
def get_busiest_states(data: pd.DataFrame) -> pd.Series:
"""
Вычисляет Series, в котором индексы - наименования штатов, а значение - количество совершённых международных звонов.
Параметры:
data: DataFrame с данными
Возвращаемое значение:
Series отсортированный по убыванию значений.
"""
pass
Код решения должен содержать импортируемые модули, определение и реализацию функции.
№ | Входной файл (data.csv ) |
Стандартный выход |
---|---|---|
1 |
|
|
Входной файл: | data.csv | Ограничение времени: | 1 сек | |
Выходной файл: | test.log | Ограничение памяти: | 256 Мб | |
Максимальный балл: | 4 |
Требуется на языке SQL реализовать запрос, который обращается к таблице
data
и возвращает список ID
пользователей,
совершивших 20 и более международных звонков.
В таблице data
присутствуют следующие поля:
ID
— идентификатор пользователя, целое уникальное число
Total day minutes
— сумма минут дневных звонков, вещественное число
Total day calls
— количество дневных звонков, целое число
Total night minutes
— сумма минут ночных звонков, вещественное число
Total night calls
— количество ночных звонков, целое число
Total intl minutes
— сумма минут международных звонков, вещественное число
Total intl calls
— количество международных звонков, целое число
Customer service calls
— количество обращений в техническую поддержку, целое число
Решение следует представить в виде текстового файла, содержащего единственный SQL-запрос.
При отправке следует выбирать среду разработки Python
.
Для работы с базой данных используется SQLite3.
Автор: | А. Могилёвкин | Ограничение времени: | 1 сек | |
Входной файл: | data.csv | Ограничение памяти: | 256 Мб | |
Выходной файл: | test.log | |||
Максимальный балл: | 4 |
Требуется на языке SQL реализовать запрос, который объединяет таблицы users
и states
по id штата.
В таблице users
присутствуют следующие поля:
ID
— идентификатор пользователя, целое уникальное число
State ID
— id штата, в котором зарегистрирован пользователь, внешний ключ таблицы states
Total day calls
— количество дневных звонков, целое число
Total night calls
— количество ночных звонков, целое число
В таблице states
присутствуют следующие поля:
ID
— идентификатор штата, целое уникальное число
State
— название штата, строка из двух заглавных латинских букв
Решение следует представить в виде текстового файла, содержащего единственный SQL-запрос.
При отправке следует выбирать среду разработки Python
.
ID
, Total day calls
, Total night calls
, State
.
Для работы с базой данных используется SQLite3.
Автор: | А. Могилёвкин | Ограничение времени: | 1 сек | |
Входной файл: | data.csv | Ограничение памяти: | 256 Мб | |
Выходной файл: | test.log | |||
Максимальный балл: | 4 |
Требуется на языке SQL реализовать запрос, вычисляющий количество международных звонков в каждом штате.
В таблице users
присутствуют следующие поля:
State
— название штата, строка из двух заглавных латинских букв
Total intl calls
— количество международных звонков, целое число
Решение следует представить в виде текстового файла, содержащего единственный SQL-запрос.
При отправке следует выбирать среду разработки Python
.
Результирующая таблица должна содержать поля следующие поля
State
— название штата, строка из двух заглавных латинских букв
Count
— количество международных звонков в соответствующем штате
Count
Для работы с базой данных используется SQLite3.
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 2 |
Изучив набор данных, подсчитайте некоторые предварительные статистики, которые помогут лучше понять структуру проблемы (см. также пример в базовом решении):
.
")State
содержит названия штатов, подсчитайте количество уникальных значений
этого признака.Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
На основании корреляционного анализа из набора данных можно исключить поля:
|
Входной файл: | test.csv | Ограничение времени: | 1 сек | |
Выходной файл: | submission.csv | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 100 |
В рамках данной задачи требуется обучить модель на тренировочных данных, предсказывающую уйдёт ли клиент в течение следующего месяца. В качестве решение необходимо предоставить предсказание на тестовом наборе данных.
Вы можете использовать базовое решение в качестве начальной точки вашей работы.
Точность предсказания оценивается с использованием метрики F-beta с параметром β = 2.
Баллы за задачу начисляются по следующей формуле score = 100 ⋅ f2_score(y_true, y_pred)
В датасете собраны данные о пользователях телекоммуникационной компании:
State
— штатAccount length
— как долго этот клиент с компанией (количество дней)Area code
— код географической зоныInternational plan
— подключен ли специальный тариф для международных звонковVoice mail plan
— подключен ли сервис голосовых сообщенийNumber vmail messages
— количество отправленных голосовых сообщенийTotal day minutes
— продолжительность разговоров в дневное время (минуты)Total day calls
— количество звонков в дневное времяTotal day charge
— расходы на звонки в дневное времяTotal eve minutes
— продолжительность разговоров в вечернее время (минуты)Total eve calls
— количество звонков в вечернее времяTotal eve charge
— расходы на звонки в вечернее времяTotal night minutes
— продолжительность разговоров в ночное время (минуты)Total night calls
— количество звонков в ночное времяTotal night charge
— расходы на звонки в ночное времяTotal intl minutes
— продолжительность разговоров в международных время (минуты)Total intl calls
— количество звонков в международных времяTotal intl charge
— расходы на звонки в международных времяCustomer service calls
— количество обращений в службу поддержкиChurn
— текущий статус клиента (ушел/остался). Целевая переменная
В качестве решения необходимо загрузить файл в формате csv
с единственным полем Churn
— предсказанные на тестовой выборке значения целевой переменной.
Разделителем целой и дробной части в числах должна быть точка.
Максимальный балл: | 10 | Ограничение времени: | 1 сек | |
Ограничение памяти: | 512 Мб |
В данной задаче необходимо отправить ссылку код для решения задачи классификации, например в виде jupyter notebook. В тексте решения необходимо отметить, какими методами были получены результаты, отправленные в систему, например указав в комментарии перед созданием файла для отправки id попытки, в которую был отправлен этот файл:
# Попытка 654321
submit = pd.DataFrame()
submit['Churn'] = my_model.predict(...)
submit.to_csv('submission.csv')
В выходных данных укажите ссылку на решение (Google Colab, Github, Google Drive и др.).