Новая Школа - онлайн-школа подготовки к ЕГЭ
Задача Задача №1744015
А
Аноним
06 октября 2024 16:35 · публичный вопрос
А
Аноним

Анализ данных службы поддержки позволяет оценивать качество работы сотрудников, улучшать процессы взаимодействия с пользователем и находить проблемные области. Вам предстоит выступить в качестве аналитика данных и решить задания на основе реальных данных пользовательских обращений. Вы можете использовать SQL, Pandas и другие инструменты для расчета показателей, которые помогут улучшить качество обслуживания клиентов и эффективность работы системы поддержки. В качестве решения загрузите текстовый файл, содержащий номера вопросов и ответы на них (в одной строке - один вопрос, разделитель - запятая). Если вы решили только часть заданий, то укажите в файле номера и ответы только для этих вопросов. Пример файла с форматом отправки решение - sample_submission.txt Максимальный балл за задачу - 100. Задание 1: Тикеты, ожидающие обработки (10 баллов) Необходимо вывести количество тикетов, которые на данный момент ожидают отработки агентом. Для этого используйте поле status: - 1 — тикет отработан, - любое другое значение — тикет требует отработки. Если в один и тот же момент времени записано несколько логов с разными статусами для одного тикета, строки со статусом 1 не учитываются. Задание 2: Удалённые сообщения (5 баллов) Определите, кто удаляет сообщения чаще и в каком количестве. Рассчитайте, сколько сообщений было удалено сотрудниками, а сколько — пользователями. Выберите тех, кто удаляет сообщения чаще. В ответе укажите одно число — количество удаленных сообщений выбранной группой. Задание 3: Повторные вопросы после закрытия по причине «троллинг» (5 баллов) Определите количество тикетов, в которых после события event_type = 'troll_closed' пользователь задал новый вопрос (reply). Задание 4: Анализ тегов тикетов (10 баллов) Посчитайте количество тикетов в разрезе тегов, где тег определяется как event_subtype LIKE 'tag_%'. Учитывайте только последний тег в каждом тикете (1 тикет — 1 тег). В ответе укажите самый популярный тег. Задание 5: Тег, который чаще всего ставят агенты (5 баллов) Выведите тег (event_subtype), который чаще всего ставят агенты в тикетах. Рассматривайте только события с типом event_type = 'tag_set_manually' (значения в других столбцах могут быть любыми). Задание 6: Изменение категории тикета со статусом 0 (5 баллов) Выведите номер тикета (question_id), в котором есть запись event_type = 'set_category', если на момент записи статус тикета (status) был равен 0. Задание 7: Расчет UWT (15) Необходимо рассчитать показатель User Waiting Time (UWT) - среднего времени ожидания пользователем ответа сотрудника. Показатель рассчитывается на основании данных из таблицы support_questions, где фиксируются цепочки взаимодействий "вопрос пользователя" -> "ответ сотрудника". В ответе укажите среднее время в секундах с точностью до сотых. UWT = среднее время ожидания пользователя по всем цепочкам "вопрос пользователя" -> "ответ сотрудника" за период. Примечания: В качестве ответа агента необходимо учитывать строки, где event_type = 'agent_reply' (с любыми значениями в других столбцах). В качестве вопроса пользователя необходимо учитывать строки, где event_type = ‘reply’ (с любыми значениями в других столбцах). Пользователь может написать 2 и более вопроса подряд, в этом случае учитывается вопрос, который задан раньше. Сотрудник может дать 2 и более ответа подряд, в этом случае учитывается ответ, который дан раньше. Удаленные вопросы и ответы исключаются из расчета. Задание 8: Расчёт SL (15 баллов) Необходимо рассчитать показатель Service Level (SL) - процент ответов, данных в течение целевого времени (15 минут). Показатель рассчитывается на основании данных из таблицы support_questions, где фиксируются цепочки взаимодействий "вопрос пользователя" -> "ответ сотрудника". В ответе укажите значение с точностью до сотых. SL = (количество цепочек с UWT ≤ 15 минут / общее количество цепочек) * 100% Примечания: В качестве ответа агента необходимо учитывать строки, где event_type = 'agent_reply' (с любыми значениями в других столбцах). В качестве вопроса пользователя необходимо учитывать строки, где event_type = ‘reply’ (с любыми значениями в других столбцах). Пользователь может написать 2 и более вопроса подряд, в этом случае учитывается вопрос, который задан раньше. Сотрудник может дать 2 и более ответа подряд, в этом случае учитывается ответ, который дан раньше. Удаленные вопросы и ответы исключаются из расчета. Задание 9: Определение скорости ответа сотрудников (10 баллов) Определите, сотрудники с каким значением поля user_type дают самые быстрые ответы на вопросы пользователей. Для этого нужно рассчитать среднее (mean) время ответа для каждой группы сотрудников и определить группу с наименьшим средним временем ответа. В качестве ответа агента необходимо учитывать строки, где event_type = 'agent_reply' (с любыми значениями в других столбцах). В качестве вопроса пользователя необходимо учитывать строки, где event_type = ‘reply’ (с любыми значениями в других столбцах). Задание 10: Время до закрытия тикета (10 баллов) Посчитайте среднее время от последнего действия в тикете до его закрытия по таймауту. Используйте только действия, которые произошли до события с типом event_type = 'closed_by_time'. Если в тикете было несколько таких событий, используйте последнее из них. В ответе дайте среднее (mean) количество дней с точностью до сотых. Примечание: исключите из расчета действия, которые произошли после закрытия по таймауту. Задание 11: Время между назначением и сбросом агента (10 баллов) Посчитайте среднее время от назначения сотрудника до сброса (от event_type = 'set_agent' до event_type = 'drop_agent'). В ответе укажите среднее (mean) время в секундах с точностью до сотых. Примечания: Учитывайте только ближайшие друг к другу события. Если было несколько событий set_agent и/или drop_agent подряд, берите последний set_agent и первый drop_agent. Исключите из расчета сбросы, инициированные пользователями.

