charliewolf / pynder

:fire: Python client for tinder api
Other
633 stars 145 forks source link

Is anyone getting any match JUST AFTER u.like() ? #87

Closed roperi closed 7 years ago

roperi commented 7 years ago

I normally get matches from the very first batch of recommends when I start swiping on my mobile. But since I started using Pynder I haven't got any match from the first batch of recommends (I get matches afterwards which is not the same).

Am I having just bad luck? In other words, is anyone getting any match JUST AFTER u.like()?j (i.e. True not False)

>>> users = session.nearby_users()
>>> user = users[0]
>>> user.like()
True

So far I am ONLY getting False values (i.e. not a match).

chasep255 commented 7 years ago

I am not. I am using this for a machine learning project. I have liked about 3000 profiles to generate training data and not a single match. When I did just a hundred on my phone I get two matches. I think there is something wrong. The super likes work because I did get a match from that.

roperi commented 7 years ago

Thanks. I also think there's something wrong. I have liked thousands of times during the past 10 days and I'm still getting True values. Whereas swiping with my phone I used to get matches 1-3 MATCHES A DAY just after swiping them. Then I'd get other 1 or two matches coming afterwards during a 24 hours period.

The thing about the superlike you mention is interesting. I haven't encountered that case.

roperi commented 7 years ago

@chasep255 I have an idea. There's a way to know who liked you before swiping them right from my phone. The trick is to set distance preference to less than 1 mile. Then all matches that show up that are away from more than 1 mile are users that liked you. If you swipe then right it's a match 100% of the times. I'm not sure if this works only with certain app versions. I'll check if those matches show up in recommend by users.like() and report back.

Cadene commented 7 years ago

@h-2-0 I am looking forward to hearing from you :P

@chasep255 Is your projet on Github ? I would like to do the same. I could contribute.

chasep255 commented 7 years ago

No it is just a messy project on my desktop right now. All I am doing is using a CNN in tensorflow to guess the probability of an image being in a profile that I liked. I can do about 65 percent accuracy right now. It works pretty well if you take the average score of every image in a profile. The issue is that I am not even that sure for most profiles so 65 percent really isnt that bad. If you want I can show you what I have. I also tried to make an RNN CNN combo which considers each image in the profile. It does not work as well.

Cadene commented 7 years ago

Nice! How many images/profiles for the trainset and testset ? Did you train a custom CNN from scratch or did you fine tune an existing architecture such as VGG16 ? Your dataset might be too small and complex to train a RNN CNN combo. I would like to make a UI for aggregating multiple tinder account and to rank the recommended profiles (using a CNN) in order to save time (and also for fun ^^). I would be pleased to see what you've got (email me :))

chasep255 commented 7 years ago

My email is chasepreuninger@gmail.com. Send me a message and I will get in contact with you later tonight. Right now I have downloaded about 16k profiles each containing usually between 1 to 6 images. I think I have about 80k total images. The downside to this approach is that some people might put an image of a dog in there profile and this would then become part of my training set. But like I said I am only trying to classify the prob of that image occurring in a profile I like or dislike so I would hope an image like that would float around 50%

roperi commented 7 years ago

Sorry. I haven't been able to experiment. But I noticed the first batch of recommended users showing on the phone aren't the same as the first batch shown by session.nearby users(). I strongly suspect among the ones shown on phone are the matches (eg. I have noticed two old matches keep showing up at the top of my stack - those women have liked me before perhaps in another account ;)

edit: I haven't been able to confirm if they are really matches though. I'm always out of likes by the time I want to check. Gotta stop the auto swiper

chasep255 commented 7 years ago

I can now confirm that it does work since I got a match. Guess I was just unlucky.

cjekel commented 7 years ago

I am curious to see if Tinder is penalizing those who access with Pynder. I've had similar concerns with those mentioned in this thread. I would like to hear someone with a bit more insight, please enlighten me on this subject. As far as I understand, this is totally possible. (I can think of a way to test for this, it just would be time consuming...)

