Вопрос или проблема
Наш продукт имеет анкету для внедрения, которая задает одинаковые 58 вопросов (с числовыми ответами) каждому новому пользователю. Это много вопросов, поэтому нам хотелось бы сократить количество вопросов, которые мы задаем каждому новому пользователю.
Мы считаем, что вместо того чтобы задавать все вопросы каждый раз, мы могли бы создать систему, которая будет задавать наиболее “информативный” вопрос в каждый момент, учитывая все предыдущие ответы пользователя – то есть вопрос, который наилучшим образом помогает улучшить точность нашего прогнозирования, как они ответят на оставшиеся вопросы.
Я визуализирую это как многослойное дерево, где каждая нода представляет вопрос, а каждая ветвь представляет диапазон ответов на этот вопрос. Каждый пользователь видит вопрос на корневой ноде, затем каждый последующий ответ, который они дают, определяет, как они перемещаются по дереву.
Вопросы заканчиваются, когда они достигают листовой ноды (например, на глубине 7), но даже если они покинут процесс внедрения раньше, вопросы, которые им были заданы, все равно должны предоставить наилучшее возможное предсказание о том, как они ответят на все оставшиеся вопросы из 58.
Вопрос в том, как мы построим это дерево? У нас есть данные от 348 клиентов, которые ответили на все 58 вопросов, так что это должно быть возможно – но какой лучший алгоритм?
Мы пробовали RandomForestRegressor из SciKit, но это, похоже, совсем не подходит для этой задачи, так как деревья совсем не в этом формате. Как и другие алгоритмы, которые мы рассмотрели, он отлично подходит для прогнозирования на основе их предыдущих ответов – но не для определения, какие вопросы задавать.
Может кто-нибудь предложить алгоритм (или класс алгоритмов), который способен построить это дерево?
Каковы результаты этой анкеты? Это бинарное решение, или набор нескольких взаимно исключающих классов (мульти-метка) или набор нескольких наложенных классов (мульти-метка и мульти-класс)?
Предполагая бинарный или мульти-меточный подход, деревья решений с хорошей визуализацией должны предоставить вам меньшие деревья. Они могут не иметь семантического смысла, но если вы знаете предмет, вы должны быть в состоянии создать новую анкету, которая будет иметь смысл.
Я использую деревья решений sklearn https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html
родная визуализация довольно полезна, для более красивых и детализированных графиков я использовал https://explained.ai/decision-tree-viz/
Я совсем не уверен, что это идеальное решение, но это легкое решение: просто используйте регрессионное дерево (например, DecisionTreeRegressor
из sklearn), обучая его с обоими независимыми и зависимыми переменными (X
и y
), которые являются “баллами боли” вопросов. На каждой точке деления, функция, по которой вы делите, конечно, дает отличную информацию о той целевой переменной, но она также информирует о других целях, что вы и предлагаете как грубую идею в вашем посте. Деление, которое выбирается, будет тем, которое в среднем дает лучшую информацию о всех ответах на вопросы. Это, как упоминает Nuclear Hogie в комментарии, решение, построенное жадно.
Это немного усложняется тем, что ваш балл боли рассчитывается из двух отдельных оценок, но я думаю, что деление и прогнозирование баллов боли все еще могут быть приемлемы? Может быть, большая проблема в том, что вы можете делить по одному и тому же вопросу более одного раза, на разных порогах боли. Предполагаю, что то, что вам действительно нужно, это сделать более чем бинарное деление, одно дитя для каждого возможного ответа на вопрос; семейство деревьев Куинлана (в отличие от CART) могло бы это сделать.
Вот предложение, предполагая, что все ответы на одной шкале (например, пользователи могут отвечать значениями от 1 до 5 на все 58 вопросов).
Выбор первого вопроса для отображения
- Расчитайте среднее и дисперсию всех ответов на каждый вопрос (обозначьте дисперсию вопроса $i$ как $V_i$)
- Выберите вопрос с наибольшей дисперсией, чтобы отобразить его первым, то есть $\arg \max_i V_i$
Предполагая, что пользователь отвечает, какой вопрос должен быть отображен вторым? Согласно тому же размышлению, это должен быть вопрос с следующей наивысшей дисперсией, но эта дисперсия больше не равна $V_i$, поскольку, ответив на первый вопрос, пользователь предоставил информацию, которая уменьшает дисперсии всех оставшихся вопросов. Как нам рассчитать эти апостериорные дисперсии?
Чтобы избежать экспоненциальной сложности модели условных вероятностей с 58 случайными переменными, я предлагаю сделать следующее упрощающее предположение: Ответы на вопросы следуют многомерному нормальному распределению. Это означает, что вектор средних значений и матрица дисперсий являются всеми параметрами, которые вам нужны для продолжения.
Выбор второго вопроса и далее
- После того как на первый вопрос (тот, который имеет наибольшую дисперсию ответа) был дан ответ, дисперсии всех остальных вопросов равны $V_{i|1} = V_i*(1-\rho_{i,1}^2)$. Это означает, что вы можете рассчитать новые дисперсии напрямую из матрицы дисперсий. Найдите тот, который имеет максимальную дисперсию ($\arg\max_i V_{i|1}$), и отобразите этот вопрос вторым.
Следующий вопрос для отображения должен быть тот, у которого наибольшая апостериорная дисперсия с учетом выбора 1-го и 2-го вопросов.
Самый простой способ узнать, какой именно, это провести линейные регрессии с вопросами, выбранными для 1-го и 2-го в качестве объясняющих переменных. SSE (сумма квадратов ошибок) этих регрессий (вы запустите одну такую регрессию для каждого из оставшихся 56 вопросов) равна апостериорной дисперсии с учетом 1-го и 2-го.
Поскольку порядок вопросов детерминирован (не зависит от выбора ответа), целесообразно продолжать запускать такие регрессии, чтобы определить четвертый, пятый, шестой вопросы для отображения и так далее.
Ответ или решение
Для оптимизации анкеты по вовлечению новых пользователей можно значительно сократить ее длину, задавая только наиболее информативные вопросы на каждом этапе. Рассмотрим детальный подход к построению системы, которая позволит достичь этой цели, основываясь на представленных данных от 348 клиентов, ответивших на 58 вопросов.
1. Структурирование системы вопросов
Для начала важно визуализировать процесс, который мы хотим создать. Мы можем использовать дерево, где каждый узел представляет вопрос, а каждое ребро — возможные ответы на этот вопрос. Каждого нового пользователя направляют по этому дереву, начиная с корневого узла, и каждый его ответ определяет, по какому пути он будет двигаться далее.
2. Выбор алгоритма
Для эффективного выбора вопросов я рекомендую использовать алгоритмы, основанные на деревьях решений. Например, можно рассмотреть следующие подходы:
-
Деревья решений на основе регрессии (Decision Tree Regressor): Этот алгоритм позволяет не только прогнозировать ответы на вопросы, но и оценивать, какие вопросы предоставляют наибольшую информацию о оставшихся вопросах. Метод подразумевает построение дерева, в процессе которого на каждом узле выбирается вопрос, позволяющий снизить неопределенность в ответах на другие вопросы.
-
Алгоритмы, основанные на максимизации информации (Information Gain): Можно использовать эти методы для определения того, какие вопросы представляют наибольшую информацию на каждом шаге, основываясь на предыдущих ответах.
3. Подход к построению дерева вопросов
a. Первый вопрос
Для выбора первого вопроса предложите следующий алгоритм:
- Рассчитайте среднее и дисперсию для каждого вопроса.
- Выберите вопрос с наибольшей дисперсией для начала; это обеспечит максимальную информативность.
b. Последующие вопросы
После ответа на первый вопрос важно переоценить дисперсии оставшихся вопросов, принимая во внимание информацию, полученную из предыдущих ответов. Рекомендуется использовать следующую пошаговую стратегию:
- После каждого ответа обновляйте дисперсии других вопросов с помощью правил о многомерном нормальном распределении.
- Находите вопросы с наибольшей апостериорной дисперсией и задавайте их в следующем порядке.
c. Оптимизация выбора вопросов
Для нахождения наилучшей последовательности вопросов может потребоваться использование линейной регрессии, для каждого из оставшихся вопросов, чтобы оценить, насколько новая информация уменьшает дисперсию возможных ответов. Каждая итерация будет позволять выбирать следующий вопрос на основе предыдущих.
Заключение
Оптимизация первой анкеты для новых пользователей с 58 вопросов — это сложная, но решаемая задача. Использование деревьев решений, правил о максимизации информации и методов линейной регрессии обеспечит более эффективный процесс, который будет не только легким для пользователей, но и предоставит ценную информацию для вашего продукта. Такая структура вопросов позволит значительно сократить длину анкеты, сосредоточив внимание на наиболее информативных аспектах пользовательского опыта.