You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@mahout.apache.org by Joe Spears <js...@indieplaya.com> on 2010/04/19 23:07:11 UTC

Recommending items for anonymous users

I just bought the MEAP Mahout in action book and think it is awesome. It is
very helpful to see the simple examples and the plain English.

I am having trouble with one use case in particular... making a
recommendation for either an anonymous user or for a user that has never
performed any action at all.... (e.g. the first time the user logs in after
signing up for an account). Even in the Manning book, the documented
workaround is to cluster the users... but even then (in the case of an
anonymous user or before the very first interaction) there is no way to
cluster a user successfully.

In what ways do other people solve this initial discovery issue inside of
Mahout? (i.e. outside of using a "stats table" that contains the most
popular items and using that to produce results on behalf of the
recommender).

Thanks,

Joe

Re: Recommending items for anonymous users

Posted by Ted Dunning <te...@gmail.com>.
The most-popular solution is about as good as you can do in the recommender
itself. (except that you should adjust it to hit a wider range of tastes).

The interface can intervene, however, to give a much better experience.
Just interpose a page with a selection of topics or top items and have the
user select which they might like.  From there, you have data to work with
and can proceed normally.

On Mon, Apr 19, 2010 at 2:07 PM, Joe Spears <js...@indieplaya.com> wrote:

> In what ways do other people solve this initial discovery issue inside of
> Mahout? (i.e. outside of using a "stats table" that contains the most
> popular items and using that to produce results on behalf of the
> recommender).
>

Re: Recommending items for anonymous users

Posted by Ted Dunning <te...@gmail.com>.
Not necessarily.  Different things may be popular for new people.

Also, there may be items which are highly correlated.  In general, it is
good to have as wide a variety as possible for an introductory experience.

On Mon, Apr 19, 2010 at 4:53 PM, Sean Owen <sr...@gmail.com> wrote:

> This more or less reduces to just listing the overall most popular
> items as recommendations right (which is no bad thing)?
>

Re: Recommending items for anonymous users

Posted by Ted Dunning <te...@gmail.com>.
For a limited experience such as the new user or new items, you can build
traditional user segment based models using logistic regression or other
modeling techniques.

This winds up being a patchwork sort of thing.

On Tue, Apr 20, 2010 at 1:09 AM, Sebastian Schelter <
sebastian.schelter@zalando.de> wrote:

> Some details on approaches to including items with no interactions (like
> brand new products) in your recommender system can be found in this paper
> "Feature Based Recommendation System"
> (
> http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.99.4058&rep=rep1&type=pdf
> ).
>
> I'm currently doing some research on this and find the ideas quite
> appealing but have not yet found a good way to implement this. It's
> basically stating what was already said here: use the attributes
> (features) of new items to find similar items for which you can make
> predicitions.
>
> Regards,
> Sebastian
>
>
>

Re: Recommending items for anonymous users

Posted by Sebastian Schelter <se...@zalando.de>.
Some details on approaches to including items with no interactions (like
brand new products) in your recommender system can be found in this paper
"Feature Based Recommendation System"
(http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.99.4058&rep=rep1&type=pdf).

I'm currently doing some research on this and find the ideas quite
appealing but have not yet found a good way to implement this. It's
basically stating what was already said here: use the attributes
(features) of new items to find similar items for which you can make
predicitions.

Regards,
Sebastian



Re: Recommending items for anonymous users

Posted by Sean Owen <sr...@gmail.com>.
This more or less reduces to just listing the overall most popular
items as recommendations right (which is no bad thing)?

On Tue, Apr 20, 2010 at 12:50 AM, Ted Dunning <te...@gmail.com> wrote:
> Insofar as you can tell with no information other than they are new, yes.
>
> On Mon, Apr 19, 2010 at 3:19 PM, Benson Margulies <bi...@gmail.com>wrote:
>
>> But do they behave like each other?
>>
>

Re: Recommending items for anonymous users

Posted by Ted Dunning <te...@gmail.com>.
Insofar as you can tell with no information other than they are new, yes.

On Mon, Apr 19, 2010 at 3:19 PM, Benson Margulies <bi...@gmail.com>wrote:

> But do they behave like each other?
>

Re: Recommending items for anonymous users

Posted by Benson Margulies <bi...@gmail.com>.
But do they behave like each other?

On Mon, Apr 19, 2010 at 6:12 PM, Ted Dunning <te...@gmail.com> wrote:

> You can also give ALL anonymous users the same id.  As soon as you get real
> data, you give the user a real id.
>
> This is very useful if you have lots of tire-kickers who behave differently
> from real users.
>
> On Mon, Apr 19, 2010 at 2:17 PM, Sean Owen <sr...@gmail.com> wrote:
>
> >
> > At the other end of the spectrum, you can attempt to track this
> > anonymous user and give him/her a user ID, put it in the DataModel,
> > update recommendations constantly. This can get expensive to manage
> > efficiently if this is a frequent occurrence.
>

Re: Recommending items for anonymous users

Posted by Ted Dunning <te...@gmail.com>.
You can also give ALL anonymous users the same id.  As soon as you get real
data, you give the user a real id.

This is very useful if you have lots of tire-kickers who behave differently
from real users.

On Mon, Apr 19, 2010 at 2:17 PM, Sean Owen <sr...@gmail.com> wrote:

>
> At the other end of the spectrum, you can attempt to track this
> anonymous user and give him/her a user ID, put it in the DataModel,
> update recommendations constantly. This can get expensive to manage
> efficiently if this is a frequent occurrence.

