Example gallery/Predict and explain a Kickstarter campaign success
Example level
Advanced
Endpoints
Dataset

Predict and explain a Kickstarter campaign success

The Data

An example of the monthly snapshot data of a Kickstarter campaign is presented as follow:

{
  "table_id": "Kickstarter",
  "robot_id": "Kickstarter",
  "run_id": "Kickstarter_2019-10-17T03_20_19_421Z",
  "data": {
    "id": 1520616480,
    "photo": {
      "key": "assets/017/354/475/d5a00110451f73f2c6a063d1f92d31f8_original.jpg",
      "full": "https://ksr-ugc.imgix.net/assets/017/354/475/d5a00110451f73f2c6a063d1f92d31f8_original.jpg?ixlib=rb-2.1.0&crop=faces&w=560&h=315&fit=crop&v=1499612954&auto=format&frame=1&q=92&s=9b85b3616201859d36af4967745282da",
      "ed": "https://ksr-ugc.imgix.net/assets/017/354/475/d5a00110451f73f2c6a063d1f92d31f8_original.jpg?ixlib=rb-2.1.0&crop=faces&w=352&h=198&fit=crop&v=1499612954&auto=format&frame=1&q=92&s=39e6ecaff12e9661247746a8e14dfa12",
      "med": "https://ksr-ugc.imgix.net/assets/017/354/475/d5a00110451f73f2c6a063d1f92d31f8_original.jpg?ixlib=rb-2.1.0&crop=faces&w=272&h=153&fit=crop&v=1499612954&auto=format&frame=1&q=92&s=63fcfacd257f2d9da50adce5d001f521",
      "little": "https://ksr-ugc.imgix.net/assets/017/354/475/d5a00110451f73f2c6a063d1f92d31f8_original.jpg?ixlib=rb-2.1.0&crop=faces&w=208&h=117&fit=crop&v=1499612954&auto=format&frame=1&q=92&s=580310163161ac825e09f30ae7c52685",
      "small": "https://ksr-ugc.imgix.net/assets/017/354/475/d5a00110451f73f2c6a063d1f92d31f8_original.jpg?ixlib=rb-2.1.0&crop=faces&w=160&h=90&fit=crop&v=1499612954&auto=format&frame=1&q=92&s=afb64f254c565542a9d19b0a41a7c8a8",
      "thumb": "https://ksr-ugc.imgix.net/assets/017/354/475/d5a00110451f73f2c6a063d1f92d31f8_original.jpg?ixlib=rb-2.1.0&crop=faces&w=48&h=27&fit=crop&v=1499612954&auto=format&frame=1&q=92&s=4de291e28134226b61d20dda999a17c5",
      "1024x576": "https://ksr-ugc.imgix.net/assets/017/354/475/d5a00110451f73f2c6a063d1f92d31f8_original.jpg?ixlib=rb-2.1.0&crop=faces&w=1024&h=576&fit=crop&v=1499612954&auto=format&frame=1&q=92&s=6315ae66a7bc5dee321118cdc7e298dd",
      "1536x864": "https://ksr-ugc.imgix.net/assets/017/354/475/d5a00110451f73f2c6a063d1f92d31f8_original.jpg?ixlib=rb-2.1.0&crop=faces&w=1552&h=873&fit=crop&v=1499612954&auto=format&frame=1&q=92&s=83833077db8cc251e5ded22c1f3b4040"
    },
    "name": "Playable Certification (Canceled)",
    "blurb": "Authenticate and certificate collectible gaming cards without losing their playability. This is possible thanks to the PC Sleeve.",
    "goal": 375000,
    "pledged": 24989,
    "state": "canceled",
    "slug": "playable-certification",
    "disable_communication": false,
    "country": "SE",
    "country_displayable_name": "Sweden",
    "currency": "SEK",
    "currency_symbol": "kr",
    "currency_trailing_code": true,
    "deadline": 1514120400,
    "state_changed_at": 1513702045,
    "created_at": 1491899309,
    "launched_at": 1511444960,
    "staff_pick": false,
    "is_starrable": false,
    "backers_count": 31,
    "static_usd_rate": 0.11861165,
    "usd_pledged": "2963.98652185",
    "converted_pledged_amount": 2963,
    "fx_rate": 0.10188445,
    "current_currency": "USD",
    "usd_type": "domestic",
    "creator": {
      "id": 1984360892,
      "name": "Felipe Garcia",
      "is_registered": null,
      "chosen_currency": null,
      "is_superbacker": null,
      "avatar": {
        "thumb": "https://ksr-ugc.imgix.net/assets/017/344/415/2854e64bf720927babc73e4d686186cb_original.JPG?ixlib=rb-2.1.0&w=40&h=40&fit=crop&v=1498991353&auto=format&frame=1&q=92&s=b0b7954efdeb54319b1e4faa9b703dcf",
        "small": "https://ksr-ugc.imgix.net/assets/017/344/415/2854e64bf720927babc73e4d686186cb_original.JPG?ixlib=rb-2.1.0&w=160&h=160&fit=crop&v=1498991353&auto=format&frame=1&q=92&s=b20d7bb4f7e472f70e2ba23ca346a4d7",
        "medium": "https://ksr-ugc.imgix.net/assets/017/344/415/2854e64bf720927babc73e4d686186cb_original.JPG?ixlib=rb-2.1.0&w=160&h=160&fit=crop&v=1498991353&auto=format&frame=1&q=92&s=b20d7bb4f7e472f70e2ba23ca346a4d7"
      },
      "urls": {
        "web": {
          "user": "https://www.kickstarter.com/profile/1984360892"
        },
        "api": {
          "user": "https://api.kickstarter.com/v1/users/1984360892?signature=1571370022.6e2fbc9ffaad29f35e678667bab789d0d6859abd"
        }
      }
    },
    "location": {
      "id": 908572,
      "name": "Uppsala",
      "slug": "uppsala-uppsala-se",
      "short_name": "Uppsala, Sweden",
      "displayable_name": "Uppsala, Sweden",
      "localized_name": "Uppsala",
      "country": "SE",
      "state": "Uppsala",
      "type": "Town",
      "is_root": false,
      "expanded_country": "Sweden",
      "urls": {
        "web": {
          "discover": "https://www.kickstarter.com/discover/places/uppsala-uppsala-se",
          "location": "https://www.kickstarter.com/locations/uppsala-uppsala-se"
        },
        "api": {
          "nearby_projects": "https://api.kickstarter.com/v1/discover?signature=1571342151.95bbb15acde242c3392afa754383a372c036bc23&woe_id=908572"
        }
      }
    },
    "category": {
      "id": 270,
      "name": "Gaming Hardware",
      "slug": "games/gaming hardware",
      "position": 1,
      "parent_id": 12,
      "color": 51627,
      "urls": {
        "web": {
          "discover": "http://www.kickstarter.com/discover/categories/games/gaming%20hardware"
        }
      }
    },
    "profile": {
      "id": 2957485,
      "project_id": 2957485,
      "state": "inactive",
      "state_changed_at": 1491899309,
      "name": null,
      "blurb": null,
      "background_color": null,
      "text_color": null,
      "link_background_color": null,
      "link_text_color": null,
      "link_text": null,
      "link_url": null,
      "show_feature_image": false,
      "background_image_opacity": 0.8,
      "should_show_feature_image_section": true,
      "feature_image_attributes": {
        "image_urls": {
          "default": "https://ksr-ugc.imgix.net/assets/017/354/475/d5a00110451f73f2c6a063d1f92d31f8_original.jpg?ixlib=rb-2.1.0&crop=faces&w=1552&h=873&fit=crop&v=1499612954&auto=format&frame=1&q=92&s=83833077db8cc251e5ded22c1f3b4040",
          "baseball_card": "https://ksr-ugc.imgix.net/assets/017/354/475/d5a00110451f73f2c6a063d1f92d31f8_original.jpg?ixlib=rb-2.1.0&crop=faces&w=560&h=315&fit=crop&v=1499612954&auto=format&frame=1&q=92&s=9b85b3616201859d36af4967745282da"
        }
      }
    },
    "spotlight": false,
    "urls": {
      "web": {
        "project": "https://www.kickstarter.com/projects/1984360892/playable-certification?ref=discovery_category_newest",
        "rewards": "https://www.kickstarter.com/projects/1984360892/playable-certification/rewards"
      }
    },
    "source_url": "https://www.kickstarter.com/discover/categories/games/gaming%20hardware"
  }
}

