Второе тестовое задание компании EORA. Первое задание доступно по ссылке.
Хотим сделать бота, который отвечает на часто задаваемые вопросы. Для этого у нас есть какой-то чёрный ящик, который для данной реплики возвращает наиболее подходящий ответ и score, насколько по мнению этого чёрного ящика этот ответ подходит (от 0 до 100). При этом мы понимаем, что бот не сможет отвечать на все вопросы, и поэтому делаем так:
- Если бот сильно уверен в ответе (score высокий), то даём пользователю ответ
- Если бот совсем не уверен в ответе (score низкий), то переводим пользователя на оператора
- Если score средний, то просим пользователя переформулировать вопрос.
Чтобы выяснить, какой score считать низким, какой средним, а какой высоким мы
провели эксперимент: попросили живых людей задать вопрос боту, а потом указать,
что было бы правильно после такого вопроса сделать: ответить, переспросить или
перевести на оператора. Мы записали в таблицу score от чёрного ящика,
предложенное тестером действие и сложили в таблицу table.csv
. (Вот она.)
-
- Нужно выяснить, какой score считать низким, какой средним, а какой высоким.
-
- Реализовать алгоритм, который будет принимать на вход score и возвращать следующее действие: вывести ответ пользователю, переспросить пользователя или перевести на оператора.
-
- Обосновать, почему был выбран именно такой алгоритм и именно такие параметры для него.
-
- Предложить метрику для определения точности своего алгоритма и посчитайте её значение для данных из table.csv.
Более обстоятельный разбор решения предложен в GoogleColab и доступен по ссылке:
Опираясь на данные можно утверждать что:
Score следует считать низким
, когда его значение в диапазоне от 26.28 и до 32.5
Score следует считать средним
, когда его значение в диапазоне от 34.18 и до 41.01
Score следует считать высоким
, когда его значение в диапазоне от 81.68 и до 91.48
Алгоритм принятия решения построен основан на доверительном интервале с погрешностью 5%. Реализован на проверке вхождения переданного значения "Score" в один из трех интервалов:
0 <= score < 34.18 - (уверенность низкая) - перевести на оператора 34.18 < score < 81.68 - (уверенность средняя) - переспросить пользователя 81.68 < score <= 100 - (уверенность высокая) - вывести ответ пользователю
Прежде всего хочу сообщить что выборка была очень маленькая (всего 366 строк), что в определенной степени ограничивает точность модели.Тем не менее, исходя из предложенных данных, мой выбор интервалов основывается на следующих соображениях:
Хотя области доверителных интервалов ограничены значениями 26.28 и 91.48, я их отбросил потому что в реальности значения находятся в интервале от 0 и до 100. Правый конец первого интервала я осознанно сместил на начало доверительного интервала значений средней уверенности (34.18 вместо 32.5). Обосновываю свое решение соображениями экономии сил оператора. Его и так часто зовут. Считаю целесообразным давать боту больше шансов на попытку понять собеседника. Правый конец второго интервала я также сместил на начало доверительного интервала значений средней уверенности (81.68 вместо 41.01). Обосновываю свое решение соображениями клиентоориентированности. На мой взгляд лучше уж бот переспросит чем будет отвечать некорректно.Считаю что нервы клиента следует поберечь.
Метрикой оценки точности выступает доверительный интервал. Соответственно для данных из таблицы "table.csv."
- точность алгоритма составляет 95%
. Соответственно погрешность 5%
.
Алгоритм использует данные из таблицы. Поэтому таблица(table.csv.
) далжна быть в той же директории что и сам алгоритм(main.py
). Если таблица будет дополнена новыми данными, алгоритм будет точнее. Для проверки работы алгоритма передайте число от 1 до 100 в функцию BotDecision и выведите на печать. Например так:
print(BotDecision(88))
MaffinWare
- XanderMoroz - Все работы