New Site Launch Huge Success

I have been working on a new design for my cocktail recipes site for about 2 months now. The company I selected to do the design were 2 pixel solutions (based in India) who I found through elance. You can see the results of the redesign below.

I have been really pleased with working with the 2 pixel team. They were really good in making the changes I asked for and simplified the design extremely well. I would highly recommend anyone using elance to ask for an outline mock up of the design a company is thinking of creating ahead of time for your site. I certainly benefitted from that. 

Having launched the site yesterday I took a look at the very early results and am over the moon. All the visitor level metrics are looking great. Visitors are spending nearly 25% longer on the site and viewing 30-40% more pages on each visit. I also found a number of features that were broken as I recoded the site (and honestly broke some more myself) so I have some fixing to do but bottom line the new site ROCKS :) and my users (most importantly) seem to love it.

For the rest of today I am working on getting my facebook application up and running again.

Code Performance is Important

The puzzles that a fair few geeky companies post on their jobs pages to try and vet/encourage great coders to complete them and apply for jobs are quite cool (I definitely don't fit in the great coder bucket). Recently I noticed a fair few of them are focussed on code performance and so thought I would share my experience of code performance harming my site.

The graph above is the exit rate for users visiting my display cocktail pages on my cocktail site (according to Google analytics which has pretty graphics but some data issues) against time. The initial decrease in exit rate is awesome and primarily due to implementing the cocktail recommendation engine. Suddenly in mid July there is a massive jump in exits, this coincided with a process I was running for my facebook app really screwing up and slowing down every query run on my database :(. I shut that query down (although didn't realize what was happening for a month) and (for the moment) have given up on my facebook app to concentrate on the main site. After shutting down the process performance and exit rates improved instantly.

I don't monitor the performance of the scripts on my site anywhere near enough. Last weekend I built tracking to monitor the ranking of cocktails on my site weekly, pull out fast moving cocktails and so on. I have started logging keyword searches on my site too as of last week. This weekend a key focus for me is producing a performance dashboard summarized by hour of day and day of year. I am going to start monitoring the efficiency of all changes I make and see where I need to make improvements.

Cocktailmaking.co.uk has grown 3x since last year. The site also gets 25% of it's visits in December with 10% of those on New Years' Eve. I need to make the site much much more efficient before that date comes or my servers will be a smoking mess this year and I'll capture none of the revenue that I should.

Code efficiency is really really important.

Cocktail Recommendation: Part 4 - the results

Wow did it work or what! The cocktail recommendation engine I produced earlier this year has been a fabulous success. I set up an AB test of the cocktail recommendation by randomly assigning my visitors to either see the cocktail recommendation engine or not and the main target was to reduce the bounce rates of visitors to my cocktail recipe pages (both buckets contain c. 1million page views).

The above graph shows you the overall impact of the test across all my cocktails with 100days of data. This impact is diluted because of the volume of cocktails for which I don't have enough data to produce cocktail recommendations so below is a list broken out by cocktail id (I have removed the names since work people see this blog and some are naughty). The cocktails in the list below are essentially the cocktails found as the first 10 here (you are warned... that page contains rude words) under the tab "Graph of cocktail recipes in order".

On average for the top 10 cocktails the recommendation engine reduced the bounce rate by 16% with some cases (esp. slippery nipple) having an impact as high as a 31% reduction in bounce rate for the page.

Facebook Application Customer Support

"Err whoops" is probably the best way to start this off. My websites have essentially no customer support, it is not a fact I am proud of but it is true. I don't make enough money to quit my day job and work full time on the site, let alone employ a CS team. That being said I do get about one enquiry a week which generally I reply to and I have a few processes built to help me run through all the cocktails added and vet them. I kinda expected the same level of support would be needed for my facebook application. Boy was I wrong:

I am daily receiving about 10-20 enquiries/feedback points/general CS issues for my app (and this is with only 1week of signed up users - 7000). This is great and I want it to continue. It means my app will be better and better as I implement what is asked for enough (and do so thoughtfully and well). Heck I use my own app a lot so it'd be nice to make it better. I do however have a day job and keeping on top of this as well as a HUGELY busy week at work leading up to eBay Dev Con and eBay Live 07 is pretty tough. Those of you looking for application improvements trust me they are coming but bear with me while I get over the hump of the next week!

In the Facebook Directory

So I have been working on my facebook cocktail application for a little over a week now having started it on the memorial day weekend. It allows you to do everything my cocktail site does and a little bit more including recommending a cocktail to a friend and seeing the most recently popular cocktails and the top 12 users yesterday. I actually have a bunch more ideas of what it could do like little graphs of the popularity of the cocktail over time and so on.

What is exciting is that in 3hrs I have added 300users to the application, now obviously rates won't stay that high but realistically most of the east cost wasn't browsing facebook when the app was approved and neither was the UK. It will be really interesting to see how things go over the next 24hrs.

The best news is I have log files tracking everything going on so I will be able to note down and describe what the growth of a facebook application looks like!

More posts to come down the line but I want to leave you with a thought. For my cocktail recommendations engine I now have a track... at a user level... of every cocktail viewed and rated, and at what level (pretty much tied to demographic too if I can get my ass in gear and pull that data). This recommendation engine can get much, much smarter :D

Free Gifts - Another Viral Facebook App

I am really enjoying the phenomenon of Facebook apps and totally loving the way they have exploded from zero to infinity and beyond so quickly! The arguement that facebook just added a quarter of a billion dollars of RnD to their platform is looking more and more realistic to me.

The apps I like the best are the ones that have exploded without the help of the directory and hardly surprisingly these have exploded because of interpersonal activity. The latest great app I wanted to show case is Free Gifts. The Facebook Gifts product is really cool and not too dissimilar to the ze frank concept of gimme some candy. The 2 mistakes I feel facebook made was making all gifts the same value (since surely if there were expensive and cheap gifts you'd give your girl/boyfriend a more expensive one) and not expiring the gifts after a given time (i.e. flowers might last a week, a teddy for a month etc...). Differentiation is key in many things.

 

Well the app above is giving away gifts for free and when you send a gift to someone they have to add the app to display it... how perfectly viral I really love it!

The image above shows the current user base and all without the use of the facebook directory, pretty incredible stuff, keep it up Zachary. I am excited to see how far this one goes!

The Cocktail Recommendation Engine is Live

Finally with a month of data under my belt I launched an AB test on the cocktail recommendation engine on Friday. The cocktail recipe the test group will see is shown below. Early indications are great with initiall navigation for visitors entering the site on these pages clearly influenced by the cocktail relationships shown. I will give more details of how to produce an accurate AB test via Google Analytics in another post (cos I am still figuring out a few of the kinks).

Cocktail Recommentation Engine: Part 3 - The First Results

The following table is a subset of the output results from the cocktail recommendation engine (be warned some rude words in some of the cocktail names). I have tried to drill the list down to just the best matches so bear in mind there are probably 30% more matches thrown out which appear to have statistical significance but I can find no reason for the relationship (beyond sometimes they are next to each other in the large cocktail A-Z list).

Cocktail One - the cocktail someone is on, Cocktail Two - the cocktail I recommend, Probability - the probability that if someone is on cocktail one and visits another cocktail cocktail two will be that cocktail. There had to be at least 10 relationships in total recorded between cocktail one and another cocktail in my db for a cocktail to make this table.

I am hoping that as I get more data this table will grow more accurate and I will have fewer "wtf?" moments looking at the list. I also want to add two more probabilities to the calculation:

  1. Probability if they visit 1 they will like 2
  2. Probability if I display 2 on 1 they will click on it

Anyway for now enjoy looking at the cocktail relationships and expect more data soon.

Cocktail One Cocktail two Prob.
The Refresher Tom Collins 0.76
throat cramp Toxic Waste 0.67
Raunchy island sex Red Headed Slut 0.5
three wise men Three Wisemen 0.5
Tomate Momisette 0.43
Wicked one Screwdriver 0.35
Amaretto Rose Amaretto Dream 0.33
Purple Haze Radiation 0.33
Strawberry shortcake StrawBerry Shortcake 0.33
Toxic Waste Titanic Sinkers 0.32
martini spiller Niks Shot of Aussie 0.32
The Orville three wise men 0.31
3 Headed Parrot A-Bomb 0.3
BABY GUINNESS Baby Guinness 0.3
Flaming Shooter Flatliner 0.29
tequila slammer!!!!!!!!!!! TEQUILA SUICIDE ! ! ! ! ! ! ! ! ! ! ! 0.28
see you at the hospital Tequila Sunrise 0.28
Absolut Nut Absolut Quaalude 0.27
Sex on the beach Sex On The Beach 0.27
suicide surfer on acid 0.26
Tom Collins Orange Fizz 0.24
Kick in the Willy martini spiller 0.24
Slippery Dick Slippery Nipple 0.24
Multiple Orgasm Multiple Screaming Orgasm 0.24
Absolut Stress absolutly mistafying 0.22
death cock sucking cowboy 0.22
A strawberry with milk A-Bomb 0.22
Cheeky Vimto Layered cheeky Vimto 0.21
Tequila Sunrise throat cramp 0.21
Sex On The Beach Sex on the beach 0.19
Screwdriver Bay Breeze 0.19
Arsonist awamawama ding dong 0.19
Absinthe Drinker Absinthe Minded 0.19
nipple twister Nymphomaniac 0.19
Jolly Green Giant Flaming Lamborghini 0.17
Flatliner Flaming Lamborghini 0.17
Zipper Zombie 0.17
Absolut Nut Level 28 0.17
Absinthe Drinker Royal Absinthe Fizz 0.17
Long island ice tea Long Island Iced tea 0.16
Slippery Dick cock sucking cowboy 0.14
blowjob Blow Job 0.14
Blow Job Clit Licking Cowgirl 0.14
Wet Pussy Wet Dream 0.13
Pina Colada Pina Colada (Virgin) 0.13
Screaming Orgasm Sex on the beach 0.13
Orgasm Cocktail Screaming Orgasm 0.13
B52 Blow Job 0.13
Slippery Nipple cock sucking cowboy 0.13
Sex on the beach (shooter) Sex on the beach 0.13
Black Russian Black Russian - proper 0.13
Brain Damage brain haemorage 0.12
Alabama Slamma Alabama Slammer 0.12
cock sucking cowboy Clit Licking Cowgirl 0.12
Mai Tai Mojito 0.12
Sex on the beach Slippery Nipple 0.12
Pornstar Purple rain 0.12
Pornstar Quick Fuck 0.12
Baby Guinness Bad Babysitter 0.11
Arsonist red , white & Blue 0.11
Baby Guinness A-Bomb 0.11
Baby Guinness Billy Badass 0.11
Screwdriver Wicked one 0.11
Angel's Kiss B52 0.1
Blow Job blowjob 0.1
Clit Licking Cowgirl A-Bomb 0.1
Clit Licking Cowgirl cock sucking cowboy 0.1
Flaming Lamborghini Deep Throat 0.09
A-Bomb Abbey cocktail 0.09
Sex On The Beach Sex on the beach (shooter) 0.09
Blue Lagoon blue lagoon special 0.08
Slippery Nipple Sex on the beach 0.08
Clit Licking Cowgirl Orgasm Cocktail 0.08
Clit Licking Cowgirl Deep Throat 0.08
Screaming Orgasm Sex On The Beach 0.08
B52 Baby Guinness 0.08
Screaming Orgasm Blow Job 0.07
Blow Job Blue Lagoon 0.07

Huge steaming piles of data (Project Cocktail Part 2)

Today has been quite challenging in project cocktail. The main issue is working out how much information to store and what granularity to summarize it on. Data is pouring in rapidly, I have defined over 5000 directional cocktail relationships and probably 10% of my cocktails within one day have at least one relationship I would define as relevant (I shall work on statistical significance fairly heavily later on).

The issue is that every row in my database is currently taking up 46bytes and I am adding c. 7.5k rows a day. The index on the database is then adding another 25% to this and there is little I can do here since I am required to create a primary key. Therefore daily I am creating 0.4MB of data in unsummarized form. The machine I am using has 100MB of storage and so I could store up to 250 days of raw (unsummarized) data or 2.17million rows (handy cos right now my cocktail DB could theoretically create 2.17million different directional relationships with different likelihood factors).

In the short term I am going to do nothing more than summarize on a month basis and depreciate the value of prior months over time but in the long term I want to know if recommendations should differ significantly by various user related variables and hence I want to store those variables so that in the future I can have a significant dataset to query and work out the impact of those variables. My target is to make this engine slightly scary at predicting what cocktail you might want to see next and to hit the scary threshold will take a little more than the #1 most likely relationship to deliver. So all things considered I have 0.5TB of data storage going spare right now in 5 mySQL databases... let's go for the big data :) and see what comes out!!!

Tomorrow I will be helping move 100 rowing boats so that my new boatclub can undergo an awesome renovation over the next 3wks which means I will have to take a break (and let the data gather into an even higher volume). Hopefully Sunday I will be able to do some analysis and maybe even build a mock up that shows what the output could start to look like. For now goodnight!

Recommendation Engine: Project Cocktail Part 1

Ok so how does one build a recommendation engine?

For the last year I have been tweaking improving and revising my cocktail recipes website with the prime goal of driving more traffic to the site. I have certainly acheived some of that with >1500 visitors daily on most days at the moment (still not huge but really massive growth). What is noticeable though compared to my paper airplanes site is a distinct lack of loyalty in my user base. With paperairplanes.co.uk ~32% of the visits daily are from returning users but with cocktailmaking.co.uk only ~9% are.

I need to make the site better and so my first attempt is to produce a cocktail recommendation engine. Phase one of the project just released to the site and I wanted to chat about that a little bit here.

I am logging every chain of two cocktails viewed by a visitor to my site within 2hrs. My thinking is that time spent and number of clicks browsing both degrade the correlation between cocktails in a user's browse path and so two cocktails viewed back to back in a short time period are likely to be very closely related. If I observe this interaction over millions of such pairs (data I can gather in just a few months) the most correlated cocktail combos should stand out from the mix at least for the top 10% of cocktails viewed on my site. That is my thinking and I will start to share the results on here as the data gathering proceeds.

The wonders of having a website with enough traffic to make analysis interesting :)

My Photo
Blog powered by TypePad

my flickr tag cloud