Essentially, we processed the snapshot data and organized the data into four tables:

  • The Categories table contains the information of campaigns' categories.
  • The Location table contains the information of campaigns' locations.
  • The Campaign Details table contains the detailed information of a campaign.
  • The Campaign Status table contains the status of a campaign at the snapshot time.
Kickstarter Data Schema

Predict the chance that a campaign can meets its goal by its deadline

To predict if a campaign can reach its goal, we can use the Predict query. An example query is presented as below. You can copy-paste the command to your terminal and test it out!

curl --request POST \
  --url https://aitoai-kickstarter.api.aito.ai/api/v1/_predict \
  --header 'content-type: application/json' \
  --header 'x-api-key: oKDEH1DZaz9l0ftZAXA3Q6a5yPtZEYG35y0UXYer' \
  --data '{
	"from": "project_status",
	"where": {
		"project_id.blurb": "Authenticate and certificate collectible gaming cards without losing their playability. This is possible thanks to the PC Sleeve.",
		"project_id.launched_date": 23,
		"project_id.launched_month": 11,
		"project_id.duration": {
			"$numeric": 30
		},
		"project_id.goal": {
			"$numeric": 375000
		},
		"project_category.slug": "games/gaming hardware",
		"project_location.country": "SE",
		"project_location.name": "Uppsala"
	},
	"predict": "reached_goal",
	"select": [
		"$p",
		"feature",
		"$why"
	]
}'

