# digest-score The digest-score is the result of calculating the user's `interaction_score` which is how likely it is the user opens the library_item. ## Creating features Currently the features are materialized views created in the public schema. Before moving to production we should create a `features` schema. To create all the materialized views locally run the `create-features.sql` file with the psql command: `psql omnivore -f create_feature_views.sql` ## Training Currently we create a small random forest model, when running locally this will be saved to disk during training. The reason we use such a simple model is to focus on feature development. The model is mostly a guide to understand whether or not the features are relevant. To train the data run the following command: `NUM_DAYS_HISTORY=1000 SAMPLE_SIZE=100 python train.py` This will create a file: `predict_user_clicked_random_forest_pipeline-v001.pkl` ## Running the service Now that there is a model created, you can run the service using the following command: `LOAD_LOCAL_MODEL=true python app.py` To test the model make a curl request using your user id, for example: ### A single prediction ``` curl -d '{ "user_id": "2da52794-0dd2-11ef-9855-5f368b90f676", "item_features": { "site": "Omnivore Blog", "title": "this is a title", "author": "Tiago Forte", "subscription": "this is a subscriptionsdfsdfsdf", "has_thumbnail": true, "has_site_icon": true, "saved_at": "2024-05-27T04:20:47Z" }}' -H 'Content-Type: application/json' localhost:5000/predict ``` ### A batch prediction curl -d '{ "user_id": "2da52794-0dd2-11ef-9855-5f368b90f676", "items": { "134f883e-efd8-11ee-ae98-532a6874855a": { "library_item_id": "134f883e-efd8-11ee-ae98-532a6874855a", "site": "TikTok", "title": "this is a title", "author": "Tiago Forte", "subscription": "this is a subscriptionsdfsdfsdf", "has_thumbnail": true, "has_site_icon": true, "saved_at": "2024-05-27T04:20:47Z" }} }' -H 'Content-Type: application/json' localhost:5000/batch ### Make a prediction for a given user and library_item (for debugging only) ``` curl localhost:5000/users/2da52794-0dd2-11ef-9855-5f368b90f676/library_items/134f883e-efd8-11ee-ae98-532a6874855a/score { "score": { "score": 0.8, "interaction_score": 1.0, } } ``` ### Print the user's profile data (for debugging only) ``` curl localhost:5000/users/2da52794-0dd2-11ef-9855-5f368b90f676/features { "user_30d_interactions_site": { "count": [ { "site": "TikTok", "user_30d_interactions_site_count": 3 } ], "rate": [ { "site": "TikTok", "user_30d_interactions_site_rate": 0.75 } ] } } ```