Empty result even though there are events

32 views
Skip to first unread message

Vaghawan Ojha

unread,
Mar 31, 2017, 1:44:36 AM3/31/17
to us...@predictionio.incubator.apache.org, actionml-user
Hi, 

I imported the bulk data using pio import --appid (id) --input  data.json . The import was successful, then I build and trained and deployed the UR, but when I query the server, it always returns a empty json {"itemScores":[]} . 


I think,  I must be missing something in the config, here is my engine.json 

{
  "comment":" This config file uses default settings for all but the required values see README.md for docs",
  "id": "default",
  "description": "Default settings",
  "engineFactory": "org.template.RecommendationEngine",
  "datasource": {
    "params" : {
      "name": "sample-handmade-data.txt",
      "appName": "handmade",
      "eventNames": ["purchase", "view"]
    }
  },
  "sparkConf": {
    "spark.serializer": "org.apache.spark.serializer.KryoSerializer",
    "spark.kryo.registrator": "org.apache.mahout.sparkbindings.io.MahoutKryoRegistrator",
    "spark.kryo.referenceTracking": "false",
    "spark.kryoserializer.buffer": "300m",
    "es.index.auto.create": "true"
  },
  "algorithms": [
    {
      "comment": "simplest setup where all values are default, popularity based backfill, must add eventsNames",
      "name": "ur",
      "params": {
        "appName": "handmade",
        "indexName": "urindex",
        "typeName": "items",
        "comment": "must have data for the first event or the model will not build, other events are optional",
        "indicators": [
          {
            "name": "purchase"
          },{
            "name": "view",
            "maxCorrelatorsPerItem": 50
          }
        ],
        "availableDateName": "available",
        "expireDateName": "expires",
        "dateName": "date",
        "num": 4
      }
    }
  ]
}

is the data supposed to come from the sample-handmade-data.txt? I'm not sure this is weird. My json data import and trains correctly without an error. And example integration runs fine.

Vaghawan Ojha

unread,
Mar 31, 2017, 1:55:25 AM3/31/17
to us...@predictionio.incubator.apache.org, actionml-user
I've 50000 transection data for experiment. I don't  think it's the data because with the same data I could get recommendation using Recommendation template. 

Vaghawan Ojha

unread,
Mar 31, 2017, 3:52:50 AM3/31/17
to us...@predictionio.incubator.apache.org, actionml-user
More info: I don't have the secondary event like "View" in my data, I just don't collect the view event, since I'm using old purchased history of the user. 

With integration test data everything is Ok, but with my real data, it's not.  All the data looks like this with varying item_id and user_id. There is no view events. 

{"entityId":"00068116","entityType":"user","event":"purchase","targetEntityType":"item","targetEntityId":"BM8941"}
{"entityId":"00068116","entityType":"user","event":"purchase","targetEntityType":"item","targetEntityId":"BM8920"}
{"entityId":"00088894","entityType":"user","event":"purchase","targetEntityType":"item","targetEntityId":"BM66336"}
{"entityId":"00097710","entityType":"user","event":"purchase","targetEntityType":"item","targetEntityId":"BM42110"}
{"entityId":"00097710","entityType":"user","event":"purchase","targetEntityType":"item","targetEntityId":"BM61833"}
{"entityId":"00097710","entityType":"user","event":"purchase","targetEntityType":"item","targetEntityId":"BM65826"}
{"entityId":"00097710","entityType":"user","event":"purchase","targetEntityType":"item","targetEntityId":"BM40182"}
{"entityId":"00097710","entityType":"user","event":"purchase","targetEntityType":"item","targetEntityId":"BM5001"}

Is my data wrong? I am able to successfully  train and deploy the engine. 

Pat Ferrel

unread,
Mar 31, 2017, 3:44:42 PM3/31/17
to Vaghawan Ojha, us...@predictionio.incubator.apache.org, actionml-user
You have active date range filters and no dates in your data. This is because you are using the engine.json from the integration test, which uses that config. 

Start form engine.json.minimum and set the appName for your data and the eventNames you will use.


On Mar 31, 2017, at 12:52 AM, Vaghawan Ojha <vagha...@gmail.com> wrote:

More info: I don't have the secondary event like "View" in my data, I just don't collect the view event, since I'm using old purchased history of the user. 

With integration test data everything is Ok, but with my real data, it's not.  All the data looks like this with varying item_id and user_id. There is no view events. 

{"entityId":"00068116","entityType":"user","event":"purchase","targetEntityType":"item","targetEntityId":"BM8941"}
{"entityId":"00068116","entityType":"user","event":"purchase","targetEntityType":"item","targetEntityId":"BM8920"}
{"entityId":"00088894","entityType":"user","event":"purchase","targetEntityType":"item","targetEntityId":"BM66336"}
{"entityId":"00097710","entityType":"user","event":"purchase","targetEntityType":"item","targetEntityId":"BM42110"}
{"entityId":"00097710","entityType":"user","event":"purchase","targetEntityType":"item","targetEntityId":"BM61833"}
{"entityId":"00097710","entityType":"user","event":"purchase","targetEntityType":"item","targetEntityId":"BM65826"}
{"entityId":"00097710","entityType":"user","event":"purchase","targetEntityType":"item","targetEntityId":"BM40182"}
{"entityId":"00097710","entityType":"user","event":"purchase","targetEntityType":"item","targetEntityId":"BM5001"}

