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

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

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

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

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

{
    "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."
            }
        ]
    }
}

Вот ссылка на общедоступную версию эксперимента

Любая помощь будет оценена по достоинству.

Спасибо.

введите описание изображения здесь


person BigBadOwl    schedule 19.03.2018    source источник
comment
Можно ли показать, как выглядит ваш рабочий процесс в ML Studio? Моя первоначальная мысль заключалась в том, как функции встраиваются в модель, но я не могу быть уверен. :)   -  person Jon    schedule 19.03.2018
comment
Конечно, но это мало ценно, так как это далеко не функционально.   -  person BigBadOwl    schedule 19.03.2018
comment
Я бы рекомендовал разделить ваши данные тоже. Это должно помочь при оценке производительности вашей модели.   -  person Jon    schedule 19.03.2018


Ответы (2)


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

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

[...]

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

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

Таким образом, вам необходимо выполнить предварительную обработку данных столбца файла csv (идентификатор пользователя, действие, дата и время и т. д.), чтобы сохранить все данные столбца в диапазоне [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].


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

  • Идентификатор пользователя может быть числом с плавающей запятой

  • Действие — это целое число (если вы получили менее 100 действий) или число с плавающей запятой (если более 100 действий)

  • Дата и время будут разделены на два целых числа (или одно целое и одно с плавающей запятой), см. ниже:


Относительно:

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

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

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

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

    • 0: Between 00:00 & 00:15
    • 1: с 00:15 до 00:30
    • 2: с 00:30 до 00:40
    • [...]
    • 95 : с 23:45 до 00:00.

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

person A STEFANI    schedule 22.03.2018

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

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

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

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

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

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

person Jon    schedule 21.03.2018