Re: Recommending items for anonymous users

Posted by Ted Dunning <te...@gmail.com>.
The standard for item discovery is to recommend attributes of items and then
do a weighted search for items with those attributes.

On Mon, Apr 19, 2010 at 3:00 PM, Joe Spears <js...@indieplaya.com> wrote:

> That would be great. I mean, the two discovery problems are 'user'
> discovery
> and 'item' discovery. Using content-based approaches, I can do something
> about when to recommend a new item... but the user approach example would
> be
> great.
>

Re: Recommending items for anonymous users

Posted by Joe Spears <js...@indieplaya.com>.
I was just looking at the javadocs. It all seems pretty logical... this
seems a lot better than contaminating the realData by inserting statistical
data from the overall user community that might skew the results for
smaller clusters.

To divine what could be an example in your book on the subject, it is nice
to be able to recommend bands that are like both "New 2 Town" and "Bowling
in Hades" to an anonymous user (because statistically, my community could be
evenly divided in their fandom) and then to only show bands like "Bowling in
Hades" once the user logs in (since users like "the logged in user" only
like that particular band of the two).


On Mon, Apr 19, 2010 at 3:22 PM, Sean Owen <sr...@gmail.com> wrote:

> On Mon, Apr 19, 2010 at 11:00 PM, Joe Spears <js...@indieplaya.com>
> wrote:
> > This would be ideal. I will be using a default userid of 0 for anonymous
> > users, and as far as the application is concerned, I can treat all
> anonymous
> > users as the same anonymous user for now.
>
> Makes sense. Actually the class defines a constant for the anonymous
> user ID so use that.
>

Re: Recommending items for anonymous users

Posted by Sean Owen <sr...@gmail.com>.
On Mon, Apr 19, 2010 at 11:00 PM, Joe Spears <js...@indieplaya.com> wrote:
> This would be ideal. I will be using a default userid of 0 for anonymous
> users, and as far as the application is concerned, I can treat all anonymous
> users as the same anonymous user for now.

Makes sense. Actually the class defines a constant for the anonymous
user ID so use that.

Re: Recommending items for anonymous users

Posted by Joe Spears <js...@indieplaya.com>.
Sean,

Responses inline.

Yep, I know what you mean. I didn't really talk about this (yet) in
> the book and likely should spend a page on it.
>

That would be great. I mean, the two discovery problems are 'user' discovery
and 'item' discovery. Using content-based approaches, I can do something
about when to recommend a new item... but the user approach example would be
great.

Of course, I wouldn't want to talk you out of documenting the best-practice
for Mahout based item discovery in the final version of the book.


> One solution is to punt on the problem, as Ted says: until you get
> enough data or the user has a real presence, don't recommend.
>

In my case, this isn't practical. For now, (and in my home grown, deprecated
recommender) I have a "backfill list" (built with system-wide stats) that I
use to make a recommendation when I can't come up with anything from my
existing recommender... but the main point of my email was that I may want
to get rid of this and do as much as possible inside of Mahout.


> ...
>


> I can offer you a mildly hacky but fairly useful middle-ground:
> PlusAnonymousUserDataModel. It decorates/wraps your DataModel and lets
> you temporarily set preferences for one anonymous new user. (You need
> to think of thread-safety potentially -- you can only do this for one
> user at a time.)
>
>
This would be ideal. I will be using a default userid of 0 for anonymous
users, and as far as the application is concerned, I can treat all anonymous
users as the same anonymous user for now.

...
>

Appreciated.

Re: Recommending items for anonymous users

Posted by Sean Owen <sr...@gmail.com>.
Yep, I know what you mean. I didn't really talk about this (yet) in
the book and likely should spend a page on it.

One solution is to punt on the problem, as Ted says: until you get
enough data or the user has a real presence, don't recommend.

At the other end of the spectrum, you can attempt to track this
anonymous user and give him/her a user ID, put it in the DataModel,
update recommendations constantly. This can get expensive to manage
efficiently if this is a frequent occurrence.

I can offer you a mildly hacky but fairly useful middle-ground:
PlusAnonymousUserDataModel. It decorates/wraps your DataModel and lets
you temporarily set preferences for one anonymous new user. (You need
to think of thread-safety potentially -- you can only do this for one
user at a time.)

This user temporarily acts like part of the DataModel without the
overhead of updating your real DataModel. You probably wouldn't want
to trigger refresh() of anything after setting these temporary values
since they're transient and shouldn't really affect your other
computations, though they could if you liked.

Really it's a fast way to stick in the data temporarily enough for
algorithms to seamlessly succeed in recommending. Let me know your
experience with that?

On Mon, Apr 19, 2010 at 10:07 PM, Joe Spears <js...@indieplaya.com> wrote:
> I just bought the MEAP Mahout in action book and think it is awesome. It is
> very helpful to see the simple examples and the plain English.
>
> I am having trouble with one use case in particular... making a
> recommendation for either an anonymous user or for a user that has never
> performed any action at all.... (e.g. the first time the user logs in after
> signing up for an account). Even in the Manning book, the documented
> workaround is to cluster the users... but even then (in the case of an
> anonymous user or before the very first interaction) there is no way to
> cluster a user successfully.
>
> In what ways do other people solve this initial discovery issue inside of
> Mahout? (i.e. outside of using a "stats table" that contains the most
> popular items and using that to produce results on behalf of the
> recommender).
>
> Thanks,
>
> Joe
>