Предсказание пользователям следующего действия в зависимости от текущего дня и времени

Я использую Microsoft Azure Machine Learning Studio, чтобы попробовать эксперимент, в котором я использую предыдущую аналитику, захваченную о пользователе (одновременно, в день), чтобы попытаться предсказать их следующее действие (исходя из дня и времени), чтобы я мог корректировать пользовательский интерфейс соответственно. Поэтому, если пользователь обычно посещает определенную страницу каждый четверг в 13:00, я бы хотел предсказать это поведение.

Предупреждение. Я полный новичок с ML, но просмотрел довольно много видеороликов и работал над учебниками, такими как пример рекомендаций для фильма.

У меня есть набор данных csv с userid, action, datetime и хотел бы подготовить модель рекомендаций для спичечных коробков, которая, по моему мнению, является лучшей моделью для использования. Я не вижу способа использовать дату/время в обучении. Идея заключалась в том, что если бы я мог передать идентификатор пользователя и дату, то модель рекомендации должна была бы дать мне, вероятно, результат того, что этот пользователь, скорее всего, сделает.

Я получаю результаты от предсказательной конечной точки, но конечная точка обучения дает следующую ошибку:

{
    "error": {
        "code": "ModuleExecutionError",
        "message": "Module execution encountered an error.",
        "details": [
            {
                "code": "18",
                "target": "Train Matchbox Recommender",
                "message": "Error 0018: Training dataset of user-item-rating triples contains invalid data."
            }
        ]
    }
}

Ответы

Ответ 1

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

Вероятно, проблема связана с диапазоном данных оценки. Там верхний предел для диапазона оценки, потому что обучение становится дорогим, если диапазон между наименьшим и самым большим рейтингом слишком велик.

[...]

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

В соответствии с этим MSDN, обратите внимание, что вы не можете иметь промежуток между знаками min и max выше 100.

Поэтому вы должны сделать предварительную обработку данных столбцов файла csv (userid, action, datetime и т.д.), Чтобы сохранить все данные столбцов в диапазоне [0-99].

См. Ниже реализацию Python (чтобы разделить логику):

#!/usr/bin/env python
# -*- coding: UTF-8 -*- 

big_gap_arr = [-250,-2350,850,-120,-1235,3212,1,5,65,48,265,1204,65,23,45,895,5000,3,325,3244,5482] #data with big gap

abs_min =  abs(min(big_gap_arr)) #get the absolute minimal value
max_diff= ( max(big_gap_arr) + abs_min ) #get the maximal diff

specific_range_arr=[]
for each_value in big_gap_arr:
    new_value = ( 99/1. * float( abs_min + each_value) / max_diff ) #get a corresponding value in the [0,99] range
    specific_range_arr.append(new_value)

print specific_range_arr #post computed data => all in range [0,99]

Что дает вам:

[26.54494382022472, 0.0, 40.449438202247194, 28.18820224719101, 14.094101123595506, 70.3061797752809, 29.71769662921348, 29.76825842696629, 30.526685393258425, 30.31179775280899, 33.05477528089887, 44.924157303370784, 30.526685393258425, 29.995786516853933, 30.27387640449438, 41.01825842696629, 92.90730337078652, 29.742977528089888, 33.813202247191015, 70.71067415730337, 99.0]

Обратите внимание, что все данные теперь находятся в диапазоне [0,99]


После этого процесса:

  • Идентификатор пользователя мог бы быть float вместо целого

  • Действие - целое число (если вы получили менее 100 действий) или float (если более 100 действий)

  • Datetime будет разделяться на два целых числа (или одно целое и одно поплавок), см. Ниже:


Что касается:

(A) способ использования даты/времени в обучении

Вы можете разделить ваше время на два столбца, например:

  • один столбец для буднего дня:

    • 0: воскресенье
    • 1: понедельник
    • 2: вторник
    • [...]
    • 6: суббота
  • один столбец за время дня:

    • 0: Между 00:00 и 00:15
    • 1: Между 00:15 и 00:30
    • 2: Между 00:30 и 00:40
    • [...]
    • 95: Между 23:45 и 00:00

Если вам нужна улучшенная гранулярность (здесь это 15-минутное окно), вы также можете использовать число с плавающей точкой для столбца времени.

Ответ 2

Поэтому, из-за этого, я думаю, я могу увидеть, где может быть проблема. Я думаю, что первые три вкладчика Рекомендатора Поезда Matchbox необходимо заполнить для точного предсказания. Я включу скриншоты образца для рекомендаций ресторанов.

Первым входом будет набор данных, состоящий из пользователя, элемента и рейтинга. Ratings data

Вторым входом будут функции каждого пользователя. User data

И третий вход будет особенностью каждой функции (ресторан в этом случае). Restaurant data

Поэтому, чтобы помочь с вопросом о дате/времени, мне интересно, нужно ли собирать данные, чтобы они соответствовали тому, что было похоже на ресторан и пользовательские данные.

Я знаю, что это не так много, но я надеюсь, что это поможет вам вести правильный путь.