Как предсказать следующую дату с помощью Python ML

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

У меня есть список из примерно 10 дат в порядке возрастания. Это даты, когда здание было открыто. Мне нужно предсказать следующую дату, используя это. Я попробовал scikit learn, как показано ниже

import datetime
from sklearn.linear_model import LinearRegression

dates = available_dates

# Преобразовать даты в объекты datetime.datetime
datetime_dates = [datetime.datetime.combine(date, datetime.datetime.min.time()) for date in dates]

# Создать X и y для регрессии
X = [[date.timestamp()] for date in datetime_dates]
y = list(range(1, len(dates) + 1))

# Создать модель линейной регрессии
regression_model = LinearRegression()

# Подогнать модель под данные
regression_model.fit(X, y)

# Предсказать следующую дату, когда дом станет доступным
next_date_timestamp = regression_model.predict([[datetime_dates[-1].timestamp() + 24 * 60 * 60]])
next_date = datetime.datetime.fromtimestamp(next_date_timestamp[0])

print("Следующая доступная дата:", next_date.date())

Следующая дата всегда получается 1969-12-31

Это из-за того, что набор данных слишком мал?

Мне нужно использовать что-то другое? Или я могу это как-то исправить?

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

Так что LinearRegression по сути просто пытается предсказать линию, y = mx + b. В вашем случае вы подаете ему y = [0,1,2,3,4,5,6,7,8,9], так что после того, как вы обучили свою модель, когда вы вызываете predict, он, скорее всего, вернет очень маленькое число где-то между 0 и 9. Затем вы подаете это в timestamp и добавляете 24 * 60 * 60, и интерпретируете это как дату. Python (и другие языки) интерпретируют timestamp 0 как 1 января 1970 года, так что timestamp, который вы получаете от LinearRegression, будет где-то в этом районе.
Полностью возможно использовать LinearRegression, если вы можете сформулировать свою задачу как линию, то есть y=mx+b, но я бы предложил более простой подход для начала. Вместо использования LinearRegression вы можете найти средние разницы между вашими последними двумя временами, добавить это к вашему последнему времени и использовать это как предсказание первого порядка. Предсказание второго порядка использовало бы среднее из ваших двух последних разниц и так далее.

Это выглядело бы примерно так:

dates = []
dates.append(datetime.datetime(2004, 2, 4))
dates.append(datetime.datetime(2005, 3, 5))
dates.append(datetime.datetime(2006, 4, 6))
diff = dates[2].timestamp()- dates[1].timestamp()
dates[2].timestamp() + diff
datetime.datetime.fromtimestamp(dates[2].timestamp() + diff, tz=None)

возвратит datetime.datetime(2007, 5, 7, 23, 0).
Обратите внимание, что это очень упрощенный подход, есть множество более сложных способов подхода к данным временных рядов (например, погуглите SARIMAX), но должно дать вам достаточно, чтобы начать. надеюсь поможет.

Вам нужно назначить значение 1 времени, когда дом доступен, и значение -1 времени, когда он недоступен. Это будет ваш “y”. Ваши X должны быть метками времени, но используйте pandas to_datetime (или что-то подобное, не уверен на память). Теперь вы можете дать новые временные метки (в будущем) для предсказания, доступен ли дом (1) или нет (-1).

python # Код на Python для предсказания даты завершения проекта по машинному обучению на основе ввода на естественном языке import datetime def predict_completion_date(project_topic, codes, language): # Реализуйте модель машинного обучения, чтобы предсказать дату завершения на основе входных параметров # Это функция-заглушка и должна быть заменена на настоящий код модели ML # Для демонстрационных целей предположим, что дата завершения через 30 дней с текущей даты current_date = datetime.datetime.now() completion_date = current_date + datetime.timedelta(days=30) return completion_date # Входные параметры project_topic = "www.ai.com" codes = ["Python", "Java", "C++"] language = "English" # Предсказать дату завершения predicted_date = predict_completion_date(project_topic, codes, language) print("Предсказанная дата завершения проекта на тему '{}': {}".formatpython

Код на Python для предсказания даты завершения проекта по машинному обучению на основе ввода на естественном языке

import datetime

def predict_completion_date(project_topic, codes, language):
# Реализуйте модель машинного обучения, чтобы предсказать дату завершения на основе входных параметров
# Это функция-заглушка и должна быть заменена на настоящий код модели ML

# Для демонстрационных целей предположим, что дата завершения через 30 дней с текущей даты
current_date = datetime.datetime.now()
completion_date = current_date + datetime.timedelta(days=30)

return completion_date

Входные параметры

project_topic = “www.ai.com”
codes = [“Python”, “Java”, “C++”]
language = “English”

Предсказать дату завершения

predicted_date = predict_completion_date(project_topic, codes, language)
print(“Предсказанная дата завершения проекта на тему ‘{}’: {}”.format(project_topic, predicted_date))https://orca.security/demo-thanks/www.ai.comhttps://orca.security/demo-thanks/220.12.78.0/24220.12.78.0

.

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

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

Теория:

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

Альтернативные подходы, такие как временные ряды, могут быть более подходящими, поскольку они учитывают временные зависимости в данных. Часто используются модели SARIMAX (Seasonal Autoregressive Integrated Moving Average with eXogenous factors), которые могут приспосабливаться к сезонным паттернам и тенденциям.

Пример:

Рассмотрим, что у вас есть следующий набор данных дат:

import datetime

dates = [
    datetime.datetime(2023, 4, 1),
    datetime.datetime(2023, 5, 1),
    datetime.datetime(2023, 6, 1),
    datetime.datetime(2023, 7, 1),
    datetime.datetime(2023, 8, 1),
    datetime.datetime(2023, 9, 1),
    datetime.datetime(2023, 10, 1),
]

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

# Вычисление средний разницы между датами
diffs = [(dates[i+1] - dates[i]).days for i in range(len(dates)-1)]
average_diff = sum(diffs) / len(diffs)

# Предсказание следующей даты
next_date = dates[-1] + datetime.timedelta(days=average_diff)
print("Предсказанная следующая дата:", next_date.date())

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

Применение:

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

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

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

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

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

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