Creating a recommender system for shoe sizing

(Sorry if I have mis-categorized or titled this question.)

Suppose you have shoe size data for a bunch of people across a variety of shoe brands. So, one person might have Nike = 11, Reebok = 10.5, Adidas = 11, Converse = 11.5, and so on. You might define a matrix $M_{ij}$ where $i$ represents the $i$-th individual and $j$ their size in the $j$-th brand.

Then suppose you have a person who knows their Nike size is, say, 9, and wants to know their most likely Adidas size (or maybe they know their size in multiple brands, but not Adidas). What is the best way to predict their Adidas size?

A simple method might be to look at the size difference of each person between Nike and Adidas ($M_{i,j=Nike} - M_{i,j=Adidas}$ for each $i$), and then to take the most common difference and add it to the person's Nike size to get their Adidas size. For example, if most people size up one half size when going from Nike to Adidas, the most likely Adidas size for this person would be 9.5.

But is there a more sophisticated method? For example, maybe there are people who are outliers and have really weird feet, and the relationship of their sizes among all brands does not fit well with most other people. Is there some natural way to weight the data of these people less than that of others, and would you want to do this?

I have a feeling that this is a common problem, for example anything online these days that makes a recommendation based on consumer data.

• It might be a multi-pronged approach depending on the sparsity of the data. If you have "enough" specific matches of people who wear Nike size 9 and Adidas size x, then you might use the average of the specific matches. Then, if there aren't enough, you use a general sizing rule like +0.5. – Jonathan Nov 13 '12 at 20:05

Depends what assumptions you're willing to make about the sizing of shoes. For instance, I think it's safe to assume the difference between a size 9 to 10 Redwings Iron Ranger is similar to the difference between a 10 and 11 Adidas Samba. If a 9 IR wears a 10 Samba, then we'd know a 10IR would wear an 11 Samba.

It also depends on whether you have information on multiple shoes within individuals in which case you'd get more information with your repeated measures. Assuming you didn't, you can simple take the grand average of sizes within each shoe group and compare the average difference between groups under the assumption people don't own shoes that don't fit.

If you did have multiple measurements, you can get a more precise recommendation by fitting a mixed effects model which will average over the individual effects and estimate a categorical individual difference between sizes in each shoe.

$$\mathbb{E}[ \mbox{Size} | \mbox{Brand}, \mbox{Individual}] = \beta_{0, i} + \beta_{1, b} * \mbox{Brand}$$

SPSS, R, SAS and statistical software can fit these, but not your plain vanilla Excel.

It's worth noting that shoes in general run both wide and long, so you might consider asking a more refined question about how to recommend someone buy a pair of shoes based on fits which are purported to run long/wide.