Hello, my name is Christian Rudder, and I was one of the founders of OkCupid. It's now one of the biggest dating sites in the United States. Like most everyone at the site, I was a math major, As you may expect, we're known for the analytic approach we take to love. We call it our matching algorithm. Basically, OkCupid's matching algorithm helps us decide whether two people should go on a date. We built our entire business around it. Now, algorithm is a fancy word, and people like to drop it like it's this big thing. But really, an algorithm is just a systematic, step-by-step way to solve a problem. It doesn't have to be fancy at all. Here in this lesson, I'm going to explain how we arrived at our particular algorithm, so you can see how it's done. Now, why are algorithms even important? Why does this lesson even exist? Well, notice one very significant phrase I used above: they are a step-by-step way to solve a problem, and as you probably know, computers excel at step-by-step processes. A computer without an algorithm is basically an expensive paperweight. And since computers are such a pervasive part of everyday life, algorithms are everywhere. The math behind OkCupid's matching algorithm is surprisingly simple. It's just some addition, multiplication, a little bit of square roots. The tricky part in designing it was figuring out how to take something mysterious, human attraction, and break it into components that a computer can work with. The first thing we needed to match people up was data, something for the algorithm to work with. The best way to get data quickly from people is to just ask for it. So we decided that OkCupid should ask users questions, stuff like, "Do you want to have kids one day?" "How often do you brush your teeth?" "Do you like scary movies?" And big stuff like, "Do you believe in God?" Now, a lot of the questions are good for matching like with like, that is, when both people answer the same way. For example, two people who are both into scary movies are probably a better match than one person who is and one who isn't. But what about a question like, "Do you like to be the center of attention?" If both people in a relationship are saying yes to this, they're going to have massive problems. We realized this early on, and so we decided we needed a bit more data from each question. We had to ask people to specify not only their own answer, but the answer they wanted from someone else. That worked really well. But we needed one more dimension. Some questions tell you more about a person than others. For example, a question about politics, something like, "Which is worse: book burning or flag burning?" might reveal more about someone than their taste in movies. And it doesn't make sense to weigh all things equally, so we added one final data point. For everything that OkCupid asks you, you have a chance to tell us the role it plays in your life. And this ranges from irrelevant to mandatory. So now, for every question, we have three things for our algorithm: first, your answer; second, how you want someone else -- your potential match -- to answer; and third, how important the question is to you at all. With all this information, OkCupid can figure out how well two people will get along. The algorithm crunches the numbers and gives us a result. As a practical example, let's look at how we'd match you with another person. Let's call him "B." Your match percentage with B is based on questions you've both answered. Let's call that set of common questions "s." As a very simple example, we use a small set "s" with just two questions in common, and compute a match from that. Here are our two example questions. The first one, let's say, is, "How messy are you?" And the answer possibilities are: very messy, average and very organized. And let's say you answered "very organized," and you'd like someone else to answer "very organized," and the question is very important to you. Basically, you're a neat freak. You're neat, you want someone else to be neat, and that's it. And let's say B is a little bit different. He answered "very organized" for himself, but "average" is OK with him as an answer from someone else, and the question is only a little important to him. Let's look at the second question, from our previous example: "Do you like to be the center of attention?" The answers are "yes" and "no." You've answered "no," you want someone else to answer "no," and the question is only a little important to you. Now B, he's answered "yes." He wants someone else to answer "no," because he wants the spotlight on him, and the question is somewhat important to him. So, let's try to compute all of this. Our first step is, since we use computers to do this, we need to assign numerical values to ideas like "somewhat important" and "very important," because computers need everything in numbers. We at OkCupid decided on the following scale: "Irrelevant" is worth 0. "A little important" is worth 1. "Somewhat important" is worth 10. "Very important" is 50. And "absolutely mandatory" is 250. Next, the algorithm makes two simple calculations. The first is: How much did B's answers satisfy you? That is, how many possible points did B score on your scale? Well, you indicated that B's answer to the first question, about messiness, was very important to you. It's worth 50 points and B got that right. The second question is worth only 1, because you said it was only a little important. B got that wrong, so B's answers were 50 out of 51 possible points. That's 98% satisfactory. Pretty good. The second question the algorithm looks at is: How much did you satisfy B? Well, B placed 1 point on your answer to the messiness question and 10 on your answer to the second. Of those 11, that's 1 plus 10, you earned 10 -- you guys satisfied each other on the second question. So your answers were 10 out of 11 equals 91 percent satisfactory to B. That's not bad. The final step is to take these two match percentages and get one number for the both of you. To do this, the algorithm multiplies your scores, then takes the nth root, where "n" is the number of questions. Because s, which is the number of questions in this sample, is only 2, we have: match percentage equals the square root of 98 percent times 91 percent. That equals 94 percent. That 94 percent is your match percentage with B. It's a mathematical expression of how happy you'd be with each other, based on what we know. Now, why does the algorithm multiply, as opposed to, say, average the two match scores together, and do the square-root business? In general, this formula is called the geometric mean. It's a great way to combine values that have wide ranges and represent very different properties. In other words, it's perfect for romantic matching. You've got wide ranges and you've got tons of different data points, like I said, about movies, politics, religion -- everything. Intuitively, too, this makes sense. Two people satisfying each other 50 percent should be a better match than two others who satisfy 0 and 100, because affection needs to be mutual. After adding a little correction for margin of error, in the case where we have a small number of questions, like we do in this example, we're good to go. Any time OkCupid matches two people, it goes through the steps we just outlined. First it collects data about your answers, then it compares your choices and preferences to other people's in simple, mathematical ways. This, the ability to take real-world phenomena and make them something a microchip can understand, is, I think, the most important skill anyone can have these days. Like you use sentences to tell a story to a person, you use algorithms to tell a story to a computer. If you learn the language, you can go out and tell your stories. I hope this will help you do that.
Sveiki! Mani sauc Kristians Raders, un es biju viens no OkCupid dibinātājiem. Tagad tas ir viens no lielākajiem iepazīšanās portāliem ASV. Kā gandrīz visiem portālā man ir maģistra grāds matemātikā, un, kā noprotams, mēs esam pazīstami ar savu analītisko pieeju mīlestībai. Mēs to saucam par saderības algoritmu. Būtībā OkCupid saderības algoritms palīdz izlemt, vai diviem cilvēkiem vajadzētu satikties. Uz to ir balstīts viss mūsu bizness. Algoritms ir sarežģīts vārds, un cilvēki domā, ka tas ir kaut kas liels, bet patiesībā algoritms ir tikai sistemātiska un pieeja problēmas risināšanai soli pa solim. Tam nepavisam nav jābūt sarežģītam. Šajā lekcijā es paskaidrošu, kā mēs nonācām līdz šim algoritmam, lai jūs redzētu, kā tas notiek. Kāpēc algoritmi vispār ir svarīgi? Kamdēļ vispār šī lekcija? Ievērojiet kādu ļoti nozīmīgu frāzi, kuru izmantoju iepriekš — algoritmi ir veids, kā risināt problēmu soli pa solim, un, kā jūs jau, iespējams, zināt, datori secīgos procesos ir izcili. Dators bez algoritma būtībā ir dārga papīru prese. Tā kā datori ir neatņemama ikdienas sastāvdaļa, algoritmi ir visur. OkCupid saderības algoritma matemātika ir pārsteidzoši vienkārša. Tur ir tikai saskaitīšana, reizināšana un dažas kvadrātsaknes. Piņķerīgā daļa tā izveidē bija izdomāt, kā kaut ko tik noslēpumainu kā pievilcību sadalīt tādās sastāvdaļās, ar kurām varētu strādāt dators. Pirmkārt, saderības noskaidrošanai mums bija vajadzīgi dati, kaut kas, ar ko algoritms varētu strādāt. Labākais veids, kā šos datus ātri iegūt no cilvēkiem, ir vienkārši pajautāt. Tā mēs izlēmām, ka OkCupid būtu jāuzdod lietotājiem jautājumi, piemēram: „Vai jūs kādu dienu vēlētos bērnus?” „Cik bieži jūs tīrāt zobus?” „Vai jums patīk šausmu filmas?” un lielās lietas, piemēram: „Vai jūs ticat Dievam?” Daudzi jautājumi ir piemēroti, lai atrastu līdzīgos, proti, kad abi cilvēki atbild vienādi. Piemēram, divi cilvēki, kuriem patīk šausmu filmas, droši vien būs labāks pāris, nekā ja vienam tās patiks, bet otram ne. Bet kā ir, piemēram, ar jautājumu: „Vai jums patīk atrasties uzmanības centrā?” Ja abi cilvēki atbild uz šo jautājumu ar jā, viņiem būs lielas problēmas. Mēs to ātri vien sapratām, tādēļ izlēmām, ka vajag mazliet vairāk informācijas par katru jautājumu. Mums vajadzēja noskaidrot ne tikai paša cilvēka atbildes, bet arī to, kādas atbildes viņi sagaida no otra. Tas strādāja ļoti labi, tomēr mums vajadzēja vēl vienu dimensiju. Daži jautājumi par cilvēku pasaka vairāk nekā citi. Piemēram, jautājums par politiku: „Kas ir sliktāk — grāmatu vai karoga dedzināšana?” var atklāt par kādu vairāk nekā viņa filmu gaume. Nebūtu pareizi uzskatīt visas lietas par līdzvērtīgām, tāpēc mēs pievienojām vēl vienu elementu. Par ikvienu OkCupid jautājumu jūs varat mums pateikt, cik liela loma tam ir jūsu dzīvē — sākot no nenozīmīgas līdz obligātai. Tā nu tagad katram jautājumam mūsu algoritmā ir trīs lietas: pirmkārt, jūsu atbilde; otrkārt, kā jūs vēlētos, lai otrs cilvēks, jūsu potenciālais partneris, atbild; un treškārt, cik svarīgs jums ir šis jautājums. Izmantojot šo informāciju, OkCupid var noteikt, cik labi divi cilvēki sapratīsies. Algoritms veic aprēķinu, un mēs iegūstam rezultātu. Praktisks piemērs. Paskatīsimies, kā mēs noskaidrotu jūsu saderību ar kādu cilvēku, sauksim viņu par „B”. Jūsu saderības procents ar B ir balstīts uz jautājumiem, uz kuriem jūs abi atbildējāt. Sauksim šo vienkāršo jautājumu kopu par „s”. Šajā ļoti vienkāršajā piemērā mēs izmantojam nelielu kopu „s” ar tikai diviem kopīgiem jautājumiem un, balstoties uz tiem, aprēķinām saderību. Lūk, mūsu divi jautājumi. Pirmais varētu būt: „Cik nekārtīgs jūs esat?” un iespējamie atbilžu varianti ir ļoti nekārtīgs, vidēji nekārtīgs, un ļoti kārtīgs. Pieņemsim, ka jūs atbildējāt „ļoti kārtīgs” un vēlaties, lai arī otrs atbild „ļoti kārtīgs”, un šis jautājums jums ir ļoti svarīgs. Jūs būtībā esat apsēsts ar kārtību. Jūs esat kārtīgs, un vēlaties, lai arī otrs cilvēks ir kārtīgs, un viss. Pieņemsim, ka B ir mazliet citādāks. Viņš ir atbildējis, ka pats ir ļoti kārtīgs, bet viņam no otra cilvēka der arī atbilde „vidēji kārtīgs”, un viņam šis jautājums ir mazsvarīgs. Apskatīsim otro jautājumu, tas ir viens no iepriekš minētajiem: „Vai jums patīk atrasties uzmanības centrā?” Atbildes ir vienkārši „jā” un „nē”. Jūs atbildējāt „nē”, un vēlaties, lai arī otrs atbildētu „nē”, un jautājums jums ir mazsvarīgs. B ir atbildējis „jā”, un vēlas, lai otrs atbildētu „nē”, jo vēlas, lai uzmanība būtu pievērsta viņam, un šis jautājums viņam ir samērā svarīgs. Tad nu mēģināsim to visu izskaitļot. Pirmkārt, tā kā šim darbam izmantojam datorus, mums jāpiešķir skaitliskas vērtības tādām idejām kā „samērā svarīgs” un „ļoti svarīgs”, jo datoriem viss ir vajadzīgs skaitliskā formātā. Mēs, OkCupid, vienojāmies par šādām vērtībām: nesvarīgs ir 0, mazsvarīgs ir 1, samērā svarīgs ir 10, ļoti svarīgs ir 50, un obligāts ir 250. Tālāk algoritms veic divus vienkāršus aprēķinus. Pirmkārt, cik atbilstošas bija B atbildes, proti, cik daudz no iespējamajiem punktiem B savāca. Jūs norādījāt, ka B atbilde uz pirmo jautājumu par kārtīgumu jums ir ļoti svarīga. Tās vērtība ir 50 punkti, un B uz to atbildēja pareizi. Otrs jautājums ir tikai vienu punktu vērts, jo tas jums ir mazsvarīgs. B atbilde nebija pareizā. Tātad B ir ieguvis 50 no 51 iespējamā punkta. Tie ir 98%. Tas ir samērā labi. Otrs algoritma jautājums apskata, cik lielā mērā jūsu atbildes bija pa prātam B. B novērtēja ar 1 punktu atbildi uz jautājumu par kārtīgumu un ar 10 — atbildi uz otro jautājumu. No šiem 11, kas ir 1 plus 10, jūs ieguvāt 10. Jūsu abu atbildes uz otro jautājumu bija saderīgas. Tātad jūsu atbildes bija 10 no 11, kas ar B ir 91% atbilstība. Tas nav slikti. Visbeidzot no šīm divām procentuālajām vērtībām ir jāiegūst viens skaitlis jums abiem. Lai to izdarītu, algoritms sareizina jūsu punktus un izvelk n-tās pakāpes sakni, kur „n” atbilst jautājumu skaitam. Tā kā „s”, kas ir jautājumu skaits, šajā piemērā ir tikai 2, mūsu saderības procents ir vienāds ar kvadrātsakni no 98% reiz 91%. Tas ir vienāds ar 94%. Tas nozīmē, ka jūsu saderība ar B ir 94%. Šī matemātiskā izteiksme parāda, cik apmierināti jūs būtu viens ar otru, balstoties uz to, ko zinām. Kādēļ algoritms reizina, nevis, piemēram, aprēķina vidējo no abu vērtību summas, un kāpēc jāvelk kvadrātsakne? Šo formulu sauc par ģeometrisko vidējo, kas ir lielisks veids, kā kombinēt vērtības, kam ir liels diapazons un kas ataino ļoti dažādas īpašības. Tātad tas ir ideāli piemērots romantiskās saderības noteikšanai. Mums ir plašs diapazons, un kaudzēm dažādas informācijas, kā jau minēju, par filmām, politiku, reliģiju, par visu. Arī intuitīvi tas šķiet loģiski. Diviem cilvēkiem, kuru saderība vienam ar otru ir 50%, vajadzētu būt labākam pārim nekā diviem citiem, kuru saderība ir attiecīgi 0 un 100, jo pievilcībai jābūt abpusējai. Pievienojot nelielu korekciju kļūdas robežai tiem gadījumiem, kad jautājumu skaits ir pavisam neliels kā šajā piemērā, mēs esam gatavi startam. Ikreiz, aprēķinot divu cilvēku saderību, OkCupid iziet cauri nupat aprakstītajam. Vispirms tas savāc datus par jūsu atbildēm, tad salīdzina jūsu izvēles un vēlmes ar citiem cilvēkiem vienkāršā un matemātiskā veidā. Šī spēja reālās pasaules parādību pārveidot tā, lai mikroshēma to spētu saprast, ir, manuprāt, vissvarīgākā spēja, kāda cilvēkam mūsdienās var būt. Tāpat kā jūs izmantojat teikumus, lai kaut ko pastāstītu cilvēkam, mēs izmantojam algoritmus, lai pastāstītu lietas datoram. Iemācoties valodu, jūs varat doties pasaulē un stāstīt savus stāstus. Es ceru, ka šis palīdzēs jums to izdarīt.