Monday, March 23, 2009

Oops...

That's what I get for being lazy with writing. I was beaten to the punch by this guy: http://scobleizer.com/2009/03/21/why-facebook-has-never-listened-and-why-it-definitely-wont-start-now/


And I'm sure by many others...Oh well :)

On Optimization...application

This is Part Two of my optimization posts: the application.


A lot of people have been complaining about the Facebook redesign. In fact, there are so many complaints coming in (one "study" claims 90%, but the group was self-selected, so the numbers are useless) that some internet folk have stated their astonishment that Facebook would do such a radical re-design without even considering their users' tastes through A/B testing (like Amazon uses).

I must say, I find this chatter quite silly. Admittedly, I have no idea what's going on in Facebook HQ, but I do know that they make an amazing product*, and I'm confident that they know exactly what they're doing, whether they think that directly pleases the users or not. Wait, what?

*(This asterisk style comes from JoePo. What can I say? He's a genius. I think I'll be using it, because it makes my sentences less confusing- I can expound on a topic later, but not too-far-end-of-the-page later.) I don't spend a lot of time on Facebook, but every time I go exploring around the site, I find another feature implemented really, really well. Those guys are good.


There, I said it. Doing what the users want does not translate to ultimate success. To connect this to Optimization, sites that do exactly what the users want right this minute are finding the local maximum of their site's success. They look directly to the right, and they see the graph peaks. They look left, and the site hits a valley. So they go right, and they're at the highest point as far as the eye can see, and everyone is happy. But...they're not at the global max, and they are thus not as successful as they could be.

Sites like Facebook determine what is best for the site, not solely based on user polling, and they implement it. Sure, they take back some mistakes (certain News Feed and privacy issues come to mind) quickly based on user reaction, but the overall direction of the site stays the same. Veterans of Facebook will tell you, this is hardly the first time that "everyone" using Facebook hated the redesign, and yet, the site continues to grow.

The site continues to grow because Facebook is seeking the global maximum of social networking sites. Through opening the site to the general public (the jury's still out on that one, in my opinion), and through emphasis on presenting fresh content every visit with the News Feed (this is a huge win for them), Facebook is going where they feel will lead to the most success possible.

Of course, this does not always work out. Like Apple, if Facebook's strategy of defining boldly what the consumer gets is to work, the theory behind their moves must be sound. So far, it's working out pretty well, but that doesn't mean it always will.

But imagine this: if, 5 years ago, MySpace polled their users endlessly about what features they wanted, and implemented everything they wanted, do you think the site would've ended up like Facebook (in the end, a much more successful site)? No way. MySpace would've found their local maximum (they probably did that a while ago...), and continued to serve their users the way they thought best. Meanwhile, getting back to the math post, just beyond their detail level, an enticing, new, global maximum was lurking, and they never achieved it.


In short, I think Facebook really does know what they're doing. I'm still not 100% convinced on their money-making schemes (I don't think advertising is working as well as they thought), but I think that, in the end, this new design will end up driving more traffic (and thus, more profit) to them. Just like the other re-designs, there will be lots of critiscm, followed by more and more people addicted to Facebook ;).

On Optimization...

This is part one of two on mathematical optimization. Part two will cover an interesting application of this stuff. You may want to skip to part two ;)

I'm in a math class called Optimization this semester. Essentially, we study what methods the computer (in our case, Mathematica) uses to solve optimization problems.

An optimization problem can be as simple as deciding which gas station to go to, with variables of distance and price, or as complex as the math behind Obama's economic policy. At first glance, these problems seem very simple to solve, and indeed, for problems like the gas station choice, they can be solved with naive methods. As always, though, this math topic is more complicated than it seems.

Imagine if you were a particularly mathematically inclined high school senior deciding which college to go to. After your initial college visits, you've taken detailed notes on each college, ranging from the food services (Bowdoin is consistently in the top 2 nationwide) and dorm life to grad school acceptance rates and student:faculty ratio. Further imagine that all of these factors (some quite subjective) can be assigned numerical values. Then to decide which college is best for you, you write an optimization problem that assigns weights (modeled by constraints such as food >= 8.0) to each variable, according to your personal taste.

By the time you're done, there may be 10, 15, 20 variables! And to think, this problem is downright tame compared to most optimization problems (which can have thousands of variables!). While a normal high school student surely runs a version of this very same optimization problem in their heads while choosing a college, you will settle for nothing less than the exact correct college. But how? Can't we just play around with the variables until we get the right answer? Technically, yes, but this is not as easy as approximating distance and price of gas stations. With this sort of complex optimization problem, changing one variable may have an influence on the others, and before you know it, your head is aching from all the possible combinations of variables. (Mathematica to the rescue!!)

But seriously, Mathematica is a great tool for solving optimization problems, but how does it work? That, dear reader, is far too much detail for this already lengthy post. The point I'm getting at here is that some problems can't be solved by tinkering with variables one at a time, because once you have a complicated problem to solve, changing one variable can change the entire nature of the problem. In addition, with multiple variables, there are just too many things to tinker with. For a one variable problem, I could simply graph the function and find the low spot, right? Sure! The formal way to solve this (this is an important distinction from just "using the picture") is to find all the places where the derivative (and thus, slope) equals zero. If my minimizer isn't one of these points, then the slope at my minimizer has some value, like 1, which means I can continue along my function and find a lower point...thus, I didn't really find a minimizer.

For a two variable problem, I can still draw a graph, but I have to do it in 3D. For a three variable problem...uh oh. In fact, even two variable problems can be hard, if the function is ugly enough.

So, for the college optimization problem, we start to see why we needed to move away from simply following the graph to the low point in the example above. I can not draw a graph in 20 dimensions (hey, I'm not a visual arts major!), but even if I could, how exactly would I trace the function along and find the low point? This is a problem even in a 2 variable problem (represented as a 3D graph). I can poke around the graph, zoom in, and perhaps find a spot where the function is minimized locally. But how can I be sure that that is the global minimizer? I really can't, unless I check every part of the graph! Not only is this tedious, it's quite impossible- functions have infinite resolution by definition, so you can't just zoom in enough that the function stops changing. If the function is complex enough, there can be all sorts of crazy behavior lying just below your current detail level.

Thus, we need a symbolic way of solving this problem, akin to solving the derivative function in the one variable example. That way, no matter how crazy the function is, we don't have to go zooming in and panning around forever- we just get the answers. Unfortunately, the methods for higher order (meaning more variables) functions are not as easy.


If this post made very little sense or seems to have no connection to life, go ahead and read part two, where I will attempt to connect these topics to internet companies.