You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@s2graph.apache.org by "DOYUNG YOON (JIRA)" <ji...@apache.org> on 2018/09/06 03:13:00 UTC

[jira] [Created] (S2GRAPH-240) Add management api for Experiment and Bucket.

DOYUNG YOON created S2GRAPH-240:
-----------------------------------

             Summary: Add management api for Experiment and Bucket.
                 Key: S2GRAPH-240
                 URL: https://issues.apache.org/jira/browse/S2GRAPH-240
             Project: S2Graph
          Issue Type: Improvement
          Components: s2core
            Reporter: DOYUNG YOON


h1. Background

Experiment and Bucket exist to support A/B bucket test.

Here is how they can be used for bucket test.

1. Experiment: Experiment represents a single API endpoint for experimenting multiple buckets. 

2. Create Bucket: Bucket contains single s2graph query template in JSON. it can be thought of as the stored procedure. 

A single experiment can have one to many buckets. 

Without specifying the bucket name, experiment follows traffic ratio to select which bucket to select the given user's POST request, which contains variables need to be interpolated into stored query template in the selected bucket.

h2. Example.

Here is one example configuration for a single experiment.

{noformat}
Experiment 1:
	Bucket A(1~99): 99% of requests will be lead to this bucket.
	Bucket B(99~100): 1% of requests will be lead to this bucket.
{noformat}

Bucket A: following is example of s2graph query to recommend moivies for the user.

{noformat}
{
  "select": [
    "movie_id"
  ],
  "srcVertices": [
    {
      "serviceName": "s2graph",
      "columnName": "user_id",
      "id": "[[USER_ID]]"
    }
  ],
  "steps": [
  	{
  		"step": [
	      {
	        "label": "user_watched_movies",
	        "limit": 10
	      }
	    ]
  	}, 
    {
    	"step": [
    		{
	        "label": "similar_movie_model_x",
	        "limit": 10
	      }
    	]
    }
  ]
}
{noformat}

Note that to test two logic, similar_movie_model_x and similar_movie_model_y, we need to create two buckets, each per model. 

Also, the changing part of this query is only `[[USER_ID]]`, so register template as a bucket and client send only changing variables.

{noformat}
curl -XPOST -H 'Content-Type:application/json' localhost:9000/graphs/experiment/access_token_for_this_experiment/experiment_name/id -d '
{
	"[[USER_ID]]": "steamshon"
}
'
{noformat}

Given user request, Experiment builds complete s2graph query mixing payload and registered template which yield "similar movies to user watched".

This experiment includes `S2-Impression-Id`(bucket name) which indicate the bucket name that built result. Once the user makes the conversion, the client send feedback edge as follow.

{noformat}
{
	"timestamp": "now",
	"from": "user_id", 
	"to": "S2-Impression-Id value",
	"label": "movie_recommend_feedback",
	"props": {
		"conversion_type": "imp/click/etc"
	}
}
{noformat}

Once this data is available, we can decide which bucket is best based on real user feedback.

h1. Suggestion

Since it is a handy feature, there is no management(CRUD) API on Bucket and Experiment. 

It would be great if we can polish this feature more.

1. support GraphQL in Bucket: would be better if we can use GraphQL query in Bucket.
2. add management API.




--
This message was sent by Atlassian JIRA
(v7.6.3#76005)