1

我用 Facebook Prophet创建了一个模型。我现在想知道从在线 Web 应用程序 (Django) 访问这些预测的“最佳”方式是什么。

要求是我必须每周使用来自我的 Django 应用程序 (PostgreSQL) 的数据来训练/更新我的模型。预测将被保存,我希望能够从我的 Django 应用程序调用/访问这些数据。

在我查看了 Google Cloud 和 AWS 之后,我找不到任何可以通过 API 访问预测的方式来托管我的模型的解决方案。

我现在解决这个问题的最佳想法/方法:

1)构建一个 Flask 应用程序,每周训练我的模型。预测保存在 PostgreSQL 中。数据将是从我的 Django Web 应用程序每周导出的 CSV 文件。

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

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

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

1) 预测来自 PostgresSQL 数据库的数据。

2) 在 Django Web 应用程序中提供预测。

4

2 回答 2

1

从 Prophet 提供预先计算的预测值的最简单方法是从 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")
于 2019-07-13T14:57:44.760 回答
0

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

我的解决方案:

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

项目层次结构:

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

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

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

于 2020-07-18T14:15:57.243 回答