{"action":"created","comment":{"url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/pulls/comments/203709496","pull_request_review_id":138650997,"id":203709496,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIwMzcwOTQ5Ng==","diff_hunk":"@@ -0,0 +1,84 @@\n+---\n+author: Michael Kaminsky\n+title: \"The Blacker the Box\"\n+publishDate: \"2018-08-05\"\n+tags: \n+ - Machine Learning\n+ - Data Science\n+ - Statistics\n+---\n+\n+There has been a [lot of discussion](https://towardsdatascience.com/machine-learning-how-black-is-this-black-box-f11e4031fdf) in the data science community about the use of black-box models, and there is lots of really [fascinating ongoing](https://arxiv.org/abs/1710.09511) [research](https://storage.googleapis.com/epg-blog-data/epg_2.pdf) into methods, algorithms, [and tools](https://github.com/numeristical/introspective) to help data scientists better introspect their models. While those discussions and that research are important, in this post I will discuss the macro-framework I use for evaluating how black the box can be for a prediction product.\n+\n+<!--more-->\n+\n+In this post I will not be getting into the weeds of complexity penalization algorithms or even how to weigh the [tech debt](https://ai.google/research/pubs/pub43146) associated with additional complexity. Instead, I want to take a step back and discuss how I think about \"prediction\" problems at a more macro level, and how I value accuracy and complexity for different types of problems.\n+\n+The thesis of this post is:\n+\n+**The faster the feedback on prediction accuracy, the blacker the box can be. The slower the feedback, the more your models should be explicit and formal.**\n+\n+In this post I will talk through some examples of fast feedback problems and what makes them more amenable to black-box prediction algorithms (provided you have the proper infrastructure) as well as slower feedback problems and how one might approach predictions in those situations.\n+\n+## Fast Feedback\n+\n+The machine learning community spends the bulk of its time working on and talking about fast feedback problems. Problems with fast feedback are defined by 1) the ability to quickly evaluate the correctness of a prediction[^1] and 2) the ability to play the game near infinite amounts of time[^2]. Some examples of fast feedback problems are:\n+\n+* Chess: it is easy to verify which player has won or lost. Feedback takes only as long as the length of the game.\n+* Conversion for an Ad Placement: Feedback to Google or Facebook on whether you clicked a given advertisement, and whether you subsequently converted[^3] is nearly instantaneous.\n+* Movie Recommendations: For a given list of potential movies to watch, Netflix gets near instantaneous feedback when you do or do not watch some of the content they have elevated for you.\n+\n+[Tech-debt considerations](https://ai.google/research/pubs/pub43146) aside, for fast-feedback problems the box can be impenetrably black *as long as you have confidence in your ability to accurately measure the prediction.* ","path":"content/post/the-blacker-the-box.md","position":31,"original_position":31,"commit_id":"04046075c373965e84f016e802f0434bcab0a07e","original_commit_id":"04046075c373965e84f016e802f0434bcab0a07e","user":{"login":"sbreitenother","id":12800593,"node_id":"MDQ6VXNlcjEyODAwNTkz","avatar_url":"https://avatars1.githubusercontent.com/u/12800593?v=4","gravatar_id":"","url":"https://api.github.com/users/sbreitenother","html_url":"https://github.com/sbreitenother","followers_url":"https://api.github.com/users/sbreitenother/followers","following_url":"https://api.github.com/users/sbreitenother/following{/other_user}","gists_url":"https://api.github.com/users/sbreitenother/gists{/gist_id}","starred_url":"https://api.github.com/users/sbreitenother/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sbreitenother/subscriptions","organizations_url":"https://api.github.com/users/sbreitenother/orgs","repos_url":"https://api.github.com/users/sbreitenother/repos","events_url":"https://api.github.com/users/sbreitenother/events{/privacy}","received_events_url":"https://api.github.com/users/sbreitenother/received_events","type":"User","site_admin":false},"body":"You may want to talk about what happens if you can't accurately measure the prediction. I think there are two flavors:\r\n1) You know the right metric to measure, but can't measure it\r\n2) You pick the wrong metric (optimize for click through but forget about conversion)\r\n\r\nI think you can go really wrong if you have a type 2 issue","created_at":"2018-07-19T12:38:06Z","updated_at":"2018-07-19T12:38:06Z","html_url":"https://github.com/locallyoptimistic/LocallyOptimistic/pull/116#discussion_r203709496","pull_request_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/pulls/116","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/pulls/comments/203709496"},"html":{"href":"https://github.com/locallyoptimistic/LocallyOptimistic/pull/116#discussion_r203709496"},"pull_request":{"href":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/pulls/116"}}},"pull_request":{"url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/pulls/116","id":199964383,"node_id":"MDExOlB1bGxSZXF1ZXN0MTk5OTY0Mzgz","html_url":"https://github.com/locallyoptimistic/LocallyOptimistic/pull/116","diff_url":"https://github.com/locallyoptimistic/LocallyOptimistic/pull/116.diff","patch_url":"https://github.com/locallyoptimistic/LocallyOptimistic/pull/116.patch","issue_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/issues/116","number":116,"state":"open","locked":false,"title":"The Blacker the Box","user":{"login":"mikekaminsky","id":5394529,"node_id":"MDQ6VXNlcjUzOTQ1Mjk=","avatar_url":"https://avatars2.githubusercontent.com/u/5394529?v=4","gravatar_id":"","url":"https://api.github.com/users/mikekaminsky","html_url":"https://github.com/mikekaminsky","followers_url":"https://api.github.com/users/mikekaminsky/followers","following_url":"https://api.github.com/users/mikekaminsky/following{/other_user}","gists_url":"https://api.github.com/users/mikekaminsky/gists{/gist_id}","starred_url":"https://api.github.com/users/mikekaminsky/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikekaminsky/subscriptions","organizations_url":"https://api.github.com/users/mikekaminsky/orgs","repos_url":"https://api.github.com/users/mikekaminsky/repos","events_url":"https://api.github.com/users/mikekaminsky/events{/privacy}","received_events_url":"https://api.github.com/users/mikekaminsky/received_events","type":"User","site_admin":false},"body":"","created_at":"2018-07-08T22:31:46Z","updated_at":"2018-07-19T12:38:06Z","closed_at":null,"merged_at":null,"merge_commit_sha":"27c93ce018d1112daefec044f7b4314373b5bbee","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/pulls/116/commits","review_comments_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/pulls/116/comments","review_comment_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/pulls/comments{/number}","comments_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/issues/116/comments","statuses_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/statuses/04046075c373965e84f016e802f0434bcab0a07e","head":{"label":"locallyoptimistic:the-blacker-the-box","ref":"the-blacker-the-box","sha":"04046075c373965e84f016e802f0434bcab0a07e","user":{"login":"locallyoptimistic","id":38887376,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM4ODg3Mzc2","avatar_url":"https://avatars1.githubusercontent.com/u/38887376?v=4","gravatar_id":"","url":"https://api.github.com/users/locallyoptimistic","html_url":"https://github.com/locallyoptimistic","followers_url":"https://api.github.com/users/locallyoptimistic/followers","following_url":"https://api.github.com/users/locallyoptimistic/following{/other_user}","gists_url":"https://api.github.com/users/locallyoptimistic/gists{/gist_id}","starred_url":"https://api.github.com/users/locallyoptimistic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/locallyoptimistic/subscriptions","organizations_url":"https://api.github.com/users/locallyoptimistic/orgs","repos_url":"https://api.github.com/users/locallyoptimistic/repos","events_url":"https://api.github.com/users/locallyoptimistic/events{/privacy}","received_events_url":"https://api.github.com/users/locallyoptimistic/received_events","type":"Organization","site_admin":false},"repo":{"id":120381457,"node_id":"MDEwOlJlcG9zaXRvcnkxMjAzODE0NTc=","name":"LocallyOptimistic","full_name":"locallyoptimistic/LocallyOptimistic","owner":{"login":"locallyoptimistic","id":38887376,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM4ODg3Mzc2","avatar_url":"https://avatars1.githubusercontent.com/u/38887376?v=4","gravatar_id":"","url":"https://api.github.com/users/locallyoptimistic","html_url":"https://github.com/locallyoptimistic","followers_url":"https://api.github.com/users/locallyoptimistic/followers","following_url":"https://api.github.com/users/locallyoptimistic/following{/other_user}","gists_url":"https://api.github.com/users/locallyoptimistic/gists{/gist_id}","starred_url":"https://api.github.com/users/locallyoptimistic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/locallyoptimistic/subscriptions","organizations_url":"https://api.github.com/users/locallyoptimistic/orgs","repos_url":"https://api.github.com/users/locallyoptimistic/repos","events_url":"https://api.github.com/users/locallyoptimistic/events{/privacy}","received_events_url":"https://api.github.com/users/locallyoptimistic/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/locallyoptimistic/LocallyOptimistic","description":null,"fork":false,"url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic","forks_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/forks","keys_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/keys{/key_id}","collaborators_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/teams","hooks_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/hooks","issue_events_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/issues/events{/number}","events_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/events","assignees_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/assignees{/user}","branches_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/branches{/branch}","tags_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/tags","blobs_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/git/refs{/sha}","trees_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/git/trees{/sha}","statuses_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/statuses/{sha}","languages_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/languages","stargazers_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/stargazers","contributors_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/contributors","subscribers_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/subscribers","subscription_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/subscription","commits_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/commits{/sha}","git_commits_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/git/commits{/sha}","comments_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/comments{/number}","issue_comment_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/issues/comments{/number}","contents_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/contents/{+path}","compare_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/compare/{base}...{head}","merges_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/merges","archive_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/downloads","issues_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/issues{/number}","pulls_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/pulls{/number}","milestones_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/milestones{/number}","notifications_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/labels{/name}","releases_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/releases{/id}","deployments_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/deployments","created_at":"2018-02-06T00:48:45Z","updated_at":"2018-07-17T21:48:40Z","pushed_at":"2018-07-19T09:56:49Z","git_url":"git://github.com/locallyoptimistic/LocallyOptimistic.git","ssh_url":"git@github.com:locallyoptimistic/LocallyOptimistic.git","clone_url":"https://github.com/locallyoptimistic/LocallyOptimistic.git","svn_url":"https://github.com/locallyoptimistic/LocallyOptimistic","homepage":null,"size":60309,"stargazers_count":4,"watchers_count":4,"language":"HTML","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":5,"mirror_url":null,"archived":false,"open_issues_count":12,"license":null,"forks":5,"open_issues":12,"watchers":4,"default_branch":"master"}},"base":{"label":"locallyoptimistic:master","ref":"master","sha":"a5c68d6c9f384cd0ae2f6e13db5d16113351290a","user":{"login":"locallyoptimistic","id":38887376,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM4ODg3Mzc2","avatar_url":"https://avatars1.githubusercontent.com/u/38887376?v=4","gravatar_id":"","url":"https://api.github.com/users/locallyoptimistic","html_url":"https://github.com/locallyoptimistic","followers_url":"https://api.github.com/users/locallyoptimistic/followers","following_url":"https://api.github.com/users/locallyoptimistic/following{/other_user}","gists_url":"https://api.github.com/users/locallyoptimistic/gists{/gist_id}","starred_url":"https://api.github.com/users/locallyoptimistic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/locallyoptimistic/subscriptions","organizations_url":"https://api.github.com/users/locallyoptimistic/orgs","repos_url":"https://api.github.com/users/locallyoptimistic/repos","events_url":"https://api.github.com/users/locallyoptimistic/events{/privacy}","received_events_url":"https://api.github.com/users/locallyoptimistic/received_events","type":"Organization","site_admin":false},"repo":{"id":120381457,"node_id":"MDEwOlJlcG9zaXRvcnkxMjAzODE0NTc=","name":"LocallyOptimistic","full_name":"locallyoptimistic/LocallyOptimistic","owner":{"login":"locallyoptimistic","id":38887376,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM4ODg3Mzc2","avatar_url":"https://avatars1.githubusercontent.com/u/38887376?v=4","gravatar_id":"","url":"https://api.github.com/users/locallyoptimistic","html_url":"https://github.com/locallyoptimistic","followers_url":"https://api.github.com/users/locallyoptimistic/followers","following_url":"https://api.github.com/users/locallyoptimistic/following{/other_user}","gists_url":"https://api.github.com/users/locallyoptimistic/gists{/gist_id}","starred_url":"https://api.github.com/users/locallyoptimistic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/locallyoptimistic/subscriptions","organizations_url":"https://api.github.com/users/locallyoptimistic/orgs","repos_url":"https://api.github.com/users/locallyoptimistic/repos","events_url":"https://api.github.com/users/locallyoptimistic/events{/privacy}","received_events_url":"https://api.github.com/users/locallyoptimistic/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/locallyoptimistic/LocallyOptimistic","description":null,"fork":false,"url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic","forks_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/forks","keys_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/keys{/key_id}","collaborators_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/teams","hooks_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/hooks","issue_events_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/issues/events{/number}","events_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/events","assignees_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/assignees{/user}","branches_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/branches{/branch}","tags_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/tags","blobs_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/git/refs{/sha}","trees_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/git/trees{/sha}","statuses_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/statuses/{sha}","languages_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/languages","stargazers_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/stargazers","contributors_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/contributors","subscribers_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/subscribers","subscription_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/subscription","commits_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/commits{/sha}","git_commits_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/git/commits{/sha}","comments_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/comments{/number}","issue_comment_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/issues/comments{/number}","contents_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/contents/{+path}","compare_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/compare/{base}...{head}","merges_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/merges","archive_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/downloads","issues_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/issues{/number}","pulls_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/pulls{/number}","milestones_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/milestones{/number}","notifications_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/labels{/name}","releases_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/releases{/id}","deployments_url":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/deployments","created_at":"2018-02-06T00:48:45Z","updated_at":"2018-07-17T21:48:40Z","pushed_at":"2018-07-19T09:56:49Z","git_url":"git://github.com/locallyoptimistic/LocallyOptimistic.git","ssh_url":"git@github.com:locallyoptimistic/LocallyOptimistic.git","clone_url":"https://github.com/locallyoptimistic/LocallyOptimistic.git","svn_url":"https://github.com/locallyoptimistic/LocallyOptimistic","homepage":null,"size":60309,"stargazers_count":4,"watchers_count":4,"language":"HTML","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":5,"mirror_url":null,"archived":false,"open_issues_count":12,"license":null,"forks":5,"open_issues":12,"watchers":4,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/pulls/116"},"html":{"href":"https://github.com/locallyoptimistic/LocallyOptimistic/pull/116"},"issue":{"href":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/issues/116"},"comments":{"href":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/issues/116/comments"},"review_comments":{"href":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/pulls/116/comments"},"review_comment":{"href":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/pulls/116/commits"},"statuses":{"href":"https://api.github.com/repos/locallyoptimistic/LocallyOptimistic/statuses/04046075c373965e84f016e802f0434bcab0a07e"}},"author_association":"COLLABORATOR"}}
{"actor":{"display_login":"sbreitenother"}}