The response would look like (Note: The response can change due to updated data):

{
  "offset": 0,
  "total": 2,
  "hits": [
    {
      "$p": 0.8835880041932467,
      "feature": false,
      "$why": {
        "type": "product",
        "factors": [
          {
            "type": "baseP",
            "value": 0.6378832681921215
          },
          {
            "type": "normalizer",
            "name": "exclusiveness",
            "value": 0.9736453567417367
          },
          {
            "type": "relatedVariableLift",
            "variable": "project_id.goal in [200000.0, 545539.0]",
            "value": 1.3729057053970826
          },
          {
            "type": "relatedVariableLift",
            "variable": "project_id.blurb:collect",
            "value": 0.7688815333669797
          },
          {
            "type": "relatedVariableLift",
            "variable": "project_id.blurb:card",
            "value": 0.8055260465754426
          },
          {
            "type": "relatedVariableLift",
            "variable": "project_id.blurb:authent",
            "value": 1.2172271745572565
          },
          {
            "type": "relatedVariableLift",
            "variable": "project_id.blurb:certif",
            "value": 1.192276585004449
          },
          {
            "type": "relatedVariableLift",
            "variable": "project_id.blurb:game",
            "value": 0.8476806669502401
          },
          {
            "type": "relatedVariableLift",
            "variable": "project_id.blurb:sleev",
            "value": 0.9188388935249385
          },
          {
            "type": "relatedVariableLift",
            "variable": "project_id.blurb:pc",
            "value": 1.0772755969945653
          },
          {
            "type": "relatedVariableLift",
            "variable": "project_id.blurb:lose",
            "value": 1.0747214725702974
          },
          {
            "type": "relatedVariableLift",
            "variable": "project_id.blurb:thank",
            "value": 1.0721416342922323
          },
          {
            "type": "relatedVariableLift",
            "variable": "project_category.slug:games/gaming hardware",
            "value": 0.9343714808836523
          },
          {
            "type": "relatedVariableLift",
            "variable": "project_id.blurb:possibl",
            "value": 1.0619719928804365
          },
          {
            "type": "relatedVariableLift",
            "variable": "project_id.blurb:without",
            "value": 1.0568533454356523
          }
        ]
      }
    },
    ...

The response contains the prediction that this campaign would not likely to reach its goal (the probability of not reaching the goal is approximately 88%). The response also contains factors that contributing to the prediction. For example:

{
  "type": "baseP",
  "value": 0.6378832681921215
}

explains that the probability of not reaching the goal for an average campaign is approximately 64%.

{
  "type": "relatedVariableLift",
  "variable": "project_id.goal in [200000.0, 545539.0]",
  "value": 1.3729057053970826
}

explains that when a campaign's goal is between 200000 and 545539, it increases the likelihood of not reaching the goal by approximately 37%.

NOTE : This range is detected by using the $numeric operator on the numeric field "project_id.goal" in the query.

At this point, we only predict whether a campaign can reach its goal at any point of time. More importantly, we want to predict if a campaign can reach its goal on its deadline day. Since we have the field "day_until_deadline" in the campaign status' table, we can use this as the condition for our prediction.

To define a conditional prediction, we can use the $on operator. An example query is presented as follows:

curl --request POST \
  --url https://aitoai-kickstarter.api.aito.ai/api/v1/_predict \
  --header 'content-type: application/json' \
  --header 'x-api-key: oKDEH1DZaz9l0ftZAXA3Q6a5yPtZEYG35y0UXYer' \
  --data '{
	"from": "project_status",
	"where": {
		"project_id.blurb": "Authenticate and certificate collectible gaming cards without losing their playability. This is possible thanks to the PC Sleeve.",
		"project_id.launched_date": 23,
		"project_id.launched_month": 11,
		"project_id.duration": {
			"$numeric": 30
		},
		"project_id.goal": {
			"$numeric": 375000
		},
		"project_category.slug": "games/gaming hardware",
		"project_location.country": "SE",
		"project_location.name": "Uppsala"
	},
	"predict": {
		"$on": [
			{ "$exists": "reached_goal" },
			{ "days_until_deadline": 0 }
		]
	},
	"select": [
		"$p",
		"feature",
		"$why"
	]
}'

The response would look familiar to the previous response:

{
  "offset": 0,
  "total": 2,
  "hits": [
    {
      "$p": 0.5114605843116569,
      "feature": false,
      "$why": {
        "type": "product",
        "factors": [
          {
            "type": "baseP",
            "value": 0.41758916264645074
          },
          {
            "type": "normalizer",
            "name": "exclusiveness",
            "value": 0.904677523862942
          },
          {
            "type": "relatedVariableLift",
            "variable": "project_id.blurb:playabl",
            "value": 0.5191314328579648
          },
          {
            "type": "relatedVariableLift",
            "variable": "project_id.goal in [200000.0, 545539.0]",
            "value": 1.8300858198151637
          },
          {
            "type": "relatedVariableLift",
            "variable": "project_id.blurb:game",
            "value": 0.612965481622953
          },
          {
            "type": "relatedVariableLift",
            "variable": "project_id.blurb:collect",
            "value": 0.6531706235563145
          },
          {
            "type": "relatedVariableLift",
            "variable": "project_id.blurb:authent",
            "value": 1.4774210625688282
          },
          {
            "type": "relatedVariableLift",
            "variable": "project_id.blurb:card",
            "value": 0.707299924737002
          },
          {
            "type": "relatedVariableLift",
            "variable": "project_category.slug:games/gaming hardware",
            "value": 1.2548262687549798
          },
          {
            "type": "relatedVariableLift",
            "variable": "project_id.blurb:sleev",
            "value": 0.8157124034436037
          },
          {
            "type": "relatedVariableLift",
            "variable": "project_id.blurb:thank",
            "value": 1.1790470805750815
          },
          {
            "type": "relatedVariableLift",
            "variable": "project_id.blurb:without",
            "value": 1.174471886638741
          },
          {
            "type": "relatedVariableLift",
            "variable": "project_id.blurb:possibl",
            "value": 1.1637757746334318
          },
          {
            "type": "relatedVariableLift",
            "variable": "project_id.blurb:lose",
            "value": 1.0828165301653858
          }
        ]
      }
    },
    ...
  ]
}

The prediction shows that the campaign is unlikely to reach its goal by its deadline with much lower probability (51% comparing to 88%). The "baseP" also changes (42% instead of 64%) because in this query, the "baseP" is the base probability that a campaign fails to reach its goal on deadline date. You can also observe that Aito picks off different factors with different impacts.

Further opening up the explanation

The explanation from the "$why" of the predict query only show the features and their impacts. We can get the explanation of the impact using the Relate Query. For the campaign above, we can run the following relate query:

curl --request POST \
  --url https://aitoai-kickstarter.api.aito.ai/api/v1/_relate \
  --header 'content-type: application/json' \
  --header 'x-api-key: oKDEH1DZaz9l0ftZAXA3Q6a5yPtZEYG35y0UXYer' \
  --data '{
	"from": "project_status",
	"where": {
		"project_id.blurb": "Authenticate and certificate collectible gaming cards without losing their playability. This is possible thanks to the PC Sleeve.",
		"project_id.launched_date": 23,
		"project_id.launched_month": 11,
		"project_id.duration": {
			"$numeric": 30
		},
		"project_id.goal": {
			"$numeric": 375000
		},
		"project_category.slug": "games/gaming hardware",
		"project_location.country": "SE",
		"project_location.name": "Uppsala"
	},
	"relate": {
		"$on": [
			{ "$exists": "reached_goal" },
			{ "days_until_deadline": 0 }
		]
	}
}'

