{
  "id": 78732,
  "title": "My hypothesis on the Competition",
  "url": "/competitions/elo-merchant-category-recommendation/discussion/78732",
  "author_name": "Mendrika Ramarlina",
  "post_date": "2019-01-27T11:07:42.494000",
  "votes": 72,
  "comment_count": 12,
  "views": 0,
  "content": "<p>While waiting on Kaggle Team to fix access to kernels, I thought I'd share some of my insights so far. These mostly intuitions so take with a grain of salt.</p>\n\n<p>What is Card_ID?\nI believe Card_ID is not a card identification number, but rather the coupling of card or customer id and some product offering by Elo bank. \nExample: (Card 1, 5% cash-back on every purchase at X category stores)</p>\n\n<p>Why some purchase occur before first_active_month?\nFirst active_month is not the first month that the card was active, it's date when the offering (second part of Card_ID) became active, whether because the customer opted in or some other business event happened. Some customer might have been active customers before they opted-in for the feature. Which would explain the fact that some purchase occurred before first_active month.</p>\n\n<p>What is loyalty score?\nIt some \"unrelated\" business metric that indicate how happy the customer was with the \"Elo product offering\" they received. This implies many things, competition description was well crafted, it hints at what is going on here. But basically, Elo wants to know how well we can predict how happy a customer will be with a given offering, only looking at their transaction history.</p>\n\n<p>We're effectively building: loyalty score = f(transaction_history, offering), higher is better. Offering is encoded in card_ID</p>\n\n<p>What are some important things to look for when doing Feature Engineering:\n    - Each card_id is represented by a time-dependent sequence of purchases, make sure to process date adequately. Clean the whole mess with purchase dates, first active month, month lag, reference date, historical period, evaluation periods and so on ...\n    - Aggregating categories by computing statistics works for numerical values but be careful with categories unless you know their orders mean something (ex: 1 : low, 2: ok, 3: high), look at ways to effectively extract information</p>\n\n<p>The implications of what loyalty score is and how this competition is a recommendation competition provided me with the biggest score improvement so far. Combined with improved date processing allowed me get my current score. I'm only using the public LightGBM kernel, haven't done any tuning from public parameters yet.</p>\n\n<p><strong>2/4/2019 Update: :)</strong></p>\n\n<p><strong>What questions are we supposed to answer?</strong> </p>\n\n<p>Plurial because I think we are supposed to answer two question:</p>\n\n<ol>\n<li>Will a given offering be relevant to the customer?</li>\n<li>If yes, how relevant?</li>\n</ol>\n\n<p>This is what the description says:</p>\n\n<blockquote>\n  <p>In this competition, Kagglers will develop algorithms to identify and\n  serve the <strong>most relevant opportunities to individuals</strong>, by\n  uncovering signal in customer loyalty. Your input will improve\n  customers’ lives and help Elo <strong>reduce unwanted campaigns</strong>, to create\n  the right experience for customers.</p>\n</blockquote>\n\n<p>How I understand this is that what we call \"outliers\" are \"unwanted campaigns\" that our algorithms are supposed to detect and classify. As such, these \"outliers\" should not be treated as noise but as signals.</p>\n\n<p>If the campaign is not \"unwanted\" then how much would the customer \"appreciate\" it? This is the regression part of the problem that we are all so familiar with.</p>\n\n<p>My experience so far: a small point improvement in my classification model results in a much higher score improvement in CV score than a proportionally similar score improvement in my regression model. Don't neglect you classifiers ;)</p>",
  "messages": [
    {
      "id": 461975,
      "postDate": "2019-01-27T11:07:42.493Z",
      "content": "<p>While waiting on Kaggle Team to fix access to kernels, I thought I'd share some of my insights so far. These mostly intuitions so take with a grain of salt.</p>\n\n<p>What is Card_ID?\nI believe Card_ID is not a card identification number, but rather the coupling of card or customer id and some product offering by Elo bank. \nExample: (Card 1, 5% cash-back on every purchase at X category stores)</p>\n\n<p>Why some purchase occur before first_active_month?\nFirst active_month is not the first month that the card was active, it's date when the offering (second part of Card_ID) became active, whether because the customer opted in or some other business event happened. Some customer might have been active customers before they opted-in for the feature. Which would explain the fact that some purchase occurred before first_active month.</p>\n\n<p>What is loyalty score?\nIt some \"unrelated\" business metric that indicate how happy the customer was with the \"Elo product offering\" they received. This implies many things, competition description was well crafted, it hints at what is going on here. But basically, Elo wants to know how well we can predict how happy a customer will be with a given offering, only looking at their transaction history.</p>\n\n<p>We're effectively building: loyalty score = f(transaction_history, offering), higher is better. Offering is encoded in card_ID</p>\n\n<p>What are some important things to look for when doing Feature Engineering:\n    - Each card_id is represented by a time-dependent sequence of purchases, make sure to process date adequately. Clean the whole mess with purchase dates, first active month, month lag, reference date, historical period, evaluation periods and so on ...\n    - Aggregating categories by computing statistics works for numerical values but be careful with categories unless you know their orders mean something (ex: 1 : low, 2: ok, 3: high), look at ways to effectively extract information</p>\n\n<p>The implications of what loyalty score is and how this competition is a recommendation competition provided me with the biggest score improvement so far. Combined with improved date processing allowed me get my current score. I'm only using the public LightGBM kernel, haven't done any tuning from public parameters yet.</p>\n\n<p><strong>2/4/2019 Update: :)</strong></p>\n\n<p><strong>What questions are we supposed to answer?</strong> </p>\n\n<p>Plurial because I think we are supposed to answer two question:</p>\n\n<ol>\n<li>Will a given offering be relevant to the customer?</li>\n<li>If yes, how relevant?</li>\n</ol>\n\n<p>This is what the description says:</p>\n\n<blockquote>\n  <p>In this competition, Kagglers will develop algorithms to identify and\n  serve the <strong>most relevant opportunities to individuals</strong>, by\n  uncovering signal in customer loyalty. Your input will improve\n  customers’ lives and help Elo <strong>reduce unwanted campaigns</strong>, to create\n  the right experience for customers.</p>\n</blockquote>\n\n<p>How I understand this is that what we call \"outliers\" are \"unwanted campaigns\" that our algorithms are supposed to detect and classify. As such, these \"outliers\" should not be treated as noise but as signals.</p>\n\n<p>If the campaign is not \"unwanted\" then how much would the customer \"appreciate\" it? This is the regression part of the problem that we are all so familiar with.</p>\n\n<p>My experience so far: a small point improvement in my classification model results in a much higher score improvement in CV score than a proportionally similar score improvement in my regression model. Don't neglect you classifiers ;)</p>",
      "rawMarkdown": "While waiting on Kaggle Team to fix access to kernels, I thought I'd share some of my insights so far. These mostly intuitions so take with a grain of salt.\n\nWhat is Card_ID?\nI believe Card_ID is not a card identification number, but rather the coupling of card or customer id and some product offering by Elo bank. \nExample: (Card 1, 5% cash-back on every purchase at X category stores)\n\nWhy some purchase occur before first_active_month?\nFirst active_month is not the first month that the card was active, it's date when the offering (second part of Card_ID) became active, whether because the customer opted in or some other business event happened. Some customer might have been active customers before they opted-in for the feature. Which would explain the fact that some purchase occurred before first_active month.\n\nWhat is loyalty score?\nIt some \"unrelated\" business metric that indicate how happy the customer was with the \"Elo product offering\" they received. This implies many things, competition description was well crafted, it hints at what is going on here. But basically, Elo wants to know how well we can predict how happy a customer will be with a given offering, only looking at their transaction history.\n\nWe're effectively building: loyalty score = f(transaction_history, offering), higher is better. Offering is encoded in card_ID\n\nWhat are some important things to look for when doing Feature Engineering:\n    - Each card_id is represented by a time-dependent sequence of purchases, make sure to process date adequately. Clean the whole mess with purchase dates, first active month, month lag, reference date, historical period, evaluation periods and so on ...\n    - Aggregating categories by computing statistics works for numerical values but be careful with categories unless you know their orders mean something (ex: 1 : low, 2: ok, 3: high), look at ways to effectively extract information\n\nThe implications of what loyalty score is and how this competition is a recommendation competition provided me with the biggest score improvement so far. Combined with improved date processing allowed me get my current score. I'm only using the public LightGBM kernel, haven't done any tuning from public parameters yet.\n\n**2/4/2019 Update: :)**\n\n**What questions are we supposed to answer?** \n\nPlurial because I think we are supposed to answer two question:\n\n1. Will a given offering be relevant to the customer?\n2. If yes, how relevant?\n\nThis is what the description says:\n&gt; In this competition, Kagglers will develop algorithms to identify and\n&gt; serve the **most relevant opportunities to individuals**, by\n&gt; uncovering signal in customer loyalty. Your input will improve\n&gt; customers’ lives and help Elo **reduce unwanted campaigns**, to create\n&gt; the right experience for customers.\n\nHow I understand this is that what we call \"outliers\" are \"unwanted campaigns\" that our algorithms are supposed to detect and classify. As such, these \"outliers\" should not be treated as noise but as signals.\n\nIf the campaign is not \"unwanted\" then how much would the customer \"appreciate\" it? This is the regression part of the problem that we are all so familiar with.\n\nMy experience so far: a small point improvement in my classification model results in a much higher score improvement in CV score than a proportionally similar score improvement in my regression model. Don't neglect you classifiers ;)",
      "votes": 72
    },
    {
      "id": 462036,
      "postDate": "2019-01-27T14:26:21.220Z",
      "content": "<p>Actually, that is the problem with that competition. We sre doing feature engineering based only on assumptions, due to the fact that the host has not made clear some basic competitors' concerns.</p>\n\n<p>Your insights seem reasonable though </p>",
      "rawMarkdown": "Actually, that is the problem with that competition. We sre doing feature engineering based only on assumptions, due to the fact that the host has not made clear some basic competitors' concerns.\n\nYour insights seem reasonable though ",
      "votes": 5
    },
    {
      "id": 462298,
      "postDate": "2019-01-28T04:13:39.487Z",
      "content": "<p>These are beautiful insights indeed, take my upvote Mendrika</p>",
      "rawMarkdown": "These are beautiful insights indeed, take my upvote Mendrika",
      "votes": 1
    },
    {
      "id": 462269,
      "postDate": "2019-01-28T02:19:43.507Z",
      "content": "<p>Are you saying that the 10digit in card_id is not a random number, but actually has a meaning?\nThat is mind blowing...</p>",
      "rawMarkdown": "Are you saying that the 10digit in card_id is not a random number, but actually has a meaning?\nThat is mind blowing...",
      "votes": 1,
      "replies": [
        {
          "id": 462478,
          "postDate": "2019-01-28T10:58:38.093Z",
          "content": "<p>I do not think this is what Mendrika meant. I think, and reasonably , he was simply saying card_id is not just unique identifications of each cards.  it's coupled with offers by Elo. which doesn't necessarily mean that 10digit numbers itself has any rules or meaning. And I believe Elo just randomly encoded numbers for competition.</p>",
          "rawMarkdown": "I do not think this is what Mendrika meant. I think, and reasonably , he was simply saying card_id is not just unique identifications of each cards.  it's coupled with offers by Elo. which doesn't necessarily mean that 10digit numbers itself has any rules or meaning. And I believe Elo just randomly encoded numbers for competition."
        }
      ]
    },
    {
      "id": 461988,
      "postDate": "2019-01-27T11:32:51.813Z",
      "content": "<p>Very nice insights :-)</p>\n\n<p>So do you think that train: feature_1,feature_2,feature_3 is also directly related to the offering?</p>",
      "rawMarkdown": "Very nice insights :-)\n\nSo do you think that train: feature_1,feature_2,feature_3 is also directly related to the offering?",
      "votes": 1,
      "replies": [
        {
          "id": 461994,
          "postDate": "2019-01-27T12:07:59.250Z",
          "content": "<p>That's my thinking, either that or related to the cards themselvese things like card levels (silver, gold, platinum etc...) or both. Haha we're venturing in the realm of speculation here. But I think it's a good exercise to come up with interesting pre-processing approaches</p>",
          "rawMarkdown": "That's my thinking, either that or related to the cards themselvese things like card levels (silver, gold, platinum etc...) or both. Haha we're venturing in the realm of speculation here. But I think it's a good exercise to come up with interesting pre-processing approaches",
          "votes": 2
        }
      ]
    },
    {
      "id": 472601,
      "postDate": "2019-02-16T09:05:25.460Z",
      "content": "<p>I believe there are some subscription based \"campaigns\" because temporal features play quite a big role </p>",
      "rawMarkdown": "I believe there are some subscription based \"campaigns\" because temporal features play quite a big role "
    },
    {
      "id": 465888,
      "postDate": "2019-02-04T09:10:34.597Z",
      "content": "<p>Thanks for the great insights Mendrika. </p>\n\n<p>The shape of the historical transaction file is (29112361, 14) while 325540 is the number of unique card_ids. i.e., ~90 (29112361/325540) cards should be issues by Elo which I feel is a high number. 90 transactions for a card seems a more plausible hypothesis.</p>",
      "rawMarkdown": "Thanks for the great insights Mendrika. \n\nThe shape of the historical transaction file is (29112361, 14) while 325540 is the number of unique card_ids. i.e., ~90 (29112361/325540) cards should be issues by Elo which I feel is a high number. 90 transactions for a card seems a more plausible hypothesis."
    },
    {
      "id": 462827,
      "postDate": "2019-01-29T01:11:53.397Z",
      "content": "<p>I think your assumption is reasonable,  Especially the relationship between the his and newhis dataset.</p>",
      "rawMarkdown": "I think your assumption is reasonable,  Especially the relationship between the his and newhis dataset.",
      "replies": [
        {
          "id": 468085,
          "postDate": "2019-02-08T09:15:18.697Z",
          "content": "<p>Dear LongYin and Mandrika:\nCould you please explain more about the relationship between hist and new merchant dataset?\nSince Mandrika says Loyalty score = f(hist, offering), but if so, what is the role of new merchant?\nThanks a lot!!</p>",
          "rawMarkdown": "Dear LongYin and Mandrika:\nCould you please explain more about the relationship between hist and new merchant dataset?\nSince Mandrika says Loyalty score = f(hist, offering), but if so, what is the role of new merchant?\nThanks a lot!!"
        },
        {
          "id": 472676,
          "postDate": "2019-02-16T13:05:19.327Z",
          "content": "<p>raddar has very nice analysis about the target. You can refer to that. </p>",
          "rawMarkdown": "raddar has very nice analysis about the target. You can refer to that. "
        }
      ]
    },
    {
      "id": 462500,
      "postDate": "2019-01-28T11:43:47.317Z",
      "rawMarkdown": "",
      "isDeleted": true
    }
  ],
  "comments": [
    {
      "id": 462036,
      "author_name": "Dimosthenis Karaflos",
      "author_url": "",
      "post_date": "2019-01-27T14:26:21.220000",
      "content": "<p>Actually, that is the problem with that competition. We sre doing feature engineering based only on assumptions, due to the fact that the host has not made clear some basic competitors' concerns.</p>\n\n<p>Your insights seem reasonable though </p>",
      "votes": 5,
      "replies": []
    },
    {
      "id": 462298,
      "author_name": "Hajun kim",
      "author_url": "",
      "post_date": "2019-01-28T04:13:39.487000",
      "content": "<p>These are beautiful insights indeed, take my upvote Mendrika</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 462269,
      "author_name": "pocket",
      "author_url": "",
      "post_date": "2019-01-28T02:19:43.507000",
      "content": "<p>Are you saying that the 10digit in card_id is not a random number, but actually has a meaning?\nThat is mind blowing...</p>",
      "votes": 1,
      "replies": [
        {
          "id": 462478,
          "author_name": "Hajun kim",
          "author_url": "",
          "post_date": "2019-01-28T10:58:38.093000",
          "content": "<p>I do not think this is what Mendrika meant. I think, and reasonably , he was simply saying card_id is not just unique identifications of each cards.  it's coupled with offers by Elo. which doesn't necessarily mean that 10digit numbers itself has any rules or meaning. And I believe Elo just randomly encoded numbers for competition.</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 461988,
      "author_name": "PeterSorensen",
      "author_url": "",
      "post_date": "2019-01-27T11:32:51.813000",
      "content": "<p>Very nice insights :-)</p>\n\n<p>So do you think that train: feature_1,feature_2,feature_3 is also directly related to the offering?</p>",
      "votes": 1,
      "replies": [
        {
          "id": 461994,
          "author_name": "Mendrika Ramarlina",
          "author_url": "",
          "post_date": "2019-01-27T12:07:59.250000",
          "content": "<p>That's my thinking, either that or related to the cards themselvese things like card levels (silver, gold, platinum etc...) or both. Haha we're venturing in the realm of speculation here. But I think it's a good exercise to come up with interesting pre-processing approaches</p>",
          "votes": 2,
          "replies": []
        }
      ]
    },
    {
      "id": 472601,
      "author_name": "Andrea Mariani",
      "author_url": "",
      "post_date": "2019-02-16T09:05:25.460000",
      "content": "<p>I believe there are some subscription based \"campaigns\" because temporal features play quite a big role </p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 465888,
      "author_name": "Vipin",
      "author_url": "",
      "post_date": "2019-02-04T09:10:34.597000",
      "content": "<p>Thanks for the great insights Mendrika. </p>\n\n<p>The shape of the historical transaction file is (29112361, 14) while 325540 is the number of unique card_ids. i.e., ~90 (29112361/325540) cards should be issues by Elo which I feel is a high number. 90 transactions for a card seems a more plausible hypothesis.</p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 462827,
      "author_name": "LongYin/杰少",
      "author_url": "",
      "post_date": "2019-01-29T01:11:53.397000",
      "content": "<p>I think your assumption is reasonable,  Especially the relationship between the his and newhis dataset.</p>",
      "votes": 0,
      "replies": [
        {
          "id": 468085,
          "author_name": "zionCheng",
          "author_url": "",
          "post_date": "2019-02-08T09:15:18.697000",
          "content": "<p>Dear LongYin and Mandrika:\nCould you please explain more about the relationship between hist and new merchant dataset?\nSince Mandrika says Loyalty score = f(hist, offering), but if so, what is the role of new merchant?\nThanks a lot!!</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 472676,
          "author_name": "LongYin/杰少",
          "author_url": "",
          "post_date": "2019-02-16T13:05:19.327000",
          "content": "<p>raddar has very nice analysis about the target. You can refer to that. </p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 462500,
      "author_name": "",
      "author_url": "",
      "post_date": "2019-01-28T11:43:47.317000",
      "content": "",
      "votes": 0,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "461975": "While waiting on Kaggle Team to fix access to kernels, I thought I'd share some of my insights so far. These mostly intuitions so take with a grain of salt.\n\nWhat is Card_ID?\nI believe Card_ID is not a card identification number, but rather the coupling of card or customer id and some product offering by Elo bank. \nExample: (Card 1, 5% cash-back on every purchase at X category stores)\n\nWhy some purchase occur before first_active_month?\nFirst active_month is not the first month that the card was active, it's date when the offering (second part of Card_ID) became active, whether because the customer opted in or some other business event happened. Some customer might have been active customers before they opted-in for the feature. Which would explain the fact that some purchase occurred before first_active month.\n\nWhat is loyalty score?\nIt some \"unrelated\" business metric that indicate how happy the customer was with the \"Elo product offering\" they received. This implies many things, competition description was well crafted, it hints at what is going on here. But basically, Elo wants to know how well we can predict how happy a customer will be with a given offering, only looking at their transaction history.\n\nWe're effectively building: loyalty score = f(transaction_history, offering), higher is better. Offering is encoded in card_ID\n\nWhat are some important things to look for when doing Feature Engineering:\n    - Each card_id is represented by a time-dependent sequence of purchases, make sure to process date adequately. Clean the whole mess with purchase dates, first active month, month lag, reference date, historical period, evaluation periods and so on ...\n    - Aggregating categories by computing statistics works for numerical values but be careful with categories unless you know their orders mean something (ex: 1 : low, 2: ok, 3: high), look at ways to effectively extract information\n\nThe implications of what loyalty score is and how this competition is a recommendation competition provided me with the biggest score improvement so far. Combined with improved date processing allowed me get my current score. I'm only using the public LightGBM kernel, haven't done any tuning from public parameters yet.\n\n**2/4/2019 Update: :)**\n\n**What questions are we supposed to answer?** \n\nPlurial because I think we are supposed to answer two question:\n\n1. Will a given offering be relevant to the customer?\n2. If yes, how relevant?\n\nThis is what the description says:\n&gt; In this competition, Kagglers will develop algorithms to identify and\n&gt; serve the **most relevant opportunities to individuals**, by\n&gt; uncovering signal in customer loyalty. Your input will improve\n&gt; customers’ lives and help Elo **reduce unwanted campaigns**, to create\n&gt; the right experience for customers.\n\nHow I understand this is that what we call \"outliers\" are \"unwanted campaigns\" that our algorithms are supposed to detect and classify. As such, these \"outliers\" should not be treated as noise but as signals.\n\nIf the campaign is not \"unwanted\" then how much would the customer \"appreciate\" it? This is the regression part of the problem that we are all so familiar with.\n\nMy experience so far: a small point improvement in my classification model results in a much higher score improvement in CV score than a proportionally similar score improvement in my regression model. Don't neglect you classifiers ;)",
    "462036": "Actually, that is the problem with that competition. We sre doing feature engineering based only on assumptions, due to the fact that the host has not made clear some basic competitors' concerns.\n\nYour insights seem reasonable though ",
    "462298": "These are beautiful insights indeed, take my upvote Mendrika",
    "462269": "Are you saying that the 10digit in card_id is not a random number, but actually has a meaning?\nThat is mind blowing...",
    "461988": "Very nice insights :-)\n\nSo do you think that train: feature_1,feature_2,feature_3 is also directly related to the offering?",
    "472601": "I believe there are some subscription based \"campaigns\" because temporal features play quite a big role ",
    "465888": "Thanks for the great insights Mendrika. \n\nThe shape of the historical transaction file is (29112361, 14) while 325540 is the number of unique card_ids. i.e., ~90 (29112361/325540) cards should be issues by Elo which I feel is a high number. 90 transactions for a card seems a more plausible hypothesis.",
    "462827": "I think your assumption is reasonable,  Especially the relationship between the his and newhis dataset.",
    "462500": ""
  }
}