@chasep255 @Cadene I came to Pynder to work on a very similar project, to see if I could use machine learning to predict whether or not a user would like the image. It could make for a fun and interesting conference presentation/paper. The random cats/dogs/cars make this interesting.. don't forget the dog snap chat filter... I think it's important to have these images part of the training set. They could be separate classification problems (isDog,isCat,isCar,doILike?).

chasep255 commented 7 years ago

I don't know if it is penalizing. Right now I have it hooked up to a web app which shows me all of the profile pictures at once. I think this may make me a little more picky about which profiles I like. As for the machine learning I am taking two approaches. First is the plain CNN where I ask it to classify the probability that a picture appears in a profile that I like. Since I am downloading the images in bulk (all of the profile pics become like or dislike data when I rate a user), this creates a lot of outliers in my dataset. Also maybe only half of the picture meed my "like" criteria. However like I said I want to classify the probability that a given photo appears in a profile I like so I think it would make sense to include them. Hopefully pictures of peoples dogs will be around 50% meaning the network could go either way. Also one thing that hurts are photos with multiple people where one would be a like and the other a dislike.

The more advanced approach I want to take is to feed the CNN into an RNN. This way it can rate entire profiles rather than individual images. Then it could learn to ignore pictures which don't have people in them.

roperi commented 7 years ago

@chasep255

I can now confirm that it does work since I got a match. Guess I was just unlucky

Sounds more like an exception to the rule to me. I'd even go a far to say the user swiped you right while or during the time you had a Pynder session open swiping away. Is there a way to validate/falsify this?

roperi commented 7 years ago

@cjekel, @chasep255, @Cadene

You might be interested in reading the How to get a match according to Tinder's sociologist Fastcompany article. Here's an excerpt:

A big project that was done about six months ago was one where I analyzed about 12,000 photos of users throughout the country—New York, Los Angeles, Atlanta—and I analyzed their photos to understand how the users presented themselves. There were 141 variables that were analyzed over the course of those photographs...

roperi commented 7 years ago

@charliewolf, @chasep255 et al

Few accounts, dozen of thousands of right swipes, and almost 1 thousand matches later I haven't caught a single 'u.like() == True' instance (I'm logging.info the results). Matches only show up after loading session.matches()

I believe it is impossible to get a True value from u.like() .

Thoughts?

cjekel commented 7 years ago

You'll never see 'user.like() == True' because when you are matched with someone, user.like() returns a list containing a bunch of stuff.

You'll get something like userLike=True, superLike=False, commonIntersts='' , commonFriends=0, etc...

roperi commented 7 years ago

@cjekel, @charliewolf

Thanks, cjekel. It all makes sense now. It seems like users.like() returns a boolean (perhaps when me and others started playing with Pynder we were getting False values) when in fact depends on the server response. So this seems a totally non-issue! I'm closing now.

roperi commented 7 years ago

Just adding to what @cjekel mentioned here's how an actual match response looks like when doing user.like(). Also try to guess who I matched with.

{u'common_like_count': 0, u'is_super_like': False, u'common_friend_count': 0, u'is_boost_match': False, u'messages': [{u'to': u'XXXXXXXXXXXXXXX', u'message': u"Don't miss a beat - http://tinde.rs/SpotifyUK", u'_id': u'XXXXXXXXXXXXXXXX, u'from': u'XXXXXXXXXXXXXXXXXXXXXXXXXXXX', u'created_date': u'2016-10-07T12:28:58.817Z'}], u'last_activity_date': u'2016-10-07T12:28:58.787Z', u'dead': False, u'message_count': 1, u'participants': [u'XXXXXXXXXXXXXXXXXX', u'XXXXXXXXXXXXXX'], u'closed': False, u'created_date': u'2016-10-07T12:28:58.787Z', u'following': True, u'following_moments': True, u'_id': u'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', u'pending': False}