Нейросеть06 октября 2024 16:35

Давайте разберем каждое задание по очереди. Предположим, у нас есть необходимые данные, которые мы можем анализировать с помощью Python, SQL, или других инструментов для анализа данных, например, Pandas. Вот как можно подойти к решению заданий:

Задание 1: Тикеты, ожидающие обработки

Для подсчета количества тикетов, ожидающих отработки, используем следующие шаги:

  1. Отфильтровать все записи, где статус не равен 1.
  2. Убедиться, что строки со статусом 1 не учитываются, если в одном тикете зарегистрированы разные статусы.

Примерный код на Python с использованием Pandas:

import pandas as pd

# Предположим, df - это ваш DataFrame с данными
waiting_tickets = df[(df['status'] != 1) & (~df.duplicated('ticket_id', keep=False))]
count_waiting_tickets = waiting_tickets['ticket_id'].nunique()

Ответ: количество тикетов, ожидающих обработки.

Задание 2: Удалённые сообщения

Необходимо подсчитать количество удаленных сообщений от сотрудников и пользователей. Используйте:

  1. Суммируйте количество удаленных сообщений, разделяя по user_type.
  2. Выберите группу с большим количеством удалений.

Пример:

deleted_messages = df[df['event_type'] == 'message_deleted']
deleted_by = deleted_messages.groupby('user_type').size()
most_frequent_deleter = deleted_by.idxmax()
count_deleted = deleted_by.max()

Ответ: количество удаленных сообщений выбранной группой.

Задание 3: Повторные вопросы после закрытия по причине «троллинг»

Для этого задания нужно определить количество тикетов с новым вопросом после события troll_closed:

troll_closed = df[df['event_type'] == 'troll_closed']['ticket_id'].unique()
replies_after_troll = df[(df['ticket_id'].isin(troll_closed)) & (df['event_type'] == 'reply')]
count_replies_after_troll = replies_after_troll.shape[0]

Ответ: количество тикетов с новыми вопросами.

Задание 4: Анализ тегов тикетов

Посчитываем количество тикетов по тегам. Убедитесь, что подбираете только последний тег:

tags = df[df['event_subtype'].str.contains('tag_')]
last_tags = tags.groupby('ticket_id').last()
popular_tag = last_tags['event_subtype'].value_counts().idxmax()

Ответ: самый популярный тег.

Задание 5: Тег, который чаще всего ставят агенты

Отфильтруйте события, где агенты ставят теги вручную, и подсчитайте:

manual_tags = df[df['event_type'] == 'tag_set_manually']
most_common_tag = manual_tags['event_subtype'].value_counts().idxmax()

Ответ: тег, который чаще всего ставят агенты.

Задание 6: Изменение категории тикета со статусом 0

Подсчитайте тикеты, где статус был равен 0 на момент изменения категории:

set_category_events = df[df['event_type'] == 'set_category']
tickets_with_status_0 = set_category_events[set_category_events['ticket_id'].isin(df[df['status'] == 0]['ticket_id'])]
question_ids_with_status_0 = tickets_with_status_0['ticket_id'].unique()

