如何为我的 Django 应用程序提供 Prophet 模型?

How to serve a Prophet model for my Django application?

created a model 使用 Facebook Prophet。我现在想知道从在线 Web 应用程序 (Django) 访问这些预测的 "best" 方法是什么。

要求是我必须每周 train/update 我的模型使用来自我的 Django 应用程序 (PostgreSQL) 的数据。预测将被保存,我希望能够 call/access 从我的 Django 应用程序中获取这些数据。

在我研究了 Google Cloud 和 AWS 之后,我找不到任何可以通过 API.

访问预测的方式托管我的模型的解决方案

我现在最好idea/approach解决这个问题:

1) Build a Flask application 每周训练我的模型。预测保存在 PostgreSQL 中。数据将从我的 Django 网络应用程序每周导出 CSV。

2) 在我的 Flask 应用程序中创建一个 API,它可以从数据库访问预测。

3) 在我的 Django 应用程序中,我可以调用 API 并在需要时访问数据。

我很确定我的方法听起来很坎坷,而且可能不是它的实现方式。您对如何更好地解决它有任何反馈或想法吗?简而言之:

1) 从 PostgresSQL 数据库预测数据。

2) 在 Django 网络应用程序中提供预测服务。

从 Prophet 提供 pre-calculated 预测值的最简单方法是从 S3 或其他文件服务器提供 CSV 文件。您可以每隔几天刷新一次模型并将预测输出写入 S3

import boto3
from io import StringIO

DESTINATION = bucket_name

def write_dataframe_to_csv_on_s3(dataframe, filename):
    """ Write a dataframe to a CSV on S3 """
    print("Writing {} records to {}".format(len(dataframe), filename))
    # Create buffer
    csv_buffer = StringIO()
    # Write dataframe to buffer
    dataframe.to_csv(csv_buffer, sep=",", index=False)
    # Create S3 object
    s3_resource = boto3.resource("s3")
    # Write buffer to S3 object
    s3_resource.Object(DESTINATION, filename).put(Body=csv_buffer.getvalue())

results = forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].copy()

write_dataframe_to_csv_on_s3(results, output+file_name+".csv")

我访问这个问题的原因之一是我不确定该走哪条路。答案似乎是一个很好的选择。 但是,我对我的 Django 应用程序没有太多限制,我正在为与我有类似用例的人想出一种更简单的方法。

我的解决方案:

  • 我有一个 Django 项目、一个为我的网站提供服务的 Django 应用程序,以及一个 Django 应用程序 用于先知模型。
  • Prophet 模型每天将被重新训练一次(在某些情况下)。
  • 每天训练模型,它都会预测新数据并将预测保存到 CSV 文件(可以存储在数据库中)。它还使用 pickle.
  • 存储训练模型
  • 现在,我可以通过 导入 Django 应用访问 训练模型 和一些 预定义预测 我需要的地方。

项目层次结构:

project/
    project/
    django-app-for-website/
    django-app-for-prophet/
    manage.py
    requirements.txt

尽管我的项目的性能没有受到太大影响,但它现在不是我的优先事项,但它可以是你的,在这种情况下,我不会推荐这个解决方案。

如果您正在寻找为 Prophet 模型提供服务的最简单方法,这就是我能想到的。只是另一个 可能的 解决方案。