{ "metadata": { "name": "", "signature": "sha256:72cfd4b68c65040315db3e5a76043b73c4908e5ee99077ce33d78f584d8d0fce" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Introduction" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you are a Google Analytics Premium customer, you have access to all of your raw data through [BigQuery Export](https://support.google.com/analytics/answer/3437618). The visitor, session, and hit level BigQuery Export data is rich enough to perform more advanced analysis, such as statistical modeling and forecasting. This guide demonstrates how BigQuery Export data can be used to build a statistical model to forecast customer behavior and calculate Customer Lifetime Value (CLV).\n", "\n", "[Fill out this form](https://docs.google.com/a/google.com/forms/d/1HQUrQMJZSDv_xneeHjh6Qvh20LQiaIfFPWvzWFIU_E4/viewform) to complete this analysis using your own Google Analytics Premium data." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "CLV and related metrics" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Customer Lifetime Value is the amount of money that an individual\n", "customer will spend with a given business in the future. It is often used to:\n", "\n", " * Value segments or all of your customer base \n", " * Decide how much to spend acquiring new customers in a given segment\n", " * Decide how much to spend retaining certain customers \n", " * Rank customers\n", " * Measure the success of marketing action from a baseline CLV forecast\n", "\n", "Additionally, the probability that a customer is still \"alive\" is used to:\n", "\n", " * Determine size of your customer base that is still \"alive\"\n", " * Identify customers who are on the brink of \"dying\" and take action\n", "\n", "Taken together, a strong model of customer behavior serves as the foundation for\n", "many marketing activities and measurement." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Prerequisites" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To follow this guide and complete the Customer Lifetime Value analysis you need the following:\n", "\n", " 1. Access to [BigQuery Export for Google Analytics](https://support.google.com/analytics/answer/3437618) \n", " 2. Ecommerce or another conversion activity being tracked by Google Analytics\n", " 3. Data for at least a few months\n", "\n", "If you are new to iPython Notebooks, complete \"An Introduction to Notebooks\" before proceeding.\n" ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Outline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This guide uses BigQuery Export to calculate Customer Lifetime Value and related metrics by completing the following steps:\n", "\n", " 1. Query BigQuery to extract the data needed\n", " 2. Import this data into R \n", " 3. Use the data to build a model that forecasts CLV and related metrics for each customer:\n", " * Customer Lifetime Value\n", " * Expected transactions\n", " * Expected spend per transaction\n", " * The probability that a given customer is still alive\n", " 4. Import the CLV calculations back into BigQuery\n", " 5. Analyze the CLV calculations using BigQuery" ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "BigQuery" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To extract the data from BigQuery you need to import Big Query functionality into this notebook with the following statements:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import gcp\n", "import gcp.bigquery as bq" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 116 }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you are using Ecommerce tracking or Goals, all of the data needed to calculate CLV is available via BigQuery Export. \n", "\n", "The following query extracts the date, number of transactions, and transaction revenue for all transactions made by first time visitors in a given date range (i.e. a cohort).\n", "\n", "It has been customized as follows, but you may wish to modify it to suit your business. For example, a different conversion event can be substituted, or a different visitor identifier, such as a custom dimension, can be used in place of `fullVisitorId`." ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Column(object):\n", " def __init__(self, name):\n", " self._name = name\n", " def _repr_sql_(self):\n", " return self._name\n", "\n", "ga_view_id = [your View id here]\n", "cloud_project_number = [your Cloud Project number here]\n", "visitor_id = Column('fullVisitorId')\n", "conversion = Column('totals.transactions')\n", "conversion_revenue = Column('totals.transactionRevenue')\n", "start_date = '2014-01-01'\n", "end_date = '2014-06-01'\n", "cohort_end_date = '2014-01-15'\n", "end_of_cal_period = '2014-03-15'\n", "sampling_rate = Column('1/50')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 93 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that all of the input needed have been specified, run the query below to view the raw data." ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%bigquery sql --name event_log_query\n", "SELECT\n", " *\n", "FROM\n", " (\n", " SELECT\n", " date,\n", " $visitor_id,\n", " $conversion_revenue,\n", " $conversion,\n", " FROM\n", " TABLE_DATE_RANGE([$cloud_project_number:$ga_view_id.ga_sessions_],\n", " TIMESTAMP($start_date),\n", " TIMESTAMP($end_date))\n", " WHERE\n", " $conversion IS NOT NULL\n", " ) a\n", "JOIN\n", " (\n", " SELECT\n", " $visitor_id\n", " FROM\n", " TABLE_DATE_RANGE([$cloud_project_number:$ga_view_id.ga_sessions_],\n", " TIMESTAMP($start_date),\n", " TIMESTAMP($cohort_end_date))\n", " WHERE\n", " totals.newVisits IS NOT NULL\n", " AND RAND() < $sampling_rate\n", " GROUP BY\n", " 1\n", " ) b\n", "ON\n", " a.$visitor_id=b.$visitor_id\n", "ORDER BY\n", " date" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 111 }, { "cell_type": "markdown", "metadata": {}, "source": [ "View the query with the `print` command to ensure the fields have been set properly. The query as printed below can also be run in the [BigQuery web tool](https://bigquery.cloud.google.com/)." ] }, { "cell_type": "code", "collapsed": false, "input": [ "print event_log_query.sql # View the query" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "SELECT\n", " *\n", "FROM\n", " (\n", " SELECT\n", " date,\n", " fullVisitorId,\n", " totals.transactionRevenue,\n", " totals.transactions,\n", " FROM\n", " TABLE_DATE_RANGE([XXXXX:YYYYY.ga_sessions_],\n", " TIMESTAMP(\"2014-01-01\"),\n", " TIMESTAMP(\"2014-06-01\"))\n", " WHERE\n", " totals.transactions IS NOT NULL\n", " ) a\n", "JOIN\n", " (\n", " SELECT\n", " fullVisitorId\n", " FROM\n", " TABLE_DATE_RANGE([XXXXX:YYYYY.ga_sessions_],\n", " TIMESTAMP(\"2014-01-01\"),\n", " TIMESTAMP(\"2014-01-15\"))\n", " WHERE\n", " totals.newVisits IS NOT NULL\n", " AND RAND() < 1/50\n", " GROUP BY\n", " 1\n", " ) b\n", "ON\n", " a.fullVisitorId=b.fullVisitorId\n", "ORDER BY\n", " date\n" ] } ], "prompt_number": 117 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Run the query and view the results." ] }, { "cell_type": "code", "collapsed": false, "input": [ "event_log_data = event_log_query.results() # Run the query\n", "event_log_data.to_dataframe() # Save the query to a dataframe and view the results" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
a_datea_fullVisitorIda_totals_transactionRevenuea_totals_transactionsb_fullVisitorId
0 20140101 5017790038239644653 1000000 1 5017790038239644653
1 20140101 8030597587931533103 1000000 6 8030597587931533103
2 20140101 8007084424397327094 4000000 3 8007084424397327094
3 20140101 7889612318617925253 15000000 1 7889612318617925253
4 20140101 7738341083666717494 25000000 1 7738341083666717494
5 20140101 7525652009656248795 30000000 2 7525652009656248795
6 20140101 8610629730095560978 150000000 1 8610629730095560978
7 20140101 8566403803300969597 275000000 1 8566403803300969597
8 20140101 2737390106049798924 299000000 1 2737390106049798924
9 20140101 2685613046935863042 100000000 2 2685613046935863042
10 20140101 2650073639940285657 150000000 4 2650073639940285657
11 20140101 3456865916325944274 99000000 7 3456865916325944274
12 20140101 3456865916325944274 10000000 4 3456865916325944274
13 20140101 3882569992235139113 525000000 2 3882569992235139113
14 20140101 3914796626505639481 1000000 2 3914796626505639481
15 20140101 4995458969964415911 1000000 50 4995458969964415911
16 20140101 1259414691818766528 50000000 2 1259414691818766528
17 20140101 5078320799045540451 240000000 1 5078320799045540451
18 20140101 889890209775498982 10000000 12 889890209775498982
19 20140101 947174447755019932 51000000 2 947174447755019932
20 20140101 1057455412481369266 199000000 1 1057455412481369266
21 20140101 1081016026814234084 10000000 1 1081016026814234084
22 20140101 1150796867278450940 49000000 1 1150796867278450940
23 20140101 4417026909276501138 20000000 5 4417026909276501138
24 20140101 4718954971222246310 129000000 2 4718954971222246310
25 20140101 4718954971222246310 79000000 1 4718954971222246310
26 20140101 4757220853489744229 10000000 7 4757220853489744229
27 20140101 6487324317020613085 199000000 1 6487324317020613085
28 20140101 6508187150725671277 5000000 4 6508187150725671277
29 20140101 6553405867780627589 1000000 1 6553405867780627589
..................
5925 20140529 2123940850581287851 17000000 1 2123940850581287851
5926 20140529 2123940850581287851 39000000 2 2123940850581287851
5927 20140529 2123940850581287851 30000000 2 2123940850581287851
5928 20140529 2123940850581287851 30000000 2 2123940850581287851
5929 20140529 8812763329271802279 2000000 2 8812763329271802279
5930 20140529 1687926679891894827 99000000 1 1687926679891894827
5931 20140529 9211499580406574233 137000000 9 9211499580406574233
5932 20140529 7650455684740741189 25000000 1 7650455684740741189
5933 20140529 8179477440921671967 49000000 1 8179477440921671967
5934 20140529 8993124317588647958 2000000 5 8993124317588647958
5935 20140529 8993124317588647958 20000000 1 8993124317588647958
5936 20140529 8993124317588647958 20000000 1 8993124317588647958
5937 20140529 8993124317588647958 20000000 1 8993124317588647958
5938 20140529 5931510834014662770 1000000 1 5931510834014662770
5939 20140529 1679842512074369707 15000000 9 1679842512074369707
5940 20140530 5766885201415567301 2000000 2 5766885201415567301
5941 20140530 8993124317588647958 2000000 1 8993124317588647958
5942 20140530 9211499580406574233 10000000 9 9211499580406574233
5943 20140530 9211499580406574233 58000000 1 9211499580406574233
5944 20140531 2123940850581287851 59000000 9 2123940850581287851
5945 20140531 557356876586168799 5000000 1 557356876586168799
5946 20140531 9211499580406574233 10000000 3 9211499580406574233
5947 20140531 8812763329271802279 15000000 2 8812763329271802279
5948 20140531 4186788749218768802 5000000 1 4186788749218768802
5949 20140531 2430553514951030514 2000000 4 2430553514951030514
5950 20140601 1963045431437364100 15000000 5 1963045431437364100
5951 20140601 1963045431437364100 1000000 1 1963045431437364100
5952 20140601 9211499580406574233 5000000 4 9211499580406574233
5953 20140601 8566403803300969597 5000000 1 8566403803300969597
5954 20140601 8812763329271802279 137000000 1 8812763329271802279
\n", "

5955 rows \u00d7 5 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 113, "text": [ " a_date a_fullVisitorId a_totals_transactionRevenue \\\n", "0 20140101 5017790038239644653 1000000 \n", "1 20140101 8030597587931533103 1000000 \n", "2 20140101 8007084424397327094 4000000 \n", "3 20140101 7889612318617925253 15000000 \n", "4 20140101 7738341083666717494 25000000 \n", "5 20140101 7525652009656248795 30000000 \n", "6 20140101 8610629730095560978 150000000 \n", "7 20140101 8566403803300969597 275000000 \n", "8 20140101 2737390106049798924 299000000 \n", "9 20140101 2685613046935863042 100000000 \n", "10 20140101 2650073639940285657 150000000 \n", "11 20140101 3456865916325944274 99000000 \n", "12 20140101 3456865916325944274 10000000 \n", "13 20140101 3882569992235139113 525000000 \n", "14 20140101 3914796626505639481 1000000 \n", "15 20140101 4995458969964415911 1000000 \n", "16 20140101 1259414691818766528 50000000 \n", "17 20140101 5078320799045540451 240000000 \n", "18 20140101 889890209775498982 10000000 \n", "19 20140101 947174447755019932 51000000 \n", "20 20140101 1057455412481369266 199000000 \n", "21 20140101 1081016026814234084 10000000 \n", "22 20140101 1150796867278450940 49000000 \n", "23 20140101 4417026909276501138 20000000 \n", "24 20140101 4718954971222246310 129000000 \n", "25 20140101 4718954971222246310 79000000 \n", "26 20140101 4757220853489744229 10000000 \n", "27 20140101 6487324317020613085 199000000 \n", "28 20140101 6508187150725671277 5000000 \n", "29 20140101 6553405867780627589 1000000 \n", "... ... ... ... \n", "5925 20140529 2123940850581287851 17000000 \n", "5926 20140529 2123940850581287851 39000000 \n", "5927 20140529 2123940850581287851 30000000 \n", "5928 20140529 2123940850581287851 30000000 \n", "5929 20140529 8812763329271802279 2000000 \n", "5930 20140529 1687926679891894827 99000000 \n", "5931 20140529 9211499580406574233 137000000 \n", "5932 20140529 7650455684740741189 25000000 \n", "5933 20140529 8179477440921671967 49000000 \n", "5934 20140529 8993124317588647958 2000000 \n", "5935 20140529 8993124317588647958 20000000 \n", "5936 20140529 8993124317588647958 20000000 \n", "5937 20140529 8993124317588647958 20000000 \n", "5938 20140529 5931510834014662770 1000000 \n", "5939 20140529 1679842512074369707 15000000 \n", "5940 20140530 5766885201415567301 2000000 \n", "5941 20140530 8993124317588647958 2000000 \n", "5942 20140530 9211499580406574233 10000000 \n", "5943 20140530 9211499580406574233 58000000 \n", "5944 20140531 2123940850581287851 59000000 \n", "5945 20140531 557356876586168799 5000000 \n", "5946 20140531 9211499580406574233 10000000 \n", "5947 20140531 8812763329271802279 15000000 \n", "5948 20140531 4186788749218768802 5000000 \n", "5949 20140531 2430553514951030514 2000000 \n", "5950 20140601 1963045431437364100 15000000 \n", "5951 20140601 1963045431437364100 1000000 \n", "5952 20140601 9211499580406574233 5000000 \n", "5953 20140601 8566403803300969597 5000000 \n", "5954 20140601 8812763329271802279 137000000 \n", "\n", " a_totals_transactions b_fullVisitorId \n", "0 1 5017790038239644653 \n", "1 6 8030597587931533103 \n", "2 3 8007084424397327094 \n", "3 1 7889612318617925253 \n", "4 1 7738341083666717494 \n", "5 2 7525652009656248795 \n", "6 1 8610629730095560978 \n", "7 1 8566403803300969597 \n", "8 1 2737390106049798924 \n", "9 2 2685613046935863042 \n", "10 4 2650073639940285657 \n", "11 7 3456865916325944274 \n", "12 4 3456865916325944274 \n", "13 2 3882569992235139113 \n", "14 2 3914796626505639481 \n", "15 50 4995458969964415911 \n", "16 2 1259414691818766528 \n", "17 1 5078320799045540451 \n", "18 12 889890209775498982 \n", "19 2 947174447755019932 \n", "20 1 1057455412481369266 \n", "21 1 1081016026814234084 \n", "22 1 1150796867278450940 \n", "23 5 4417026909276501138 \n", "24 2 4718954971222246310 \n", "25 1 4718954971222246310 \n", "26 7 4757220853489744229 \n", "27 1 6487324317020613085 \n", "28 4 6508187150725671277 \n", "29 1 6553405867780627589 \n", "... ... ... \n", "5925 1 2123940850581287851 \n", "5926 2 2123940850581287851 \n", "5927 2 2123940850581287851 \n", "5928 2 2123940850581287851 \n", "5929 2 8812763329271802279 \n", "5930 1 1687926679891894827 \n", "5931 9 9211499580406574233 \n", "5932 1 7650455684740741189 \n", "5933 1 8179477440921671967 \n", "5934 5 8993124317588647958 \n", "5935 1 8993124317588647958 \n", "5936 1 8993124317588647958 \n", "5937 1 8993124317588647958 \n", "5938 1 5931510834014662770 \n", "5939 9 1679842512074369707 \n", "5940 2 5766885201415567301 \n", "5941 1 8993124317588647958 \n", "5942 9 9211499580406574233 \n", "5943 1 9211499580406574233 \n", "5944 9 2123940850581287851 \n", "5945 1 557356876586168799 \n", "5946 3 9211499580406574233 \n", "5947 2 8812763329271802279 \n", "5948 1 4186788749218768802 \n", "5949 4 2430553514951030514 \n", "5950 5 1963045431437364100 \n", "5951 1 1963045431437364100 \n", "5952 4 9211499580406574233 \n", "5953 1 8566403803300969597 \n", "5954 1 8812763329271802279 \n", "\n", "[5955 rows x 5 columns]" ] } ], "prompt_number": 113 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Building the Model in R" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that the data needed for the model is loaded into the notebook, R is used to build a model of customer behavior. This model will then be used to calculate CLV and related metrics. The [BTYD R package](http://cran.r-project.org/package=BTYD) will be used to run the Pareto/NBD Buy 'Til You Die (BTYD) model first\n", "introduced by [Schmittlein, Morrison, and Colombo](http://www.jstor.org/discover/10.2307/2631608?uid=3739584&uid=2129&uid=2&uid=70&uid=4&uid=3739256&sid=21105176808473) and later popularized by [Fader, Hardie, and Lee](http://brucehardie.com/papers/bgnbd_2004-04-20.pdf). The Pareto/NBD model is very popular in academic marketing literature due to its applicability in areas such as customer retention, churn, and lifetime value. Similarly, due to increased availability of data and computational resources, these techniques have seen increased use and attention among businesses." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "R Setup" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you do not already have R and rpy2 installed, as well as the BTYD package, do so now by following the \"Setup for Calculating Customer Lifetime Value using BigQuery Export for Google Analytics\" notebook." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Load rpy2 and the BTYD package into this notebook." ] }, { "cell_type": "code", "collapsed": false, "input": [ "%load_ext rpy2.ipython" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [ "%%R\n", "library(BTYD)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "text": [ "Loading required package: hypergeo\n" ] } ], "prompt_number": 10 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Run the Model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In order to run the BTYD models, import the data from BigQuery into R." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import pandas\n", "df = pandas.DataFrame(event_log_data)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 33 }, { "cell_type": "code", "collapsed": false, "input": [ "%Rpush df" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 34 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The code below prepares the data for the Pareto/NBD, runs the model, and then prints out the parameter estimates. Running the model may take several minutes." ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%R -i start_date,end_date,cohort_end_date,end_of_cal_period\n", "\n", "elog <- data.frame(cust = df$a_fullVisitorId, date = df$a_date, sales = df$a_totals_transactionRevenue)\n", "elog$sales <- elog$sales / 10^6\n", "\n", "# format dates\n", "elog$date <- as.Date(elog$date, \"%Y%m%d\")\n", "\n", "# set key dates\n", "end.of.cal.period <- as.Date(end_of_cal_period)\n", "T.end <- max(elog$date)\n", "T.star <- as.numeric(T.end - end.of.cal.period)\n", "T.tot <- as.numeric(max(elog$date) - min(elog$date))\n", "\n", "dataset <- dc.ElogToCbsCbt(elog, per=\"day\", \n", " T.cal=end.of.cal.period)\n", "\n", "# estimate model\n", "cal.cbs <- dataset[[\"cal\"]][[\"cbs\"]]\n", "params <- pnbd.EstimateParameters(cal.cbs)\n", "\n", "print(params)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "text": [ "Started making CBS and CBT from the ELOG...\n", "...Completed Freq CBT\n", "Finished filtering out customers not in the birth period.\n", "No dissipation requested.\n", "Started merging same-date transactions...\n", "... Finished merging same-date transactions.\n", "Started Creating Repeat Purchases\n", "Finished Creating Repeat Purchases\n", "Started Building CBS and CBT for calibration period...\n", "Started Building CBT...\n", "...Completed Freq CBT\n", "Started Building CBT...\n", "...Completed Freq CBT\n", "Started making calibration period CBS...\n", "Finished building CBS.\n", "Finished building CBS and CBT for calibration period.\n", "Started building CBS and CBT for holdout period...\n", "Started Building CBT...\n", "...Completed Freq CBT\n", "Started making holdout period CBS...\n", "Finished building CBS.\n", "Finished building CBS and CBT for holdout.\n", "...Finished Making All CBS and CBT\n", "[1] 0.5417495 5.9029028 0.8386304 4.8032654\n" ] } ], "prompt_number": 35 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Assess Model Fit" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Before using the model to make forecasts, model fit should be assessed. This can be done using the [Mean Absolute Percentage Error](http://en.wikipedia.org/wiki/Mean_absolute_percentage_error) (MAPE). " ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%R\n", "mape <- function(actual, forecasted) {\n", " n <- length(actual)\n", " (1/n) * sum(abs((actual - forecasted) / actual))\n", "}" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 36 }, { "cell_type": "code", "collapsed": false, "input": [ "%%R\n", "# calculate incremental and cumulative vectors\n", "T.cal <- cal.cbs[,3]\n", "actual.inc.tracking.data <- cbind(dataset[['cal']][['cbt']], \n", " dataset[['holdout']][['cbt']])\n", "actual.inc.tracking.data <- apply(actual.inc.tracking.data, 2, sum)\n", "actual.cum.tracking.data <- cumsum(actual.inc.tracking.data)\n", "expected.cum.trans <- pnbd.ExpectedCumulativeTransactions(params, T.cal, T.tot, length(actual.cum.tracking.data))\n", "\n", "# find end of calibration date\n", "end.of.cal.day <- as.numeric(end.of.cal.period - min(elog$date))\n", "\n", "total.mape <- mape(actual.cum.tracking.data, expected.cum.trans)\n", "in.sample.mape <- mape(actual.cum.tracking.data[1:end.of.cal.day], expected.cum.trans[1:end.of.cal.day])\n", "out.of.sample.mape <- mape(actual.cum.tracking.data[end.of.cal.day:T.tot], expected.cum.trans[end.of.cal.day:T.tot])\n", "mape.outputs <- data.frame(\"MAPE\"=c(in.sample.mape, out.of.sample.mape, total.mape))\n", "row.names(mape.outputs) <- c(\"In sample\", \"Out of sample\", \"Total\")\n", "print(mape.outputs)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "text": [ " MAPE\n", "In sample 0.05495860\n", "Out of sample 0.01107181\n", "Total 0.03221948\n" ] } ], "prompt_number": 43 }, { "cell_type": "markdown", "metadata": {}, "source": [ "While there are no steadfast rules for assessing model fit, a general heuristic is a MAPE of less than 10% is good, between 10-20% is cause for concern, and above 20% is bad. \n", "\n", "At this point, if you are confident in the model fit based on the MAPE calculation, you may continue to the [Forecasting Spend](#Forecasting-Spend) and then the [Compute Model Outputs](#Compute-Model-Outputs) section. If you are not confident in the model fit or would like to dig deeper into the model, continue to the Analyze the Model section below. " ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Analyze the Model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that the parameters of the Pareto/NBD have been estimated, they can be used to make projections. For example, the code below prints the expected number of transactions for a new customer in one year." ] }, { "cell_type": "code", "collapsed": false, "input": [ "%R print(round(pnbd.Expectation(params, t=365), digits=1))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "text": [ "[1] 2.8\n" ] } ], "prompt_number": 39 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Model fit can also be assessed graphically. The graph below is a histogram of repeat transactions." ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%R\n", "# histogram\n", "pnbd.PlotFrequencyInCalibration(params, cal.cbs, 7)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "text": [ " [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]\n", "[1,] 1093.000 252.0000 114.0000 54.00000 38.0000 29.00000 20.00000 89.00000\n", "[2,] 1096.556 237.8858 106.1921 60.83081 39.6089 27.86635 20.63852 99.42124\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\ngg==\n" } ], "prompt_number": 40 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following two graphs show cumulative and incremental transactions, respectively, for both the data and as fit by the model. The vertical line separates the calibration period data from the holdout data. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%R\n", "# cum tracking\n", "cum.tracking <- pnbd.PlotTrackingCum(params, T.cal, T.tot,\n", " actual.cum.tracking.data, xlab=\"Day\")" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n" } ], "prompt_number": 41 }, { "cell_type": "code", "collapsed": false, "input": [ "%%R\n", "# inc tracking\n", "inc.tracking <- pnbd.PlotTrackingInc(params, T.cal, T.tot, \n", " actual.inc.tracking.data, xlab=\"Day\", title=\"Tracking Daily Transactions\")" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\ntD7ozxyBQHDjxg3+7LO5uXnHjh2RkZEGOSQASEhIWLFixaBBgwwbztXVtXfv3s8///wXX3xBJoXj\nXq4JMguRSCRydnaOj49vampirZCcnOzv7+/p6ant0arbXM+3zBifImU3b94MCgoijwMDA2/evElf\n4n5zDct4J6v8ITTGeanbZ9e8iZ0wyddC19Dh7ObNmzd37tza2tra2tq4uDhLS0v9g+q/T+bJTzM3\nN7eioiLucBo6f/58aGgoGRdGeSfqwmmotbX10qVLY8eOXblypSbLOyUUCl9//XXyfxgbGzt//nzW\nCsHBwXl5eTocqsrN9XzLuDfX+S1T3tDCwoIM9MMwTHt7u1AoJI+531zdYqlbbow/Gbqc9SE0xnmp\n26dB/mz1hwn6KQ0NDXFxcY6Oju7u7ps3b/bw8NA/qP77JO7fv79x48Zx48Zxh9NQSEhIfn4+x05U\nhtNKeXm5g4OD5ss52NnZ1dXVkce1tbUuLi6Kr6akpEybNk3n41TeXM+3jHtzAyZoOzu7u3fvksd1\ndXX0f7XTN1eHWOqWG+NPhmJ9CI1xXur2aag/Wz1hglbrn//8Z1xcnGGD6rZP6v79+71799Y8HAdN\nfksph9NKZWWlu7u75ss5hIWFKTYIshJ0SEjI2bNndT5O7s31fMuUNzdgglbXBq3/D2XNE7QiY/zJ\nKH4IjXFemuxTz8+APjBBP2Xu3LmVlZWNjY2HDx/29vYuKCjQP6ie+5w3b15eXl57e3tFRcXy5cun\nTp3KHU4HrF92HOE6FRsbe/369ba2try8vIkTJ65YsYJ7uYaSkpLo783Y2NgFCxbQl06fPh0aGqrV\n3hSp3FzPt4x7cwMm6J07dwYEBJSWlpaWlgYEBOzdu1eTrXSLpW65Mf5kNPkQGva8lF/V/7wMwjwT\ntM5fs0lJSSKRyMbGZtKkSdnZ2QYJqs8+GYY5cuTI8OHDe/To4e3tvWTJkoaGBu5wOlDcXF04rY62\nZ8+e/fr1+/Of/9zS0sK9XHMbNmxwcXFxdHScN29eY2MjXf7iiy9+//332u6Ne3M93zJ1m+v8lqnb\nsKOjY/Xq1Q4ODg4ODmvXriWD3Ctvq9XBq4tljI+3un1q8iE01Hmp26eenwFDwQH7EUKIp7DMDiGE\neAoTNEII8RQmaIQQ4ilM0AghxFOYoBFCiKcwQSOEEE9hgkYIIZ7CBI0QQjyFCRohhHgKEzRCCPEU\nJmiEEOIpTNAIIcRTmKARQoinMEEjhBBPYYJGCCGewgSNEEI8hQkaIYR4ChM0QgjxFCZohBDiKUzQ\nyGwJBAKBQGBlZeXp6Tl79uycnBxTHxFC2sEEjcwZwzCPHz8+c+bMCy+8EBkZeeXKFVMfEUJawASN\nzJyVlVX//v0TEhLWrl2bmJhIFhYWFsbExDg7O9vb27/66qv19fWNjY2urq719fVkBalU6ubmVldX\nZ7oDRwgTNHpmvPbaa+fOnaOP33rrraqqqoqKCk9Pz4SEBEdHx9jY2D179pAVMjIygoOD3dzcTHe8\nCIGAYRhTHwNCRiEQPPXxbmlpsbOzk0qlrNUePHjg7+9fWVlZWloaGRlZXFxsZWW1bNmy8PDw2NjY\nrj1khJ6CV9DoWVFdXe3o6EgeX758ecKECU5OTgKBwN7evqamBgD8/PyCg4OPHj3KMExGRkZ0dLRJ\njxchTNDomXHkyJGwsDDyODY2Nj4+vri4WCaTNTQ0yOVysnzVqlXbtm3LysoKCQnp1auX6Q4WIQAA\nS1MfAELGJZPJysvLjxw5snXr1rS0NLKwubnZzs6ud+/e5eXla9asoSuPHj3ayspq3bp1GzZsMNHx\nIvQ7vIJG5kwgEFhbW48bNy4nJycjI2PkyJFkeVJS0gcffNCnT5/IyMjw8HDFTVatWlVSUhIREWGC\nw0XoaXiTEKGn7Nq16/bt21u2bDH1gSCECRohBffv3w8ODk5PT/f09DT1sSCEbdAIPSEQCCwsLLZv\n347ZGfEEXkEjhBBP4U1ChBDiKUzQCCHEU5igEUKIpzBBI4QQT2GCRgghnsIEjRBCPIUJGiGEeAoT\nNEII8RQmaIQQ4ilM0AghxFOYoBFCiKcwQSOEEE9hgkYIIZ7CBI0QQjyFCRohhHjq/wEZGXT1lZy1\nCAAAAABJRU5ErkJggg==\n" } ], "prompt_number": 42 }, { "cell_type": "markdown", "metadata": {}, "source": [ "As a final graphical assessment of model fit, the graph below plots actual transactions against conditional expected transactions made by customers in the holdout period, binned by how many transactions the customers made in the calibration period. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%R\n", "x.star <- dataset$holdout$cbs[,1]\n", "censor <- 7\n", "cond.expectation <- pnbd.PlotFreqVsConditionalExpectedFrequency(params,\n", " T.star, cal.cbs, dataset$holdout$cbs[,1], censor)\n", "cond.expectation " ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "text": [ " [,1] [,2] [,3] [,4] [,5] [,6]\n", "[1,] 7.319305e-02 0.2460317 0.5964912 0.7777778 1.421053 1.137931\n", "[2,] 3.485406e-02 0.2167215 0.4977087 1.0236040 1.608808 2.090292\n", "[3,] 1.093000e+03 252.0000000 114.0000000 54.0000000 38.000000 29.000000\n", " [,7] [,8]\n", "[1,] 0.200000 6.359551\n", "[2,] 0.969861 8.028275\n", "[3,] 20.000000 89.000000\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nfvvt0KFDI0eO3Lhx4/CG3b1bqbi4uKCgoCbfrbpDQEOdFBUVMWfEzOlwWlpaXlratjt3HrVqldSv\nX7mOTmcrKzc3t3bt2pmbm2O1dY3k5eXl4eGxcuXK/fv3b9q0qQm/py0qKtLV1cU/m5oQ0PCGqqqq\nR48eZWRkpKenS7+ve/Hihba2trW1dTdr6xEvXnjo61evXm1jY2NkZORANIbvmoEzpqamO3bsYK6n\nDwwMdHd3b5LdXr9+fdCgQU2yKw2DgAaSSCS3b9++fPlyREREfn6+jo6OjY1N586de/fuPX78eBsb\nGxMTEyKiVavo8mWaMoVmzKi5jC80H5MnTx45cuTy5csPHDjw9ddfGzMr8TcC1khSBAHdTL169Soi\nIiIsLCwuLs7Q0NDFxcXV1dXHx8fQ0PCN7ZKSaOtW+vxzatmS/P0pMJCnekFYTE1Nf/rpp4iIiPHj\nx8+ZM8fb27sxe4uMjFxa49YqQAjoZiU/Pz88PDwiIiI2Ntbc3NzZ2dnLyyswMFBbm+2fwbVr5O9P\nXbrQBx9Qy5ZERAYGHBcMAufq6nrmzJmvv/568uTJ27Zta9i9wysrK4uKihp/Gq6RENAa7vnz5xcv\nXgwLC7tz546VldWIESM+/PDDDRs2sFzuUVhIN29SXBz16UPDh5OjI506Rbq6fFQNakNfX3/t2rXx\n8fE+Pj5TpkyZP39+fS82uXnzJhbpVwQBrYEePHhw7ty58PDwrKys9u3bu7m5+fn52draym+Xn0+3\nbpGREfXvT8+e0bx55OhITk7Upw8REW47BHXWp0+fM2fOhISEjBs37ttvv63XLR+xRpISCGhNIJFI\nkpKSmDHl/Px8Zurx119/bSV3o/vcXCooIDs7qqigCRNIW5t696b33iMiMjenP/7gpXjQDNra2n5+\nfpMnT16yZMmwYcM+//zzOl6UHxERgaViFUFAq6vq6uobN26EhYVFRkZWVlba29u7ublt27atXbt2\n/2708uXre93Pn0937lCbNjRlCtnZkY4OnTzJV+Wgwezt7U+ePLlz58633npr69atPXv2rPUljx49\nkj+TgH8goNVJeXl5dHR0RETEhQsXysvLnZ2dXV1dZ8+eLb/q5v/9H509Sy9fkrv763kX27fjKz7g\nhkgkWrBgwZgxYxYtWuTo6Lhu3Tpdxd9k3L9/v17jIc0NAlropPPhrl+/bmRk1LdvXzc3t4ULF7Zk\n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\nFm6dYGOOAAAAAElFTkSuQmCC\n" } ], "prompt_number": 49 }, { "cell_type": "markdown", "metadata": {}, "source": [ "It is illustrative to view a heatmap of the conditional expected transactions for different recency and frequency values. \n", "\n", "In the heatmaps below, red is bad and bright yellow is good. People who have purchased both recently and frequently are the best customers. \n", "\n", "The P(Alive) heatmap illustrates the \"increasing frequency paradox\", whereby a given customer who has purchased more frequently may actually be less likely to be alive." ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%R\n", "heatmap.palive.data <- matrix(NA, nrow=10, ncol=200)\n", "heatmap.cet.data <- matrix(NA, nrow=10, ncol=200)\n", "for(i in 1:10) {\n", " heatmap.cet.data[i,] <- pnbd.ConditionalExpectedTransactions(params, T.star=365, x=i, t.x=1:200, T.cal=200)\n", " heatmap.palive.data[i,] <- pnbd.PAlive(params, x=i, t.x=1:200, T.cal=200)\n", "}\n", "image(heatmap.palive.data, axes=FALSE, xlab=\"Number of Transactions\", ylab=\"Days since last transaction\", main=\"P(Alive) by Recency and Frequency\")\n", "axis(1, at=seq(0,1,.1), labels=0:10)\n", "axis(2, at=seq(0,1,.1), labels=seq(200,0,-20))\n", "\n", "image(heatmap.cet.data, axes=FALSE, xlab=\"Number of Transactions\", ylab=\"Days since last transaction\", main=\"Conditional Expected Transactions by Recency and Frequency\")\n", "axis(1, at=seq(0,1,.1), labels=0:10)\n", "axis(2, at=seq(0,1,.1), labels=seq(200,0,-20))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n" }, { "metadata": {}, "output_type": "display_data", "png": "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\nAElFTkSuQmCC\n" } ], "prompt_number": 51 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Forecasting Spend" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In order to complete the Customer Lifetime Value calculation, it is necessary to build a model to forecast how much each customer will spend per transaction. The Gamma / Gamma model to forecast average spend per customer is run below." ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%R\n", "#cal.cbt <- dc.CreateSpendCBT(elog, is.avg.spend = FALSE)\n", "cal.cbt <- dc.ElogToCbsCbt(elog, per=\"day\", T.cal=end.of.cal.period, cohort.birth.per=as.Date(cohort_end_date), statistic=\"total.spend\")\n", "cal.cbs <- cal.cbt$cal$cbs\n", "cal.cbt <- cal.cbt$cal$cbt\n", "calculateAvgSpend <- function(cbt.row) {\n", " purchaseCols = which(cbt.row != 0)\n", " sum(cbt.row[purchaseCols]) / length(purchaseCols)\n", "}\n", "\n", "m.x <- apply(cal.cbt, 1, calculateAvgSpend)\n", "m.x[which(is.na(m.x))] <- 0\n", "spendParams <- spend.EstimateParameters(m.x, cal.cbs[,1])\n", "print(spendParams)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "text": [ "Started making CBS and CBT from the ELOG...\n", "...Completed Freq CBT\n", "Finished filtering out customers not in the birth period.\n", "No dissipation requested.\n", "Started merging same-date transactions...\n", "... Finished merging same-date transactions.\n", "Started Creating Repeat Purchases\n", "Finished Creating Repeat Purchases\n", "Started Building CBS and CBT for calibration period...\n", "Started Building CBT...\n", "...Completed Spend CBT\n", "Started Building CBT...\n", "...Completed Spend CBT\n", "Started making calibration period CBS...\n", "Finished building CBS.\n", "Finished building CBS and CBT for calibration period.\n", "Started building CBS and CBT for holdout period...\n", "Started Building CBT...\n", "...Completed Spend CBT\n", "Started making holdout period CBS...\n", "Finished building CBS.\n", "Finished building CBS and CBT for holdout.\n", "...Finished Making All CBS and CBT\n", "[1] 0.1697479 1.1257365 152.2140630\n" ] } ], "prompt_number": 56 }, { "cell_type": "code", "collapsed": false, "input": [ "%%R \n", "expected.spend <- spend.plot.average.transaction.value(spendParams, m.x, cal.cbs[,1], title = \"Actual vs. Expected Avg Transaction Value Across Customers\")" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAeAAAAHgCAIAAADytinCAAAgAElEQVR4nO3deUBUVd8H8DMLMIDg\njIgQgqwiiTtqoZjhgpGZG5hLuSAQKi6Ir2SiLfJoaKT2aIpSSZmZ+ShqymOuj5ppkokIKAoIsgnD\nKvt23z+uTSNchhlmuHOB7+evmTMz5/zm3Ds/Dufeey6PoigCAADcw9d2AAAAwAwJGgCAo5CgAQA4\nCgkaAICjkKABADgKCRoAgKOQoAEAOAoJGgCAo5CgAQA4CgkaAICjkKABADgKCRoAgKOQoAEAOAoJ\nGgCAo5CgAQA4CgkaAICjkKABADgKCRoAgKOQoAEAOAoJGgCAo5CgAQA4CgkaAICjkKABADiqgyVo\nHo/H4/G0HUVHhd7TIK51JtfiAY1QLUEXFBTo6enxeDw9Pb2CggIlP9Vxdx0eE+0G065NtG37qoSx\nS7m/e7AT5LBhw3g83m+//dak/LfffuPxeMOGDWvvAFrCwo6hcefOnZs5c2bv3r11dXWNjIzs7Oym\nTJmiZp3s76uqJehvv/22trbWyMiotrb2wIED7RMS51Av0nY47YiF7dukGztur7ZH2IsXLyaE7Nu3\nr0l5ZGQkIcTX11ezzSmvw/3wV65c6eHhIZFILl++XFFR8ejRo61bt1ZWVmo7LtVRSmtsbLS3t+fx\neCdPnuTxeA4ODo2NjfJvSEhIeOedd8zNzXV0dPr373/o0KHmezDjj7N5yfbt2wkhfD7f3Nzcz8+v\nrKyspQ/Shg4dSgg5evSorOTnn38mhAwdOpSiqKysrAULFlhaWurq6pqZmc2ZM+fKlSvKfOWWmlu0\naBEhxMXFpaGhgaKohoYGenTj4+Mj+1R0dHT//v11dXXt7e2///57+Y9fvXp1woQJRkZGxsbGo0aN\nOn36dNu6sdWqvvvuO3t7e7qe6OhoxVtcwfZV3L0URR08eFD5hhj7ln76008/ubq6Ghoayl5SvCcc\nPXrU1dVVJBL16NFjypQpaWlp9KuKt3hLdarU+U3iP3v2rJubm4GBgb6+/ujRo8+ePdvkq7UUqrzi\n4mKRSCQSiYqKimSFRUVFIpFIX1+/pKSk1Q5hjK15ieLdpom2/fCplrepgr5SsOGU/xXTe+Dbb7/d\n0jdS3D8tNdTSb7DVTb9v3z5bW1tdXd2BAweePn06LCzMwsLCwMDAzc0tMTFR9mbGjaJCgj537hwh\n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\n" } ], "prompt_number": 57 }, { "cell_type": "code", "collapsed": false, "input": [ "%%R\n", "mape(m.x[which(m.x > 0)], expected.spend)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "text": [ "[1] 0.9892284\n" ] } ], "prompt_number": 58 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Compute Model Outputs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Once confident in model fit, the model must be rerun using all of the data. In the previous section, the data from the holdout period was used to assess model fit. In order to generate a true forecast, you must run the model on all of the data. Running the model may take a few minutes." ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%R\n", "\n", "end.of.cal.period <- as.Date(end_date)\n", "\n", "dataset <- dc.ElogToCbsCbt(elog, per=\"day\", \n", " T.cal=end.of.cal.period)\n", "\n", "# estimate model\n", "cal.cbs <- dataset[[\"cal\"]][[\"cbs\"]]\n", "params <- pnbd.EstimateParameters(cal.cbs)\n", "\n", "print(params)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Started making CBS and CBT from the ELOG...\n", "...Completed Freq CBT\n", "Finished filtering out customers not in the birth period.\n", "No dissipation requested.\n", "Started merging same-date transactions...\n", "... Finished merging same-date transactions.\n", "Started Creating Repeat Purchases\n", "Finished Creating Repeat Purchases\n", "Started Building CBS and CBT for calibration period...\n", "Started Building CBT...\n", "...Completed Freq CBT\n", "Started Building CBT...\n", "...Completed Freq CBT\n", "Started making calibration period CBS...\n", "Finished building CBS.\n", "Finished building CBS and CBT for calibration period.\n", "...Finished Making All CBS and CBT\n", "[1] 0.5085131 6.2411749 0.9268665 6.5166227 \n" ] } ], "prompt_number": 98 }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you'd like, you can analyze the parameters of the new model by returning to the [Analyze the Model](#Analyze-the-Model) section. Otherwise, continue below and calculate some key outputs of the model, which will later be imported back into BigQuery for further analysis. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In addition to forecasting how many times a new customer will purchase in the next year, you can use the model to forecast how many times each existing customer will purchase in the next year, conditional on their past behavior. You can also compute the probability that they are still alive (p_Alive). Both the expected transactions and probability of being alive for each customer are computed below, conditional on their observed behavior." ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%R\n", "x <- cal.cbs[, \"x\"]\n", "t.x <- cal.cbs[, \"t.x\"]\n", "T.cal <- cal.cbs[, \"T.cal\"]\n", "d <- .15 # discount rate to be divided by 365, as we are running the model on daily data\n", "discounted_expected_transactions <- pnbd.DERT(params, x, t.x, T.cal, d / 365)\n", "p_Alive <- pnbd.PAlive(params, x, t.x, T.cal)\n", "output <- data.frame(visitorId=dataset$cust.data$cust, discounted_expected_transactions=discounted_expected_transactions, p_Alive=p_Alive)\n", "head(output)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "text": [ " visitorId discounted_expected_transactions p_Alive\n", "1 5177747204596837269 0.020091172 0.004347853\n", "2 871901349141564204 0.078373790 0.016960571\n", "3 1868101133499893294 0.023218149 0.014299225\n", "4 8368278366398443575 0.023218149 0.014299225\n", "5 8656784264702200562 0.023218149 0.014299225\n", "6 5149525721801940630 0.006224129 0.001346940\n" ] } ], "prompt_number": 71 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, compute the expected spend per transaction and combine this with the expected transactions for a projected future revenue number." ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%R\n", "expected_spend <- spend.expected.value(spendParams, m.x, cal.cbs[,1])\n", "output$expected_spend <- expected_spend\n", "output$projected_future_revenue <- output$expected_spend * output$discounted_expected_transactions\n", "output[1:20,]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "text": [ " visitorId discounted_expected_transactions p_Alive\n", "1 5177747204596837269 0.020091172 0.0043478534\n", "2 871901349141564204 0.078373790 0.0169605714\n", "3 1868101133499893294 0.023218149 0.0142992255\n", "4 8368278366398443575 0.023218149 0.0142992255\n", "5 8656784264702200562 0.023218149 0.0142992255\n", "6 5149525721801940630 0.006224129 0.0013469399\n", "7 2811328900058349109 0.023218149 0.0142992255\n", "8 8408928092961375382 0.023218149 0.0142992255\n", "9 5237025793460417264 0.023218149 0.0142992255\n", "10 3095251960883073410 0.006224129 0.0013469399\n", "11 1583858084726727557 0.306114199 0.0119569411\n", "12 1260552643402035925 0.023218149 0.0142992255\n", "13 1145004713037811602 0.023218149 0.0142992255\n", "14 8345286530289651621 0.012017819 0.0026007300\n", "15 8795080974681952023 0.023218149 0.0142992255\n", "16 4873862033428478188 0.020091172 0.0043478534\n", "17 74808852692086562 0.023218149 0.0142992255\n", "18 7399414240697899145 0.003234085 0.0004245238\n", "19 318277560721229411 0.042914586 0.0056332059\n", "20 6771626816731085183 0.023218149 0.0142992255\n", " expected_spend projected_future_revenue\n", "1 88.01738 1.7683723\n", "2 660.76719 51.7868292\n", "3 205.49331 4.7711743\n", "4 205.49331 4.7711743\n", "5 205.49331 4.7711743\n", "6 234.50805 1.4596084\n", "7 205.49331 4.7711743\n", "8 205.49331 4.7711743\n", "9 205.49331 4.7711743\n", "10 90.31527 0.5621339\n", "11 19.01605 5.8210828\n", "12 205.49331 4.7711743\n", "13 205.49331 4.7711743\n", "14 173.61389 2.0864602\n", "15 205.49331 4.7711743\n", "16 140.29444 2.8186797\n", "17 205.49331 4.7711743\n", "18 56.26761 0.1819742\n", "19 606.48696 26.0271369\n", "20 205.49331 4.7711743\n" ] } ], "prompt_number": 72 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The output table above can now be imported into BigQuery and analyzed alongside other Google Analytics data." ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Analyzing the data in BigQuery" ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Import Model Outputs into BigQuery" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, pull the output dataframe created in R back into the notebook." ] }, { "cell_type": "code", "collapsed": false, "input": [ "%Rpull output" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 76 }, { "cell_type": "code", "collapsed": false, "input": [ "output[:5]" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
visitorIddiscounted_expected_transactionsp_Aliveexpected_spendprojected_future_revenue
0 5177747204596837269 0.020091 0.004348 88.017378 1.768372
1 871901349141564204 0.078374 0.016961 660.767190 51.786829
2 1868101133499893294 0.023218 0.014299 205.493312 4.771174
3 8368278366398443575 0.023218 0.014299 205.493312 4.771174
4 8656784264702200562 0.023218 0.014299 205.493312 4.771174
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 81, "text": [ " visitorId discounted_expected_transactions p_Alive \\\n", "0 5177747204596837269 0.020091 0.004348 \n", "1 871901349141564204 0.078374 0.016961 \n", "2 1868101133499893294 0.023218 0.014299 \n", "3 8368278366398443575 0.023218 0.014299 \n", "4 8656784264702200562 0.023218 0.014299 \n", "\n", " expected_spend projected_future_revenue \n", "0 88.017378 1.768372 \n", "1 660.767190 51.786829 \n", "2 205.493312 4.771174 \n", "3 205.493312 4.771174 \n", "4 205.493312 4.771174 " ] } ], "prompt_number": 81 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Fill any missing values with zero." ] }, { "cell_type": "code", "collapsed": false, "input": [ "output.fillna(value=0, inplace=True)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 82 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Create a schema for the table infered from the dataframe." ] }, { "cell_type": "code", "collapsed": false, "input": [ "schema = bq.schema(output)\n", "schema" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
namedata_typemodedescription
projected_future_revenueFLOATNULLABLE
discounted_expected_transactionsFLOATNULLABLE
visitorIdSTRINGNULLABLE
p_AliveFLOATNULLABLE
expected_spendFLOATNULLABLE
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 84, "text": [ "[{ 'name': 'projected_future_revenue', 'type': 'FLOAT', 'mode':'NULLABLE', 'description': '' },\n", " { 'name': 'discounted_expected_transactions', 'type': 'FLOAT', 'mode':'NULLABLE', 'description': '' },\n", " { 'name': 'visitorId', 'type': 'STRING', 'mode':'NULLABLE', 'description': '' },\n", " { 'name': 'p_Alive', 'type': 'FLOAT', 'mode':'NULLABLE', 'description': '' },\n", " { 'name': 'expected_spend', 'type': 'FLOAT', 'mode':'NULLABLE', 'description': '' }]" ] } ], "prompt_number": 84 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now create a table with the schema that was just created.\n", "\n", "If the table exists, you can recreate it with the `truncate=True` parameter (remove this to create a new table even if it already exists). Likewise for creating a DataSet that will contain the table." ] }, { "cell_type": "code", "collapsed": false, "input": [ "bq.dataset('outputs').create()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 85, "text": [] } ], "prompt_number": 85 }, { "cell_type": "code", "collapsed": false, "input": [ "table = bq.table('outputs.jan_june_2014').create(schema, truncate=True)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 87 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, populate the table with data from the dataframe. This uses the BigQuery streaming insert API to stream in rows from the pandas dataframe into BigQuery." ] }, { "cell_type": "code", "collapsed": false, "input": [ "table.insertAll(output)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 89, "text": [] } ], "prompt_number": 89 }, { "cell_type": "markdown", "metadata": {}, "source": [ "To confirm the insert, sample the newly created and populated table.\n", "\n", "It can take some time for BigQuery to process the newly inserted data and make it available to be queried (hence the added sleep)." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import time\n", "time.sleep(2)\n", "table.sample()" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
Number of rows: 5
Query job ID : job_MbXu16ShLmfXgEUx4Ing02PjbNU
projected_future_revenuediscounted_expected_transactionsvisitorIdp_Aliveexpected_spend
5.24270164790.025512760563671100807817882490.0153688402205.493311627
4.9401054960.024040225283966734603444635170.0146848711205.493311627
5.37173210560.02614066645840133591935490910.0156579647205.493311627
0.73389941550.007208892728319187284628171670.0015259381101.804735549
5.5056831680.026792517675549592043328854310.0159565886205.493311627
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 91, "text": [ "[{u'discounted_expected_transactions': 0.0255127605,\n", " u'expected_spend': 205.4933116268,\n", " u'p_Alive': 0.0153688402,\n", " u'projected_future_revenue': 5.2427016479,\n", " u'visitorId': u'6367110080781788249'},\n", " {u'discounted_expected_transactions': 0.0240402252,\n", " u'expected_spend': 205.4933116268,\n", " u'p_Alive': 0.0146848711,\n", " u'projected_future_revenue': 4.940105496,\n", " u'visitorId': u'8396673460344463517'},\n", " {u'discounted_expected_transactions': 0.0261406664,\n", " u'expected_spend': 205.4933116268,\n", " u'p_Alive': 0.0156579647,\n", " u'projected_future_revenue': 5.3717321056,\n", " u'visitorId': u'584013359193549091'},\n", " {u'discounted_expected_transactions': 0.0072088927,\n", " u'expected_spend': 101.8047355489,\n", " u'p_Alive': 0.0015259381,\n", " u'projected_future_revenue': 0.7338994155,\n", " u'visitorId': u'2831918728462817167'},\n", " {u'discounted_expected_transactions': 0.0267925176,\n", " u'expected_spend': 205.4933116268,\n", " u'p_Alive': 0.0159565886,\n", " u'projected_future_revenue': 5.505683168,\n", " u'visitorId': u'7554959204332885431'}]" ] } ], "prompt_number": 91 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The data can now be queried and joined with the rest of your Google Analytics data in BigQuery." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Joining with BigQuery Export data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The output table can now be used for various analyses:\n", "- First product purchased\n", "- Acquisition campaign\n", "- Find best customers\n", "- Find customers with on the brink P(alive)\n", "- Integration with CRM\n", "- GA Data Upload" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following query lists average Discounted Expected Transactions by the campaign (`trafficSource.campaign`) that first brought the customer to the site or app." ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%bigquery sql det_by_campaign\n", "SELECT\n", " trafficSource.campaign,\n", " round(avg(discounted_expected_transactions), 2)\n", "FROM (\n", " SELECT\n", " date,\n", " $visitor_id,\n", " trafficSource.campaign\n", " FROM\n", " TABLE_DATE_RANGE([$cloud_project_number:$ga_view_id.ga_sessions_],\n", " TIMESTAMP($start_date),\n", " TIMESTAMP($cohort_end_date))\n", " WHERE\n", " totals.newVisits IS NOT NULL\n", " ) a\n", "JOIN (\n", " SELECT\n", " visitorId,\n", " discounted_expected_transactions\n", " FROM\n", " [outputs.jan_june_2014]\n", " ) b\n", "ON\n", " a.$visitor_id=b.visitorId\n", "GROUP BY\n", " trafficSource.campaign\n", "ORDER BY\n", " 2 DESC" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 104 }, { "cell_type": "code", "collapsed": false, "input": [ "print det_by_campaign.sql" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "SELECT\n", " trafficSource.campaign,\n", " round(avg(discounted_expected_transactions), 2)\n", "FROM (\n", " SELECT\n", " date,\n", " fullVisitorId,\n", " trafficSource.campaign\n", " FROM\n", " TABLE_DATE_RANGE([XXXXX:YYYYY.ga_sessions_],\n", " TIMESTAMP(\"2014-01-01\"),\n", " TIMESTAMP(\"2014-01-15\"))\n", " WHERE\n", " totals.newVisits IS NOT NULL\n", " ) a\n", "JOIN (\n", " SELECT\n", " visitorId,\n", " discounted_expected_transactions\n", " FROM\n", " [outputs.jan_june_2014]\n", " ) b\n", "ON\n", " a.fullVisitorId=b.visitorId\n", "GROUP BY\n", " trafficSource.campaign\n", "ORDER BY\n", " 2 DESC\n" ] } ], "prompt_number": 105 }, { "cell_type": "code", "collapsed": false, "input": [ "det_by_campaign.results()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 108 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Additionally, you can rank your customers:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%bigquery sql\n", "SELECT\n", " *\n", "FROM\n", " [outputs.jan_june_2014]\n", "ORDER BY\n", " projected_future_revenue DESC\n", "LIMIT\n", " 100" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
Number of rows: 100
Query job ID : job_eH1rLrEO1P7BlaOcr-NbfJae1xg
projected_future_revenuediscounted_expected_transactionsvisitorIdp_Aliveexpected_spend
22822.2919336163.0723693349737808896864259851.0139.951924577
8689.7672141249.713726122314481901653004190341.0174.796135634
8089.81551522208.27273939181464419912910969410.982406726538.8424118244
6960.0484962685.545495231813462088898741633711.081.3607832581
6909.1420165122.05966800589541567965591266290.9518749335313.202447786
6391.3067730416.193664857440270335536987578890.5585310462394.679452076
5129.93103465188.57654452520871784216078892481.027.2034416983
4670.5406796941.3691711755619259346435704380.9465973519112.899063423
4607.2269582350.741764069227013762898688687420.951969072690.7975322251
3740.4293766178.4588729424322492208940650551.020.9596155962
3642.6750737731.936896052430261987608940441470.9632775825114.058519268
3565.6305405850.519466152442475638206523737340.564359517470.5793392556
2992.3925876298.830440092868145247782856517280.985523552730.2780457601
2977.4011061934.574490877381124565464476135130.579024630586.1155444561
2832.699727430.257399402341605615443113114670.926070290293.620065946
2564.6491817526.35819626346394155510937293850.761302301897.2998742449
2432.0014394627.796444032477612374684229398600.620282827187.4932576494
2158.6148278330.31064524962321077778906496840.591205938171.2163931206
2132.4392065154.944094579428828449975049281350.734744203338.8110719238
2102.0294616446.7074373789238905035704890150.947015783945.004170205
1892.88289636160.06471131685567184072396408880.983859810411.8257352342
1517.8174567398.571771810776704666417469830800.89482643815.3980944935
1274.2747238755.330855216951803882358225775270.918800276323.0300926828
1164.968651513.039771011875122645708146475390.630020715389.339655615
1029.9174602811.778170718760515636739728039421.087.4429047498
1020.104899911.107711762353073313844396700890.620064879291.8375378952
987.24942045329.527141343565203244749017261460.392643171233.4353200321
966.9089640432.230900170755941291957241724580.708115265429.9994402551
947.5622265599.647010053381486794931677175280.268118128698.2234102926
763.4562317365.94091195387598383327737489140.539639666128.508255597
744.2864404792.215104685880979158101129784400.47494966088.0711987803
663.04453244834.514358131561472406460857371010.97315311819.2106870399
657.1103646624.508997710985496380677565686380.3212413061145.733133347
632.8414560217.633526147313505575313827404410.937764532982.9029001555
611.2990644062.067851933653138115881462741930.2647522822295.620326807
609.3012667412.965066171312067262363500852040.7304810219205.493311627
604.5486798315.227883268688669225962912834290.3670788092115.639284346
604.5369610438.922603744488229696361498644450.340899951867.7534247131
600.03684495414.461143982487563419072713641350.857071915341.4930413309
565.049768777.939835536922881298477776317220.725384398571.1664323708
564.9066126286.904144139627530159744623924160.406579168581.8213816522
551.51069280624.423380601433288745981211817720.978604243122.5812594008
541.09996598713.297761114726966914125648147410.966671996240.6910577893
531.4938802159.569934687682858223601846667510.937822082655.5378795743
529.84828702623.464071583547937862680257134761.022.5812594008
522.2453752528.311348135412451838287847828310.985923276362.835218396
521.6948237832.538743571523971721765614140.6379484539205.493311627
521.16705533916.882840830265386292819199601020.994216118230.8696303294
518.93059338912.752939382325540556474493563731.040.6910577893
514.5289523844.815220598834534135829593962470.4085710688106.854699973
513.4343494857.638843683525827858948726069891.067.213621689
502.99674960622.274964415350224737988609534670.992272324922.5812594008
501.876692725.52254014555854655434707097761.019.6640573328
487.1649004838.704838795918919294574394644600.274011474955.9648388562
485.53744682143.830619002920302107184234128790.814066934311.0775858947
484.28894781737.354652475678101930819155330240.936474218712.9646219606
480.62625563818.126730052511754184630879499080.946444922826.514779789
479.2016205230.665834555854539222560895790740.956165512115.6265638115
478.99313629230.652492900540813034461914977511.015.6265638115
477.96913965411.746294287380517809507369337530.935283681340.6910577893
475.2514263923.10594049391574275441732523400.863996271920.5683653749
473.5258624835.331893792685569806149968124240.489910412488.8100702865
472.60339030736.45331053552397550573565205340.986203828412.9646219606
471.99110131539.506920532172609578438342746860.95600850811.9470486426
463.6578628627.268678691879079555269395613610.172682881263.7884658987
462.9829112123.544627813733482822281861995140.906547445919.6640573328
462.32097806719.330687304714651867252941567080.91699786223.9164273251
462.09217022416.873453236137169415792620210900.988039386527.3857498971
457.8553760317.267930553255086081290490394090.963946265726.514779789
452.9806909465.952997126240459948249939765760.253940610976.0928791575
451.91269983997.204878436422391935148299312820.94127873184.649074276
450.9682901888.120012748985731485297566786230.799624015455.5378795743
448.628559119.867295757870595970553043930470.95700879522.5812594008
447.70888184190.418029753548976872306324999170.94688141234.9515443221
446.5443704218.040356849153363694221043863030.825508009255.5378795743
446.41520287729.558614737465563532976899655830.932988969715.1027105581
438.8712380714.436073256745261891252175793690.832544894298.932369389
434.93789954915.980464078475403552976181553440.247509493427.2168503627
430.26295759338.840859523467402049906135729670.805806465211.0775858947
426.1081032987.672386964862443938285237340870.936726246155.5378795743
424.587104857.645000279244709080213299039500.825507041655.5378795743
412.3303765197.424308952462238223997598172830.772322094755.5378795743
411.51266182526.334174728964559018552479491620.781237327615.6265638115
411.22942858726.316049615759152264311495610460.823309346615.6265638115
405.2495475714.634447457287793269229729894300.900344631387.4429047498
392.93814155122.564040572142392863749965742860.837430746717.4143518442
388.390525856.993254492770593919706162049920.781729283755.5378795743
385.0511349986.933126326662623484625630980410.71497621355.5378795743
380.0038291564.34573657232606808509869521120.912061503287.4429047498
378.67829443533.554178391319089259358147856900.57133166111.2855779098
377.2867137426.793322262877902721731769696980.857342913455.5378795743
370.7092181849.110336234261682836579638371570.621523165940.6910577893
369.5783683129.115199147815472270216184456600.66233285140.5452873073
359.4755696478.834264557816357529032545614320.761912659640.6910577893
349.8443869223.832028049915737545177607105260.492014720691.2948398004
347.0290198063.968635543481374414793103636730.832917421387.4429047498
329.92046330218.94531971444069524707703431040.641767732317.4143518442
325.23914191310.129611859221764229543463959060.721679174132.1077595502
322.9502746582.527362638215407994441354030590.3317555974127.781533909
322.40716273117.58941968381759869133818355650.602196876718.3296077146
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 107, "text": [ "[{u'discounted_expected_transactions': 163.0723693341,\n", " u'expected_spend': 139.951924577,\n", " u'p_Alive': 1.0,\n", " u'projected_future_revenue': 22822.2919336346,\n", " u'visitorId': u'973780889686425985'},\n", " {u'discounted_expected_transactions': 49.7137261223,\n", " u'expected_spend': 174.7961356336,\n", " u'p_Alive': 1.0,\n", " u'projected_future_revenue': 8689.7672141203,\n", " u'visitorId': u'1448190165300419034'},\n", " {u'discounted_expected_transactions': 208.2727393911,\n", " u'expected_spend': 38.8424118244,\n", " u'p_Alive': 0.9824067265,\n", " u'projected_future_revenue': 8089.8155152237,\n", " u'visitorId': u'8146441991291096941'},\n", " {u'discounted_expected_transactions': 85.5454952318,\n", " u'expected_spend': 81.3607832581,\n", " u'p_Alive': 1.0,\n", " u'projected_future_revenue': 6960.0484962641,\n", " u'visitorId': u'1346208889874163371'},\n", " {u'discounted_expected_transactions': 22.059668005,\n", " u'expected_spend': 313.202447786,\n", " u'p_Alive': 0.9518749335,\n", " u'projected_future_revenue': 6909.1420165127,\n", " u'visitorId': u'8954156796559126629'},\n", " {u'discounted_expected_transactions': 16.1936648574,\n", " u'expected_spend': 394.6794520762,\n", " u'p_Alive': 0.5585310462,\n", " u'projected_future_revenue': 6391.3067730384,\n", " u'visitorId': u'4027033553698757889'},\n", " {u'discounted_expected_transactions': 188.5765445248,\n", " u'expected_spend': 27.2034416983,\n", " u'p_Alive': 1.0,\n", " u'projected_future_revenue': 5129.9310346534,\n", " u'visitorId': u'2087178421607889248'},\n", " {u'discounted_expected_transactions': 41.36917117,\n", " u'expected_spend': 112.8990634233,\n", " u'p_Alive': 0.9465973519,\n", " u'projected_future_revenue': 4670.5406796903,\n", " u'visitorId': u'5561925934643570438'},\n", " {u'discounted_expected_transactions': 50.7417640692,\n", " u'expected_spend': 90.7975322251,\n", " u'p_Alive': 0.9519690726,\n", " u'projected_future_revenue': 4607.2269582349,\n", " u'visitorId': u'2701376289868868742'},\n", " {u'discounted_expected_transactions': 178.4588729424,\n", " u'expected_spend': 20.9596155962,\n", " u'p_Alive': 1.0,\n", " u'projected_future_revenue': 3740.4293766044,\n", " u'visitorId': u'432249220894065055'},\n", " {u'discounted_expected_transactions': 31.9368960524,\n", " u'expected_spend': 114.0585192684,\n", " u'p_Alive': 0.9632775825,\n", " u'projected_future_revenue': 3642.6750737651,\n", " u'visitorId': u'3026198760894044147'},\n", " {u'discounted_expected_transactions': 50.5194661524,\n", " u'expected_spend': 70.5793392556,\n", " u'p_Alive': 0.5643595174,\n", " u'projected_future_revenue': 3565.6305405825,\n", " u'visitorId': u'4247563820652373734'},\n", " {u'discounted_expected_transactions': 98.8304400928,\n", " u'expected_spend': 30.2780457601,\n", " u'p_Alive': 0.9855235527,\n", " u'projected_future_revenue': 2992.3925876248,\n", " u'visitorId': u'6814524778285651728'},\n", " {u'discounted_expected_transactions': 34.5744908773,\n", " u'expected_spend': 86.1155444561,\n", " u'p_Alive': 0.5790246305,\n", " u'projected_future_revenue': 2977.4011061935,\n", " u'visitorId': u'8112456546447613513'},\n", " {u'discounted_expected_transactions': 30.2573994023,\n", " u'expected_spend': 93.620065946,\n", " u'p_Alive': 0.9260702902,\n", " u'projected_future_revenue': 2832.6997273971,\n", " u'visitorId': u'4160561544311311467'},\n", " {u'discounted_expected_transactions': 26.3581962634,\n", " u'expected_spend': 97.2998742449,\n", " u'p_Alive': 0.7613023018,\n", " u'projected_future_revenue': 2564.6491817524,\n", " u'visitorId': u'639415551093729385'},\n", " {u'discounted_expected_transactions': 27.7964440324,\n", " u'expected_spend': 87.4932576494,\n", " u'p_Alive': 0.6202828271,\n", " u'projected_future_revenue': 2432.0014394583,\n", " u'visitorId': u'7761237468422939860'},\n", " {u'discounted_expected_transactions': 30.3106452496,\n", " u'expected_spend': 71.2163931206,\n", " u'p_Alive': 0.5912059381,\n", " u'projected_future_revenue': 2158.6148278307,\n", " u'visitorId': u'232107777890649684'},\n", " {u'discounted_expected_transactions': 54.9440945794,\n", " u'expected_spend': 38.8110719238,\n", " u'p_Alive': 0.7347442033,\n", " u'projected_future_revenue': 2132.4392065094,\n", " u'visitorId': u'2882844997504928135'},\n", " {u'discounted_expected_transactions': 46.7074373789,\n", " u'expected_spend': 45.004170205,\n", " u'p_Alive': 0.9470157839,\n", " u'projected_future_revenue': 2102.029461638,\n", " u'visitorId': u'23890503570489015'},\n", " {u'discounted_expected_transactions': 160.0647113159,\n", " u'expected_spend': 11.8257352342,\n", " u'p_Alive': 0.9838598104,\n", " u'projected_future_revenue': 1892.8828963589,\n", " u'visitorId': u'8556718407239640888'},\n", " {u'discounted_expected_transactions': 98.5717718107,\n", " u'expected_spend': 15.3980944935,\n", " u'p_Alive': 0.894826438,\n", " u'projected_future_revenue': 1517.8174567329,\n", " u'visitorId': u'7670466641746983080'},\n", " {u'discounted_expected_transactions': 55.3308552169,\n", " u'expected_spend': 23.0300926828,\n", " u'p_Alive': 0.9188002763,\n", " u'projected_future_revenue': 1274.2747238651,\n", " u'visitorId': u'5180388235822577527'},\n", " {u'discounted_expected_transactions': 13.0397710118,\n", " u'expected_spend': 89.339655615,\n", " u'p_Alive': 0.6300207153,\n", " u'projected_future_revenue': 1164.9686514974,\n", " u'visitorId': u'7512264570814647539'},\n", " {u'discounted_expected_transactions': 11.7781707187,\n", " u'expected_spend': 87.4429047498,\n", " u'p_Alive': 1.0,\n", " u'projected_future_revenue': 1029.9174602845,\n", " u'visitorId': u'6051563673972803942'},\n", " {u'discounted_expected_transactions': 11.1077117623,\n", " u'expected_spend': 91.8375378952,\n", " u'p_Alive': 0.6200648792,\n", " u'projected_future_revenue': 1020.1048998978,\n", " u'visitorId': u'5307331384439670089'},\n", " {u'discounted_expected_transactions': 29.5271413435,\n", " u'expected_spend': 33.4353200321,\n", " u'p_Alive': 0.3926431712,\n", " u'projected_future_revenue': 987.2494204528,\n", " u'visitorId': u'6520324474901726146'},\n", " {u'discounted_expected_transactions': 32.2309001707,\n", " u'expected_spend': 29.9994402551,\n", " u'p_Alive': 0.7081152654,\n", " u'projected_future_revenue': 966.9089640398,\n", " u'visitorId': u'5594129195724172458'},\n", " {u'discounted_expected_transactions': 9.6470100533,\n", " u'expected_spend': 98.2234102926,\n", " u'p_Alive': 0.2681181286,\n", " u'projected_future_revenue': 947.5622265586,\n", " u'visitorId': u'8148679493167717528'},\n", " {u'discounted_expected_transactions': 5.940911953,\n", " u'expected_spend': 128.5082555966,\n", " u'p_Alive': 0.539639666,\n", " u'projected_future_revenue': 763.4562317357,\n", " u'visitorId': u'8759838332773748914'},\n", " {u'discounted_expected_transactions': 92.2151046858,\n", " u'expected_spend': 8.0711987803,\n", " u'p_Alive': 0.4749496608,\n", " u'projected_future_revenue': 744.2864404695,\n", " u'visitorId': u'8097915810112978440'},\n", " {u'discounted_expected_transactions': 34.5143581315,\n", " u'expected_spend': 19.2106870399,\n", " u'p_Alive': 0.973153118,\n", " u'projected_future_revenue': 663.0445324481,\n", " u'visitorId': u'6147240646085737101'},\n", " {u'discounted_expected_transactions': 4.5089977109,\n", " u'expected_spend': 145.7331333469,\n", " u'p_Alive': 0.3212413061,\n", " u'projected_future_revenue': 657.1103646623,\n", " u'visitorId': u'8549638067756568638'},\n", " {u'discounted_expected_transactions': 7.6335261473,\n", " u'expected_spend': 82.9029001555,\n", " u'p_Alive': 0.9377645329,\n", " u'projected_future_revenue': 632.8414560214,\n", " u'visitorId': u'1350557531382740441'},\n", " {u'discounted_expected_transactions': 2.0678519336,\n", " u'expected_spend': 295.6203268068,\n", " u'p_Alive': 0.2647522822,\n", " u'projected_future_revenue': 611.2990644058,\n", " u'visitorId': u'5313811588146274193'},\n", " {u'discounted_expected_transactions': 2.9650661713,\n", " u'expected_spend': 205.4933116268,\n", " u'p_Alive': 0.7304810219,\n", " u'projected_future_revenue': 609.3012667407,\n", " u'visitorId': u'1206726236350085204'},\n", " {u'discounted_expected_transactions': 5.2278832686,\n", " u'expected_spend': 115.6392843463,\n", " u'p_Alive': 0.3670788092,\n", " u'projected_future_revenue': 604.5486798306,\n", " u'visitorId': u'8866922596291283429'},\n", " {u'discounted_expected_transactions': 8.9226037444,\n", " u'expected_spend': 67.7534247131,\n", " u'p_Alive': 0.3408999518,\n", " u'projected_future_revenue': 604.5369610425,\n", " u'visitorId': u'8822969636149864445'},\n", " {u'discounted_expected_transactions': 14.4611439824,\n", " u'expected_spend': 41.4930413309,\n", " u'p_Alive': 0.8570719153,\n", " u'projected_future_revenue': 600.036844954,\n", " u'visitorId': u'8756341907271364135'},\n", " {u'discounted_expected_transactions': 7.9398355369,\n", " u'expected_spend': 71.1664323708,\n", " u'p_Alive': 0.7253843985,\n", " u'projected_future_revenue': 565.04976877,\n", " u'visitorId': u'2288129847777631722'},\n", " {u'discounted_expected_transactions': 6.9041441396,\n", " u'expected_spend': 81.8213816522,\n", " u'p_Alive': 0.4065791685,\n", " u'projected_future_revenue': 564.906612628,\n", " u'visitorId': u'2753015974462392416'},\n", " {u'discounted_expected_transactions': 24.4233806014,\n", " u'expected_spend': 22.5812594008,\n", " u'p_Alive': 0.9786042431,\n", " u'projected_future_revenue': 551.5106928061,\n", " u'visitorId': u'3328874598121181772'},\n", " {u'discounted_expected_transactions': 13.2977611147,\n", " u'expected_spend': 40.6910577893,\n", " u'p_Alive': 0.9666719962,\n", " u'projected_future_revenue': 541.0999659865,\n", " u'visitorId': u'2696691412564814741'},\n", " {u'discounted_expected_transactions': 9.5699346876,\n", " u'expected_spend': 55.5378795743,\n", " u'p_Alive': 0.9378220826,\n", " u'projected_future_revenue': 531.4938802153,\n", " u'visitorId': u'8285822360184666751'},\n", " {u'discounted_expected_transactions': 23.4640715835,\n", " u'expected_spend': 22.5812594008,\n", " u'p_Alive': 1.0,\n", " u'projected_future_revenue': 529.8482870257,\n", " u'visitorId': u'4793786268025713476'},\n", " {u'discounted_expected_transactions': 8.3113481354,\n", " u'expected_spend': 62.835218396,\n", " u'p_Alive': 0.9859232763,\n", " u'projected_future_revenue': 522.2453752518,\n", " u'visitorId': u'1245183828784782831'},\n", " {u'discounted_expected_transactions': 2.538743571,\n", " u'expected_spend': 205.4933116268,\n", " u'p_Alive': 0.6379484539,\n", " u'projected_future_revenue': 521.6948237826,\n", " u'visitorId': u'52397172176561414'},\n", " {u'discounted_expected_transactions': 16.8828408302,\n", " u'expected_spend': 30.8696303294,\n", " u'p_Alive': 0.9942161182,\n", " u'projected_future_revenue': 521.1670553389,\n", " u'visitorId': u'6538629281919960102'},\n", " {u'discounted_expected_transactions': 12.7529393823,\n", " u'expected_spend': 40.6910577893,\n", " u'p_Alive': 1.0,\n", " u'projected_future_revenue': 518.9305933886,\n", " u'visitorId': u'2554055647449356373'},\n", " {u'discounted_expected_transactions': 4.8152205988,\n", " u'expected_spend': 106.8546999729,\n", " u'p_Alive': 0.4085710688,\n", " u'projected_future_revenue': 514.528952384,\n", " u'visitorId': u'3453413582959396247'},\n", " {u'discounted_expected_transactions': 7.6388436835,\n", " u'expected_spend': 67.213621689,\n", " u'p_Alive': 1.0,\n", " u'projected_future_revenue': 513.434349485,\n", " u'visitorId': u'2582785894872606989'},\n", " {u'discounted_expected_transactions': 22.2749644153,\n", " u'expected_spend': 22.5812594008,\n", " u'p_Alive': 0.9922723249,\n", " u'projected_future_revenue': 502.9967496064,\n", " u'visitorId': u'5022473798860953467'},\n", " {u'discounted_expected_transactions': 25.5225401455,\n", " u'expected_spend': 19.6640573328,\n", " u'p_Alive': 1.0,\n", " u'projected_future_revenue': 501.8766927,\n", " u'visitorId': u'585465543470709776'},\n", " {u'discounted_expected_transactions': 8.7048387959,\n", " u'expected_spend': 55.9648388562,\n", " u'p_Alive': 0.2740114749,\n", " u'projected_future_revenue': 487.1649004827,\n", " u'visitorId': u'1891929457439464460'},\n", " {u'discounted_expected_transactions': 43.8306190029,\n", " u'expected_spend': 11.0775858947,\n", " u'p_Alive': 0.8140669343,\n", " u'projected_future_revenue': 485.5374468215,\n", " u'visitorId': u'2030210718423412879'},\n", " {u'discounted_expected_transactions': 37.3546524756,\n", " u'expected_spend': 12.9646219606,\n", " u'p_Alive': 0.9364742187,\n", " u'projected_future_revenue': 484.2889478174,\n", " u'visitorId': u'7810193081915533024'},\n", " {u'discounted_expected_transactions': 18.1267300525,\n", " u'expected_spend': 26.514779789,\n", " u'p_Alive': 0.9464449228,\n", " u'projected_future_revenue': 480.6262556379,\n", " u'visitorId': u'1175418463087949908'},\n", " {u'discounted_expected_transactions': 30.6658345558,\n", " u'expected_spend': 15.6265638115,\n", " u'p_Alive': 0.9561655121,\n", " u'projected_future_revenue': 479.2016205197,\n", " u'visitorId': u'5453922256089579074'},\n", " {u'discounted_expected_transactions': 30.6524929005,\n", " u'expected_spend': 15.6265638115,\n", " u'p_Alive': 1.0,\n", " u'projected_future_revenue': 478.9931362922,\n", " u'visitorId': u'4081303446191497751'},\n", " {u'discounted_expected_transactions': 11.7462942873,\n", " u'expected_spend': 40.6910577893,\n", " u'p_Alive': 0.9352836813,\n", " u'projected_future_revenue': 477.9691396541,\n", " u'visitorId': u'8051780950736933753'},\n", " {u'discounted_expected_transactions': 23.105940493,\n", " u'expected_spend': 20.5683653749,\n", " u'p_Alive': 0.8639962719,\n", " u'projected_future_revenue': 475.2514263898,\n", " u'visitorId': u'9157427544173252340'},\n", " {u'discounted_expected_transactions': 5.3318937926,\n", " u'expected_spend': 88.8100702865,\n", " u'p_Alive': 0.4899104124,\n", " u'projected_future_revenue': 473.5258624826,\n", " u'visitorId': u'8556980614996812424'},\n", " {u'discounted_expected_transactions': 36.4533105355,\n", " u'expected_spend': 12.9646219606,\n", " u'p_Alive': 0.9862038284,\n", " u'projected_future_revenue': 472.6033903066,\n", " u'visitorId': u'239755057356520534'},\n", " {u'discounted_expected_transactions': 39.5069205321,\n", " u'expected_spend': 11.9470486426,\n", " u'p_Alive': 0.956008508,\n", " u'projected_future_revenue': 471.9911013148,\n", " u'visitorId': u'7260957843834274686'},\n", " {u'discounted_expected_transactions': 7.2686786918,\n", " u'expected_spend': 63.7884658987,\n", " u'p_Alive': 0.1726828812,\n", " u'projected_future_revenue': 463.6578628621,\n", " u'visitorId': u'7907955526939561361'},\n", " {u'discounted_expected_transactions': 23.5446278137,\n", " u'expected_spend': 19.6640573328,\n", " u'p_Alive': 0.9065474459,\n", " u'projected_future_revenue': 462.9829112095,\n", " u'visitorId': u'3348282228186199514'},\n", " {u'discounted_expected_transactions': 19.3306873047,\n", " u'expected_spend': 23.9164273251,\n", " u'p_Alive': 0.916997862,\n", " u'projected_future_revenue': 462.3209780671,\n", " u'visitorId': u'1465186725294156708'},\n", " {u'discounted_expected_transactions': 16.8734532361,\n", " u'expected_spend': 27.3857498971,\n", " u'p_Alive': 0.9880393865,\n", " u'projected_future_revenue': 462.0921702243,\n", " u'visitorId': u'3716941579262021090'},\n", " {u'discounted_expected_transactions': 17.2679305532,\n", " u'expected_spend': 26.514779789,\n", " u'p_Alive': 0.9639462657,\n", " u'projected_future_revenue': 457.8553760299,\n", " u'visitorId': u'5508608129049039409'},\n", " {u'discounted_expected_transactions': 5.9529971262,\n", " u'expected_spend': 76.0928791575,\n", " u'p_Alive': 0.2539406109,\n", " u'projected_future_revenue': 452.9806909458,\n", " u'visitorId': u'4045994824993976576'},\n", " {u'discounted_expected_transactions': 97.2048784364,\n", " u'expected_spend': 4.649074276,\n", " u'p_Alive': 0.9412787318,\n", " u'projected_future_revenue': 451.912699839,\n", " u'visitorId': u'2239193514829931282'},\n", " {u'discounted_expected_transactions': 8.1200127489,\n", " u'expected_spend': 55.5378795743,\n", " u'p_Alive': 0.7996240154,\n", " u'projected_future_revenue': 450.9682901878,\n", " u'visitorId': u'8573148529756678623'},\n", " {u'discounted_expected_transactions': 19.8672957578,\n", " u'expected_spend': 22.5812594008,\n", " u'p_Alive': 0.957008795,\n", " u'projected_future_revenue': 448.6285591004,\n", " u'visitorId': u'7059597055304393047'},\n", " {u'discounted_expected_transactions': 90.4180297535,\n", " u'expected_spend': 4.9515443221,\n", " u'p_Alive': 0.9468814123,\n", " u'projected_future_revenue': 447.7088818406,\n", " u'visitorId': u'4897687230632499917'},\n", " {u'discounted_expected_transactions': 8.0403568491,\n", " u'expected_spend': 55.5378795743,\n", " u'p_Alive': 0.8255080092,\n", " u'projected_future_revenue': 446.5443704213,\n", " u'visitorId': u'5336369422104386303'},\n", " {u'discounted_expected_transactions': 29.5586147374,\n", " u'expected_spend': 15.1027105581,\n", " u'p_Alive': 0.9329889697,\n", " u'projected_future_revenue': 446.4152028772,\n", " u'visitorId': u'6556353297689965583'},\n", " {u'discounted_expected_transactions': 4.4360732567,\n", " u'expected_spend': 98.932369389,\n", " u'p_Alive': 0.8325448942,\n", " u'projected_future_revenue': 438.8712380714,\n", " u'visitorId': u'4526189125217579369'},\n", " {u'discounted_expected_transactions': 15.9804640784,\n", " u'expected_spend': 27.2168503627,\n", " u'p_Alive': 0.2475094934,\n", " u'projected_future_revenue': 434.9378995489,\n", " u'visitorId': u'7540355297618155344'},\n", " {u'discounted_expected_transactions': 38.8408595234,\n", " u'expected_spend': 11.0775858947,\n", " u'p_Alive': 0.8058064652,\n", " u'projected_future_revenue': 430.2629575931,\n", " u'visitorId': u'6740204990613572967'},\n", " {u'discounted_expected_transactions': 7.6723869648,\n", " u'expected_spend': 55.5378795743,\n", " u'p_Alive': 0.9367262461,\n", " u'projected_future_revenue': 426.1081032983,\n", " u'visitorId': u'6244393828523734087'},\n", " {u'discounted_expected_transactions': 7.6450002792,\n", " u'expected_spend': 55.5378795743,\n", " u'p_Alive': 0.8255070416,\n", " u'projected_future_revenue': 424.5871048499,\n", " u'visitorId': u'4470908021329903950'},\n", " {u'discounted_expected_transactions': 7.4243089524,\n", " u'expected_spend': 55.5378795743,\n", " u'p_Alive': 0.7723220947,\n", " u'projected_future_revenue': 412.3303765189,\n", " u'visitorId': u'6223822399759817283'},\n", " {u'discounted_expected_transactions': 26.3341747289,\n", " u'expected_spend': 15.6265638115,\n", " u'p_Alive': 0.7812373276,\n", " u'projected_future_revenue': 411.5126618248,\n", " u'visitorId': u'6455901855247949162'},\n", " {u'discounted_expected_transactions': 26.3160496157,\n", " u'expected_spend': 15.6265638115,\n", " u'p_Alive': 0.8233093466,\n", " u'projected_future_revenue': 411.2294285866,\n", " u'visitorId': u'5915226431149561046'},\n", " {u'discounted_expected_transactions': 4.6344474572,\n", " u'expected_spend': 87.4429047498,\n", " u'p_Alive': 0.9003446313,\n", " u'projected_future_revenue': 405.2495475714,\n", " u'visitorId': u'8779326922972989430'},\n", " {u'discounted_expected_transactions': 22.5640405721,\n", " u'expected_spend': 17.4143518442,\n", " u'p_Alive': 0.8374307467,\n", " u'projected_future_revenue': 392.9381415508,\n", " u'visitorId': u'4239286374996574286'},\n", " {u'discounted_expected_transactions': 6.9932544927,\n", " u'expected_spend': 55.5378795743,\n", " u'p_Alive': 0.7817292837,\n", " u'projected_future_revenue': 388.3905258499,\n", " u'visitorId': u'7059391970616204992'},\n", " {u'discounted_expected_transactions': 6.9331263266,\n", " u'expected_spend': 55.5378795743,\n", " u'p_Alive': 0.714976213,\n", " u'projected_future_revenue': 385.0511349982,\n", " u'visitorId': u'6262348462563098041'},\n", " {u'discounted_expected_transactions': 4.3457365723,\n", " u'expected_spend': 87.4429047498,\n", " u'p_Alive': 0.9120615032,\n", " u'projected_future_revenue': 380.0038291556,\n", " u'visitorId': u'260680850986952112'},\n", " {u'discounted_expected_transactions': 33.5541783913,\n", " u'expected_spend': 11.2855779098,\n", " u'p_Alive': 0.571331661,\n", " u'projected_future_revenue': 378.6782944351,\n", " u'visitorId': u'1908925935814785690'},\n", " {u'discounted_expected_transactions': 6.7933222628,\n", " u'expected_spend': 55.5378795743,\n", " u'p_Alive': 0.8573429134,\n", " u'projected_future_revenue': 377.2867137424,\n", " u'visitorId': u'7790272173176969698'},\n", " {u'discounted_expected_transactions': 9.1103362342,\n", " u'expected_spend': 40.6910577893,\n", " u'p_Alive': 0.6215231659,\n", " u'projected_future_revenue': 370.7092181844,\n", " u'visitorId': u'6168283657963837157'},\n", " {u'discounted_expected_transactions': 9.1151991478,\n", " u'expected_spend': 40.5452873073,\n", " u'p_Alive': 0.662332851,\n", " u'projected_future_revenue': 369.5783683117,\n", " u'visitorId': u'1547227021618445660'},\n", " {u'discounted_expected_transactions': 8.8342645578,\n", " u'expected_spend': 40.6910577893,\n", " u'p_Alive': 0.7619126596,\n", " u'projected_future_revenue': 359.4755696471,\n", " u'visitorId': u'1635752903254561432'},\n", " {u'discounted_expected_transactions': 3.8320280499,\n", " u'expected_spend': 91.2948398004,\n", " u'p_Alive': 0.4920147206,\n", " u'projected_future_revenue': 349.8443869221,\n", " u'visitorId': u'1573754517760710526'},\n", " {u'discounted_expected_transactions': 3.9686355434,\n", " u'expected_spend': 87.4429047498,\n", " u'p_Alive': 0.8329174213,\n", " u'projected_future_revenue': 347.029019806,\n", " u'visitorId': u'8137441479310363673'},\n", " {u'discounted_expected_transactions': 18.945319714,\n", " u'expected_spend': 17.4143518442,\n", " u'p_Alive': 0.6417677323,\n", " u'projected_future_revenue': 329.9204633021,\n", " u'visitorId': u'4406952470770343104'},\n", " {u'discounted_expected_transactions': 10.1296118592,\n", " u'expected_spend': 32.1077595502,\n", " u'p_Alive': 0.7216791741,\n", " u'projected_future_revenue': 325.2391419126,\n", " u'visitorId': u'2176422954346395906'},\n", " {u'discounted_expected_transactions': 2.5273626382,\n", " u'expected_spend': 127.7815339087,\n", " u'p_Alive': 0.3317555974,\n", " u'projected_future_revenue': 322.9502746583,\n", " u'visitorId': u'1540799444135403059'},\n", " {u'discounted_expected_transactions': 17.5894196838,\n", " u'expected_spend': 18.3296077146,\n", " u'p_Alive': 0.6021968767,\n", " u'projected_future_revenue': 322.4071627311,\n", " u'visitorId': u'175986913381835565'}]" ] } ], "prompt_number": 107 }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can then choose your top customers and learn things about them. The example query below lists all of the products purchased by the top 200 customers (as ranked by `projected_future_revenue`). " ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%bigquery sql\n", "SELECT\n", " top_products,\n", " COUNT(top_products) AS quantity\n", "FROM (\n", " SELECT\n", " $visitor_id,\n", " hits.item.productName AS top_products\n", " FROM\n", " TABLE_DATE_RANGE([$cloud_project_number:$ga_view_id.ga_sessions_],\n", " TIMESTAMP($start_date),\n", " TIMESTAMP($cohort_end_date))\n", " ) a\n", "JOIN (\n", " SELECT\n", " visitorId\n", " FROM\n", " [outputs.jan_june_2014]\n", " ORDER BY\n", " projected_future_revenue DESC\n", " LIMIT\n", " 200\n", " ) b\n", "ON\n", " a.$visitor_id=b.visitorId\n", "GROUP BY\n", " top_products\n", "ORDER BY\n", " quantity DESC;" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 108 }, { "cell_type": "markdown", "metadata": {}, "source": [ "This notebook is open source and [available on GitHub](https://github.com/googleanalytics/bigquery-export-ipython-notebooks). You may report bugs or feature requests by [submitting an issue on GitHub](https://github.com/googleanalytics/bigquery-export-ipython-notebooks/issues/new)." ] } ], "metadata": {} } ] }