The response would look like:

{
  "offset": 0,
  "total": 21,
  "hits": [
    {
      "related": "on(reached_goal:false, days_until_deadline:0)",
      "lift": 0.612965481622953,
      "condition": "project_id.blurb:game",
      "fs": {
        "f": 38775,
        "fOnCondition": 1661,
        "fOnNotCondition": 37114,
        "fCondition": 6493,
        "n": 92856
      },
      "ps": {
        "p": 0.4175838376876521,
        "pOnCondition": 0.2559644781861727,
        "pOnNotCondition": 0.429732903835159,
        "pCondition": 0.06992547460528296
      },
      "info": {
        "h": 0.9803114800452272,
        "mi": 0.08214123911116497,
        "miTrue": -0.18074221638816726,
        "miFalse": 0.26288345549933223
      },
      "relation": {
        "n": 92856,
        "varFs": [
          6493,
          38775
        ],
        "stateFs": [
          49249,
          4832,
          37114,
          1661
        ],
        "mi": 0.006149858509549076
      }
    },
    {
      "related": "on(reached_goal:true, days_until_deadline:0)",
      "lift": 1.277498067464006,
      "condition": "project_id.blurb:game",
      "fs": {
        "f": 54081,
        "fOnCondition": 4832,
        "fOnNotCondition": 49249,
        "fCondition": 6493,
        "n": 92856
      },
      "ps": {
        "p": 0.5824161623123479,
        "pOnCondition": 0.7440355218138274,
        "pOnNotCondition": 0.5702670961648411,
        "pCondition": 0.06992547460528296
      },
      "info": {
        "h": 0.980311480045227,
        "mi": 0.0821412391111648,
        "miTrue": 0.2628834554993321,
        "miFalse": -0.18074221638816731
      },
      "relation": {
        "n": 92856,
        "varFs": [
          6493,
          54081
        ],
        "stateFs": [
          37114,
          1661,
          49249,
          4832
        ],
        "mi": 0.006149858509549026
      }
    },
    {
      "related": "on(reached_goal:false, days_until_deadline:0)",
      "lift": 1.8300858198151637,
      "condition": "project_id.goal in [200000.0, 545539.0]",
      "fs": {
        "f": 38775,
        "fOnCondition": 1090,
        "fOnNotCondition": 37685,
        "fCondition": 1425,
        "n": 92856
      },
      "ps": {
        "p": 0.4175838376876521,
        "pOnCondition": 0.7642142599361691,
        "pOnNotCondition": 0.4121796144124305,
        "pCondition": 0.015346363688280552
      },
      "info": {
        "h": 0.9803114800452272,
        "mi": 0.358727123888948,
        "miTrue": 0.666327051653561,
        "miFalse": -0.307599927764613
      },
      "relation": {
        "n": 92856,
        "varFs": [
          1425,
          38775
        ],
        "stateFs": [
          53746,
          335,
          37685,
          1090
        ],
        "mi": 0.005590561934038451
      }
    },
    ...
  ]
}