Ответ: номера тикетов.

Задание 7: Расчет UWT

Вычислите среднее время ожидания ответа:

# Создание временных меток и их парирование
user_questions = df[df['event_type'] == 'reply']
agent_replies = df[df['event_type'] == 'agent_reply']

# Объединение и расчет UWT
merged = pd.merge(user_questions, agent_replies, on='ticket_id')

# Расчет времени ожидания
uwt = (merged['reply_time'] - merged['question_time']).mean()

Ответ: среднее время ожидания в секундах.

Задание 8: Расчёт SL

Для расчета уровня обслуживания (SL):

total_pairs = len(merged)
within_time_limit = len(merged[merged['waiting_time'] <= 15 * 60])  # перевод в секунды
sl = (within_time_limit / total_pairs) * 100

Ответ: значение SL с точностью до сотых.

Задание 9: Определение скорости ответа сотрудников

Проведение группировки по user_type и расчет времени ответа:

response_time = df[df['event_type'] == 'agent_reply']['response_time']
avg_response_time = df.groupby('user_type')['response_time'].mean()
fastest_response_type = avg_response_time.idxmin()

Ответ: user_type с наименьшим временем ответа.

Задание 10: Время до закрытия тикета

Для этой задачи используем следующие шаги:

closed_by_time_events = df[df['event_type'] == 'closed_by_time']
previous_actions = df[df['timestamp'] < closed_by_time_events['timestamp']]

avg_time_to_close = (closed_by_time_events['timestamp'] - previous_actions['timestamp']).mean()

Ответ: среднее количество дней до закрытия тикета.

Задание 11: Время между назначением и сбросом агента

Для расчета времени между set_agent и drop_agent:

set_agent_events = df[df['event_type'] == 'set_agent']
drop_agent_events = df[df['event_type'] == 'drop_agent']

# Создание пар и расчет времени
avg_time_until_drop = (drop_agent_events['timestamp'] - set_agent_events['timestamp']).mean()

Ответ: среднее время в секундах.

Итоговый файл

Соберите ответы в формате, который соответствует заданному стилю (текстовый файл с вопросами и ответами), и отправьте его, как указано.

Если у вас есть уточняющие вопросы по каждому из заданий, не стесняйтесь спрашивать! Это может помочь вам лучше понять материал. Удачи с вашей работой над анализом данных!