Is my data wrong? I am able to successfully  train and deploy the engine. 
On Fri, Mar 31, 2017 at 11:40 AM, Vaghawan Ojha <vagha...@gmail.com> wrote:
I've 50000 transection data for experiment. I don't  think it's the data because with the same data I could get recommendation using Recommendation template. 


-- 
You received this message because you are subscribed to the Google Groups "actionml-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email to actionml-use...@googlegroups.com.
To post to this group, send email to action...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/actionml-user/CA%2B69RXbRLmJXz7k%2BaB%2BPp1i1ZA0gmvH0U8U2kMzZ%2B-stgx-xjA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Vaghawan Ojha

unread,
Apr 3, 2017, 12:06:33 AM4/3/17
to Pat Ferrel, us...@predictionio.incubator.apache.org, actionml-user
Hi, 

Thank you, I did the changes. But whenever I changed the appname and did pio build its Ok, but while training it says invalid appname for any other app name. I'm missing something, however when I left the appname as handmade, it works. 

Now the data and recommendation are all working. Thank you very much, I used engine.json.minimum. I will be testing other features, like cart recommendation. Here's my engine.json

{
  "comment":" This config file uses default settings for all but the required values see README.md for docs",
  "id": "default",
  "description": "Default settings",
  "engineFactory": "org.template.RecommendationEngine",
  "datasource": {
    "params" : {
      "name": "sample-handmade-data.txt",
      "appName": "handmade",
      "eventNames": ["purchase", "view"]
    }
  },
  "sparkConf": {
    "spark.serializer": "org.apache.spark.serializer.KryoSerializer",
    "spark.kryo.registrator": "org.apache.mahout.sparkbindings.io.MahoutKryoRegistrator",
    "spark.kryo.referenceTracking": "false",
    "spark.kryoserializer.buffer.mb": "300",
    "spark.kryoserializer.buffer": "300m",
    "es.index.auto.create": "true"
  },
  "algorithms": [
    {
      "comment": "simplest setup where all values are default, popularity based backfill, must add eventsNames",
      "name": "ur",
      "params": {
        "appName": "handmade",
        "indexName": "urindex",
        "typeName": "items",
        "comment": "must have data for the first event or the model will not build, other events are optional",
        "eventNames": ["purchase", "view"]
      }
    }
  ]
}

I was very curious, what does this means: "name": "sample-handmade-data.txt",
Thanks


To unsubscribe from this group and stop receiving emails from it, send an email to actionml-user+unsubscribe@googlegroups.com.
To post to this group, send email to actionml-user@googlegroups.com.

Pat Ferrel

unread,
Apr 3, 2017, 9:13:07 AM4/3/17
to Vaghawan Ojha, us...@predictionio.incubator.apache.org, actionml-user
I am unclear. What is the problem? You can’t use different datasets (different appNames)?

What is the output of `pio app list`


On Apr 2, 2017, at 9:06 PM, Vaghawan Ojha <vagha...@gmail.com> wrote:

Hi, 

To unsubscribe from this group and stop receiving emails from it, send an email to actionml-use...@googlegroups.com.
To post to this group, send email to action...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/actionml-user/CA%2B69RXbiz0ghijds%2B3X8Z8fO%3DQOnwVxY_TWh_Pg%3DHqVMsFziAQ%40mail.gmail.com.

Vaghawan Ojha

unread,
Apr 4, 2017, 11:13:15 PM4/4/17
to Pat Ferrel, us...@predictionio.incubator.apache.org, actionml-user
Hi,

Yes, I couldn't use different appName. Even when I changed the appName in engine.json and did pio build, the app name in pio app list still reamins the same. Something to do with the pio itself, I guess.

Thank you very much for your support. 

Donald Szeto

unread,
Apr 4, 2017, 11:19:18 PM4/4/17
to Pat Ferrel, us...@predictionio.incubator.apache.org, actionml-user
Are you using the appName in engine.json that corresponds to the appId you used when you did `pio import`? Setting a new appName in engine.json will not automatically create a new app. Apps are created when you do `pio app new`.

To unsubscribe from this group and stop receiving emails from it, send an email to actionml-use...@googlegroups.com.
To post to this group, send email to action...@googlegroups.com.

-- 
You received this message because you are subscribed to the Google Groups "actionml-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email to actionml-use...@googlegroups.com.
To post to this group, send email to action...@googlegroups.com.

Vaghawan Ojha

unread,
Apr 4, 2017, 11:24:50 PM4/4/17
to us...@predictionio.incubator.apache.org, Pat Ferrel, actionml-user
Oh, Ok. That's my mistake then. I think creating a new app would solve the problem. 

Thanks


To unsubscribe from this group and stop receiving emails from it, send an email to actionml-user+unsubscribe@googlegroups.com.
To post to this group, send email to actionml-user@googlegroups.com.

-- 
You received this message because you are subscribed to the Google Groups "actionml-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email to actionml-user+unsubscribe@googlegroups.com.
To post to this group, send email to actionml-user@googlegroups.com.

Pat Ferrel

unread,
Apr 5, 2017, 12:22:34 PM4/5/17
to Vaghawan Ojha, us...@predictionio.incubator.apache.org, actionml-user
apps in the EventServer are really datasets, you change which one the template uses by changing the appName in engine.json. Otherwise the template continues to use the one on engine.json. 

PIO is setup to allow many datasets that you can point a template/engine towards. You may have serveral templates all using different datasets/appNames.
Reply all
Reply to author
Forward
0 new messages