Предсказание следующего числа в последовательности – анализ данных

Вопрос или проблема

Я новичок в машинном обучении и работаю над проектом, где мне дана последовательность целых чисел, все из которых находятся в диапазоне от 0 до 70. Моя цель — предсказать следующее целое число в последовательности, зная предыдущие 5 целых чисел из той же последовательности. Нет много другой информации о самой последовательности целых чисел (например, как была получена последовательность и т.д.).

Вот что я попробовал.

  1. Первое, что пришло мне в голову, это использовать модель регрессии LSTM с 5 временными шагами на входе и одним выходом (соответствующим следующему целому числу в последовательности – в Keras это было бы return_sequences=False). Я передал 5 предыдущих целых чисел как входные данные. Это привело к тому, что модель предсказывала в основном среднее значение (~30) все время.
  2. Я попробовал модель в пункте (1), но с большим количеством временных шагов на входе (скажем, 100), но все равно без улучшений.
  3. Затем я попробовал (1) и (2), но на этот раз используя разницу между последовательными целыми числами в качестве входных данных и пытаясь предсказать разницу до следующего целого числа в последовательности. Результаты с этим все еще плохие.
  4. Затем я попробовал модель классификации LSTM, кодируя входные и выходные данные с помощью one-hot, так как я знаю, что все целые числа в последовательности находятся в диапазоне от 0 до 70. Снова нет улучшений.
  5. Затем я попробовал модель seq2seq (кодировщик-декодировщик) LSTM с 5 входами в кодировщике и 5 выходами в декодировщике, где правильные выходные данные также подавались в декодировщик (учительская форсировка). Все равно результаты плохие.

На этом этапе я начал сомневаться, смогу ли я обучить модель на данных, и является ли предоставленная информация просто набором случайных целых чисел.

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

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

Насколько я понимаю, поскольку значения очень близки к нулю, это означает, что данные случайны. Это так?

Я также использовал statsmodels “plot_acf”, и вот график, который я получил для разницы между последовательными целыми числами.

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

Я вижу, что есть некоторая отрицательная корреляция, когда задержка равна 1. Почему это не отображается на графике с использованием pandas’ autocorrelation_plot()?

Я также попробовал создать модель AR (авторегрессия), но результаты по-прежнему плохие.

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

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

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

Интересная проблема. График автокорреляции pandas указывает на то, что данные случайны.

Насколько хорошо вы знаете источник? Достоверно ли, что последовательность на самом деле случайна?

Вы просматривали данные и строили гистограмму количества появлений целых чисел? Они появляются равномерно или некоторые встречаются чаще других?

Одна из вещей, которую я думаю, вы должны попробовать, это пересформулировать вашу модель LSTM. Я не думаю, что это проблема регрессии, даже если целевая переменная – это одно целое число. Это проблема классификации с 70 классами. Попробуйте рассматривать это таким образом и используйте функцию потерь категориальной кросс-энтропии. В таком сценарии ~1.5% точности будет представлять собой случайное угадывание. Может ли модель сделать лучше, чем это?

Ответ или решение

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

1. Анализ случайности данных:

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

2. Гистограмма и распределение:

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

3. Подход к моделированию:

Вы правильно заметили, что данный случай можно рассмотреть как задачу классификации вместо регрессии. Поскольку ваше целевое значение может принимать одно из 71 значений (от 0 до 70), логично использовать модель, которая основана на классификации. Вот шаги, которые можно предпринять:

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

  • Используйте функцию потерь categorical_crossentropy, соответствующую вашей задаче классификации. Убедитесь, что вашим выходным данным будет присвоено одно горячее кодирование (one-hot encoding) для оценки вероятностей каждого класса.

  • Убедитесь, что ваши данные разбиты на обучающую и тестовую выборки. Это поможет вам оценить, как модель обобщается на невидимых данных.

4. Улучшение результатов:

  • Проверьте, достаточно ли у вас данных для обучения. Если у вас небольшое количество примеров, это может негативно повлиять на обучение модели.

  • Попробуйте использовать предобученные модели или архитектуры, такие как GRU, которые могут быть менее склонны к переобучению и более эффективны в ваших задачах.

  • Исходя из архитектуры вашей модели, вы также можете рассмотреть использование слоев дропаут (dropout) для снижения вероятности переобучения.

5. Итоговые рекомендации:

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

Если у вас появятся еще вопросы или нужна дополнительная помощь, не стесняйтесь спрашивать. Удачи вам в вашем проекте!

Оцените материал
Добавить комментарий

Капча загружается...