Анализ данных службы поддержки позволяет оценивать качество работы сотрудников, улучшать процессы взаимодействия с пользователем и находить проблемные области. Вам предстоит выступить в качестве аналитика данных и решить задания на основе реальных данных пользовательских обращений. Вы можете использовать SQL, Pandas и другие инструменты для расчета показателей, которые помогут улучшить качество обслуживания клиентов и эффективность работы системы поддержки. В качестве решения загрузите текстовый файл, содержащий номера вопросов и ответы на них (в одной строке - один вопрос, разделитель - запятая). Если вы решили только часть заданий, то укажите в файле номера и ответы только для этих вопросов. Пример файла с форматом отправки решение - sample_submission.txt Максимальный балл за задачу - 100. Задание 1: Тикеты, ожидающие обработки (10 баллов) Необходимо вывести количество тикетов, которые на данный момент ожидают отработки агентом. Для этого используйте поле status: - 1 — тикет отработан, - любое другое значение — тикет требует отработки. Если в один и тот же момент времени записано несколько логов с разными статусами для одного тикета, строки со статусом 1 не учитываются. Задание 2: Удалённые сообщения (5 баллов) Определите, кто удаляет сообщения чаще и в каком количестве. Рассчитайте, сколько сообщений было удалено сотрудниками, а сколько — пользователями. Выберите тех, кто удаляет сообщения чаще. В ответе укажите одно число — количество удаленных сообщений выбранной группой. Задание 3: Повторные вопросы после закрытия по причине «троллинг» (5 баллов) Определите количество тикетов, в которых после события event_type = 'troll_closed' пользователь задал новый вопрос (reply). Задание 4: Анализ тегов тикетов (10 баллов) Посчитайте количество тикетов в разрезе тегов, где тег определяется как event_subtype LIKE 'tag_%'. Учитывайте только последний тег в каждом тикете (1 тикет — 1 тег). В ответе укажите самый популярный тег. Задание 5: Тег, который чаще всего ставят агенты (5 баллов) Выведите тег (event_subtype), который чаще всего ставят агенты в тикетах. Рассматривайте только события с типом event_type = 'tag_set_manually' (значения в других столбцах могут быть любыми). Задание 6: Изменение категории тикета со статусом 0 (5 баллов) Выведите номер тикета (question_id), в котором есть запись event_type = 'set_category', если на момент записи статус тикета (status) был равен 0. Задание 7: Расчет UWT (15) Необходимо рассчитать показатель User Waiting Time (UWT) - среднего времени ожидания пользователем ответа сотрудника. Показатель рассчитывается на основании данных из таблицы support_questions, где фиксируются цепочки взаимодействий "вопрос пользователя" -> "ответ сотрудника". В ответе укажите среднее время в секундах с точностью до сотых. UWT = среднее время ожидания пользователя по всем цепочкам "вопрос пользователя" -> "ответ сотрудника" за период. Примечания: В качестве ответа агента необходимо учитывать строки, где event_type = 'agent_reply' (с любыми значениями в других столбцах). В качестве вопроса пользователя необходимо учитывать строки, где event_type = ‘reply’ (с любыми значениями в других столбцах). Пользователь может написать 2 и более вопроса подряд, в этом случае учитывается вопрос, который задан раньше. Сотрудник может дать 2 и более ответа подряд, в этом случае учитывается ответ, который дан раньше. Удаленные вопросы и ответы исключаются из расчета. Задание 8: Расчёт SL (15 баллов) Необходимо рассчитать показатель Service Level (SL) - процент ответов, данных в течение целевого времени (15 минут). Показатель рассчитывается на основании данных из таблицы support_questions, где фиксируются цепочки взаимодействий "вопрос пользователя" -> "ответ сотрудника". В ответе укажите значение с точностью до сотых. SL = (количество цепочек с UWT ≤ 15 минут / общее количество цепочек) * 100% Примечания: В качестве ответа агента необходимо учитывать строки, где event_type = 'agent_reply' (с любыми значениями в других столбцах). В качестве вопроса пользователя необходимо учитывать строки, где event_type = ‘reply’ (с любыми значениями в других столбцах). Пользователь может написать 2 и более вопроса подряд, в этом случае учитывается вопрос, который задан раньше. Сотрудник может дать 2 и более ответа подряд, в этом случае учитывается ответ, который дан раньше. Удаленные вопросы и ответы исключаются из расчета. Задание 9: Определение скорости ответа сотрудников (10 баллов) Определите, сотрудники с каким значением поля user_type дают самые быстрые ответы на вопросы пользователей. Для этого нужно рассчитать среднее (mean) время ответа для каждой группы сотрудников и определить группу с наименьшим средним временем ответа. В качестве ответа агента необходимо учитывать строки, где event_type = 'agent_reply' (с любыми значениями в других столбцах). В качестве вопроса пользователя необходимо учитывать строки, где event_type = ‘reply’ (с любыми значениями в других столбцах). Задание 10: Время до закрытия тикета (10 баллов) Посчитайте среднее время от последнего действия в тикете до его закрытия по таймауту. Используйте только действия, которые произошли до события с типом event_type = 'closed_by_time'. Если в тикете было несколько таких событий, используйте последнее из них. В ответе дайте среднее (mean) количество дней с точностью до сотых. Примечание: исключите из расчета действия, которые произошли после закрытия по таймауту. Задание 11: Время между назначением и сбросом агента (10 баллов) Посчитайте среднее время от назначения сотрудника до сброса (от event_type = 'set_agent' до event_type = 'drop_agent'). В ответе укажите среднее (mean) время в секундах с точностью до сотых. Примечания: Учитывайте только ближайшие друг к другу события. Если было несколько событий set_agent и/или drop_agent подряд, берите последний set_agent и первый drop_agent. Исключите из расчета сбросы, инициированные пользователями.
Давайте разберем каждое задание по очереди. Предположим, у нас есть необходимые данные, которые мы можем анализировать с помощью Python, SQL, или других инструментов для анализа данных, например, Pandas. Вот как можно подойти к решению заданий: ### Задание 1: Тикеты, ожидающие обработки Для подсчета количества тикетов, ожидающих отработки, используем следующие шаги: 1. Отфильтровать все записи, где статус не равен 1. 2. Убедиться, что строки со статусом 1 не учитываются, если в одном тикете зарегистрированы разные статусы. Примерный код на Python с использованием Pandas: ```python import pandas as pd # Предположим, df - это ваш DataFrame с данными waiting_tickets = df[(df['status'] != 1) & (~df.duplicated('ticket_id', keep=False))] count_waiting_tickets = waiting_tickets['ticket_id'].nunique() ``` Ответ: количество тикетов, ожидающих обработки. ### Задание 2: Удалённые сообщения Необходимо подсчитать количество удаленных сообщений от сотрудников и пользователей. Используйте: 1. Суммируйте количество удаленных сообщений, разделяя по `user_type`. 2. Выберите группу с большим количеством удалений. Пример: ```python deleted_messages = df[df['event_type'] == 'message_deleted'] deleted_by = deleted_messages.groupby('user_type').size() most_frequent_deleter = deleted_by.idxmax() count_deleted = deleted_by.max() ``` Ответ: количество удаленных сообщений выбранной группой. ### Задание 3: Повторные вопросы после закрытия по причине «троллинг» Для этого задания нужно определить количество тикетов с новым вопросом после события `troll_closed`: ```python troll_closed = df[df['event_type'] == 'troll_closed']['ticket_id'].unique() replies_after_troll = df[(df['ticket_id'].isin(troll_closed)) & (df['event_type'] == 'reply')] count_replies_after_troll = replies_after_troll.shape[0] ``` Ответ: количество тикетов с новыми вопросами. ### Задание 4: Анализ тегов тикетов Посчитываем количество тикетов по тегам. Убедитесь, что подбираете только последний тег: ```python tags = df[df['event_subtype'].str.contains('tag_')] last_tags = tags.groupby('ticket_id').last() popular_tag = last_tags['event_subtype'].value_counts().idxmax() ``` Ответ: самый популярный тег. ### Задание 5: Тег, который чаще всего ставят агенты Отфильтруйте события, где агенты ставят теги вручную, и подсчитайте: ```python manual_tags = df[df['event_type'] == 'tag_set_manually'] most_common_tag = manual_tags['event_subtype'].value_counts().idxmax() ``` Ответ: тег, который чаще всего ставят агенты. ### Задание 6: Изменение категории тикета со статусом 0 Подсчитайте тикеты, где статус был равен 0 на момент изменения категории: ```python set_category_events = df[df['event_type'] == 'set_category'] tickets_with_status_0 = set_category_events[set_category_events['ticket_id'].isin(df[df['status'] == 0]['ticket_id'])] question_ids_with_status_0 = tickets_with_status_0['ticket_id'].unique() ``` Ответ: номера тикетов. ### Задание 7: Расчет UWT Вычислите среднее время ожидания ответа: ```python # Создание временных меток и их парирование user_questions = df[df['event_type'] == 'reply'] agent_replies = df[df['event_type'] == 'agent_reply'] # Объединение и расчет UWT merged = pd.merge(user_questions, agent_replies, on='ticket_id') # Расчет времени ожидания uwt = (merged['reply_time'] - merged['question_time']).mean() ``` Ответ: среднее время ожидания в секундах. ### Задание 8: Расчёт SL Для расчета уровня обслуживания (SL): ```python total_pairs = len(merged) within_time_limit = len(merged[merged['waiting_time'] <= 15 * 60]) # перевод в секунды sl = (within_time_limit / total_pairs) * 100 ``` Ответ: значение SL с точностью до сотых. ### Задание 9: Определение скорости ответа сотрудников Проведение группировки по `user_type` и расчет времени ответа: ```python response_time = df[df['event_type'] == 'agent_reply']['response_time'] avg_response_time = df.groupby('user_type')['response_time'].mean() fastest_response_type = avg_response_time.idxmin() ``` Ответ: user_type с наименьшим временем ответа. ### Задание 10: Время до закрытия тикета Для этой задачи используем следующие шаги: ```python closed_by_time_events = df[df['event_type'] == 'closed_by_time'] previous_actions = df[df['timestamp'] < closed_by_time_events['timestamp']] avg_time_to_close = (closed_by_time_events['timestamp'] - previous_actions['timestamp']).mean() ``` Ответ: среднее количество дней до закрытия тикета. ### Задание 11: Время между назначением и сбросом агента Для расчета времени между `set_agent` и `drop_agent`: ```python set_agent_events = df[df['event_type'] == 'set_agent'] drop_agent_events = df[df['event_type'] == 'drop_agent'] # Создание пар и расчет времени avg_time_until_drop = (drop_agent_events['timestamp'] - set_agent_events['timestamp']).mean() ``` Ответ: среднее время в секундах. ### Итоговый файл Соберите ответы в формате, который соответствует заданному стилю (текстовый файл с вопросами и ответами), и отправьте его, как указано. Если у вас есть уточняющие вопросы по каждому из заданий, не стесняйтесь спрашивать! Это может помочь вам лучше понять материал. Удачи с вашей работой над анализом данных!