Новичок: с чего начать, учитывая проблему, прогнозировать будущий успех или нет - PullRequest
1 голос
/ 24 сентября 2010

У нас был производственный веб-продукт, который позволяет пользователям делать прогнозы относительно будущей стоимости (или спроса) товаров, исторические данные содержат около 100 тыс. Примеров, каждый пример имеет около 5 параметров;

Рассмотримкласс данных, называемый предикатом:

prediction {
    id: int
    predictor: int    
    predictionDate: date
    predictedProductId: int
    predictedDirection: byte  (0 for decrease, 1 for increase)
    valueAtPrediciton: float
}

, и класс парных результатов, который измеряет результат прогноза:

predictionResult {
    id: int
    valueTenDaysAfterPrediction: float
    valueTwentyDaysAfterPrediction: float
    valueThirtyDaysAfterPrediction: float
}

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

success(p: prediction, r: predictionResult): bool = 
    count: int 
    count = 0

    // value is predicted to fall
    if p.predictedDirection = 0 then
       if p.valueAtPrediciton > r.valueTenDaysAfterPrediction then count = count + 1
       if p.valueAtPrediciton > r.valueTwentyDaysAfterPrediction then count = count + 1
       if p.valueAtPrediciton > r.valueThirtyDaysAfterPrediction then count = count + 1

    // value is predicted to increase
    else
       if p.valueAtPrediciton < r.valueTenDaysAfterPrediction then count = count + 1
       if p.valueAtPrediciton < r.valueTwentyDaysAfterPrediction then count = count + 1
       if p.valueAtPrediciton < r.valueThirtyDaysAfterPrediction then count = count + 1

    // success if count = 2 or count = 3
    return (count > 1)

Все в классе прогнозирования известно в тот момент, когда пользователь отправляет форму, и информация вПредсказание Результат неизвестен до позже;В идеале модель или алгоритм могут быть получены из нашей трехлетней истории, что алгоритм применяется к новому предсказанию, мы можем получить вероятность того, будет ли он успешным или нет (я был бы рад с булевым флагом Y / N, чтобыинтересно это или нет).

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

Спасибо

1 Ответ

8 голосов
/ 25 сентября 2010

Особенности

Первое, что вам нужно сделать, это решить, какую информацию вы будете использовать в качестве доказательства, чтобы классифицировать прогноз пользователя как точный или нет. Например, вы могли бы начать с простых вещей, таких как личность пользователя, делающего прогноз, и его историческая точность при прогнозировании по тем же или аналогичным товарам. Эта информация будет предоставлена ​​нижестоящим инструментам машинного обучения в виде функций , которые будут использоваться для классификации предсказаний пользователей.

Данные обучения, разработки и тестирования

Вы захотите разделить свои 100 тыс. Исторических примеров на три части: обучение, разработка и тестирование. Вы должны поместить большую часть данных, скажем, 80%, в ваш обучающий набор. Это будет набор данных, который вы используете для обучения вашего классификатора точности прогнозирования. Вообще говоря, чем больше данных вы используете для обучения вашего классификатора, тем более точной будет полученная модель.

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

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

Классификатор / ML-пакеты

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

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

Например, если вы просто делаете двоичную классификацию того, является ли предикат пользователя точным или нет, вы можете попробовать support-vector-machines (SVM) . Их основная формулировка ограничена выполнением бинарных предсказаний. Но, если это все, что вам нужно, они часто являются хорошим выбором, поскольку они могут привести к очень точным моделям.

Однако время, необходимое для обучения SVM, плохо масштабируется с размером обучающих данных. Для обучения значительным объемам данных вы можете использовать что-то вроде случайные леса . Когда случайные леса и SVM обучаются на наборах данных одинакового размера, случайные леса обычно создают модель, которая либо точна, либо почти точна, как модель SVM. Тем не менее, случайные леса могут позволить вам использовать больше обучающих данных, и использование большего количества обучающих данных обычно повышает точность вашей модели .

Копаем глубже

Вот несколько указателей на другие хорошие места, чтобы начать машинное обучение

...