Let's take a look at the relationship between the campaign goal and the likelihood to not reach its goal on its deadline.

{
  "related": "on(reached_goal:false, days_until_deadline:0)",
  "lift": 1.8300858198151637,
  "condition": "project_id.goal in [200000.0, 545539.0]",
  "fs": {
    "f": 38775,
    "fOnCondition": 1090,
    "fOnNotCondition": 37685,
    "fCondition": 1425,
    "n": 92856
  },
  "ps": {
    "p": 0.4175838376876521,
    "pOnCondition": 0.7642142599361691,
    "pOnNotCondition": 0.4121796144124305,
    "pCondition": 0.015346363688280552
  },
  ...
}

Using the "fs" and "ps" we can see that:

  • Among the 92856 ("n": 92856) data points of campaigns on deadline day, 38775 ("f": 38775) of them failed to reach their goal. This means that:

    P(not reach goal|deadline day) = 0.4175838376876521

    as displayed in "p": 0.4175838376876521

  • Among the 1425 ("fCondition": 1425) data points of campaigns on deadline day with goal in range [200000, 545539], 1090 ("fOnCondition": 1090) failed to reach their goal. This means that

    P(not reach goal|deadline day, goal in range [200000, 545539]) = 0.7642142599361691

    as displayed in "pOnCondition": 0.7642142599361691

  • Hence, this means that goal in range [200000, 545539] impact on the likelihood that a campaign not reach its goal on its deadline day by: 0.7642142599361691 / 0.4175838376876521 = 1.8300858198151637

Using these detailed explanation, we created the following explanation visualization:

Kickstarter Relate Visualization

You can take a look at our demo

Visit us

Annankatu 34 B

00100 Helsinki

Finland

See map

470 Ramona St.

Palo Alto

CA 94301, USA

See map

Contact info

We'd love to hear from you.

hello@aito.ai

Follow us