נביא שקר

הנבואה ניתנה לשוטים

קטגוריה: גרפים

ירושלים ותל-אביב בראי אייר-בי-אנד-בי

תקציר הפוסט: הורדתי מלא מידע על דירות להשכרה בתל-אביב וירושלים מאייר-בי-אנד-בי (להלן אבנ׳ב) ואני מציג אותו בדרכים שונות, כולל מציאת האיזורים המדורגים גבוה, מציאת האיזורים היקרים, וקלאסטרינג של הדירות לתתי-איזורים שונים לפי תיאור הדירות.

הקלאסטרינג הוא החלק המעניין ביותר בעיני.

הערה טכנית: אבנ׳ב לא מאפשרים גישה נוחה לכל הדירות בתל-אביב בבת-אחת. כמשתמש, צריך לסמן איזור שמעניין אותך ולבצע חתך גיאוגרפי. כתבתי סקריפט פיית׳ון שמחלק עיר לתתי-איזורים ומבצע תתי-חיפושים בתוך תתי-האיזורים. זה טיפה מעצבן, אבל לא נורא. סוף התהליך הוא כמה אלפי דירות בתל-אביב וירושלים, כולל מחיר ההשכרה, תיאור הדירה, דירוג הדירה, דירוג האיזור, תיאור המשכיר, מיקום הדירה, וכו׳.

מתחילים.

דירוג

קודם כל נייצר מפות על סמך דירוגי הדירות. הנה תל-אביב

Screen Shot 2017-10-29 at 9.44.24 PM

והנה ירושלים

Screen Shot 2017-10-29 at 10.18.28 PM.png

ירוק זה 5 כוכבים, צהוב זה 4.5, כתום זה 4, ואדום זה 3.5.

ezgif-1-83ca9ac1c4.gif

ezgif-1-d382a01ebc

אני לא יודע אם שני קוראי הבלוג רואים משהו במידע הזה, לי זה נראה כמו ערבוביה של ירוק וצהוב. יש קצת כיס אדום ולא מפתיע באיזור התחנה המרכזית ושוק הכרמל בתל-אביב, אבל זהו בערך.

וזה באמת בעיקר ירוק וצהוב. מסתבר שמבין הדירות המדורגות, 55% מדורגות כ-5 כוכבים, ו-35% מדורגות כ-4.5 כוכבים. כלומר, אין כאן סיגנל בכלל, אלא אם כן הסיגנל הוא לברוח כמו מאש מכל דבר שהוא פחות מ-4.5 כוכבים.

דירוג לפי תת-תכונה

אבנ׳ב מציע גם תתי-דירוגים מעבר לדירוג הכללי של הדירה. אפשר לדרג את הניקיון, את המיקום, את הדיוק, את הצ׳ק-אין, ואת התקשור עם בעל המקום.

הנה דירוג מיקום הדירות בתל-אביב:

Screen Shot 2017-10-29 at 10.29.19 PM

זה כבר קצת יותר מעניין. מי שרוצה לשחק בזום עם מפה יותר אינטראקטיבית מוזמן לעשות זאת כאן.

הנה דירוג מיקום הדירות בירושלים

Screen Shot 2017-10-29 at 10.38.47 PM

גם כאן נראה שיש טיפ-טיפה אות ברעש, וגם כאן אפשר לשחק במפה אינטראקטיבית

מחיר

הנה מחיר דירה ללילה בתל-אביב. ירוק זה בין 0 ל-100 דולר, צהוב זה 100 ל-200, כתום זה 200 ל-300, ואדום זה מעל 300. החציון הוא 87 דולר, אגב.

Screen Shot 2017-10-29 at 10.52.40 PM.png

באופן לא מפתיע, זה בערך תמונת מראה לדירוג המיקום. אבל יש כמה דברים מעניינים מעבר. חדי העין ודאי הבחינו במורסה האדומה ליד מחלף ההלכה, אלה מגדלי יו. ליד הים, כתם אדום נוסף מסמן את דרום הרברט סמואל. לא לגמרי ברור לי מה קורה שם. נראה שמדובר במספר מצומצם של משכירים שעושים את זה כעסק.

אני לא טורח להראות את ירושלים כי זה פחות מעניין. העיר העתיקה זה מקום יקר – שוק.

אשכול דירות לפי תיאור המשכיר

מעבר לפרטים יבשים כמו מחיר ודירוג, אבנ׳ב גם מאפשר לבעלי דירות לתאר את המקום.

חילקתי את איזור תל-אביב להרבה ריבועים שווי גודל. בתוך כל ריבוע, אספתי את תיאורי הדירות וצירפתי אותם יחד ל׳מסמך׳ אחד. כעת, אפשר להשוות את תדירות המילים במסמך מקומי שכזה לתדירות המילים בכל המסמכים. כמובן שבכל המסמכים יש מילים שמופיעות בתדירות גבוהה (וכבר הראתי בעבר שכל דירה בתל-אביב יכולה להיות מתוארת על-ידי המילה ׳ים׳).

בלי להכנס לפרטים הטכנים, אפשר לשקלל מחדש את תדירות המילים באופן שלוקח בחשבון גם את התדירות עצמה, וגם את התדירות היחסית בהשוואה לשאר תתי-האיזורים בתל-אביב (למעוניינים, עשיתי tf-idf).

כלומר, אפשר למצוא מילים בעלות תדירות גבוהה שהן גם ייחודיות לתת-איזור.

 החלוקה לתתי-איזורים היא שרירותית, משהו. ברור שיש תתי-איזורים שדי-דומים זה לזה. לכן הרצתי אשכול (קלאסטרינג) על תתי-האיזורים לפי וקטורי המילים ששוקללו מחדש, וחיברתי יחד איזורים שמופיעים באותו אשכול.

הנה תל-אביב. דירות סמוכות באותו צבע נמצאות באותו אשכול. כל איזור מראה את 3 המילים המובילות/בולטות לתיאור תת-האיזור הספציפי.figTLV.png

 המילים החשובות ביותר מתבררות כאלה שמתארות את מיקום האיזור. זה לא מפתיע, אבל בכל זאת, נחמד שאפשר לשחזר כך את העיר.

שימו לב שאיזורים דומים בצבעם (למשל כתום ואדום) לאו דווקא דומים סמנטית. האיזורים פשוט שונים מספיק באופן שמצדיק אשכול נפרד.

והנה ירושלים:

figJer

מחשבה לעתיד: להריץ ניתוח דומה על כל הערים בישראל, ולהתייחס לכל עיר בתור מסמך. כך אפשר למצוא מילים המתארות עיר שלמה, לא רק תתי-איזורים בתוך העיר.

מודעות פרסומת

מדד השמאלנות המנורמל

 בימים האחרונים אביגדור ״אני אפיל את סכר אסואן על איסמאעיל הנייה״ ליברמן מציע לבנות בגושי ההתנחלויות במקום במקומות מבודדים כמו עמונה, ומתויג כ׳שמאלן׳ על-ידי אנשים שחושבים שהם ימינה ממנו.

תהיתי עד כמה הכינוי הזה מודבק לאנשים שונים במערכת הפוליטית. בדקתי כמה תוצאות אפשר למצוא בגוגל אם מקלידים ״איקס הוא שמאלן״ או ״איקס הוא שמאלני״ או ״איקס שמאלני״ או ״איקס שמאלן״, אם מחליפים את ׳איקס׳ בשורה של אנשים מהמערכת הפוליטית.

הנה התוצאות:

leftist1

כאמור, ׳מדד השמאלנות׳ בציר הוואי הוא סכום מספר תוצאות החיפוש בגוגל עבור כל הביטויים האלה.

יש משהו קצת לא הוגן בגרף הזה, כיוון שהוא לא לוקח בחשבון את העובדה שיש אנשים שהם יותר פופולריים במנועי חיפוש בלי קשר לכינויי גנאי. לאור זאת יצרתי ׳מדד שמאלנות מנורמל׳, שהוא פשוט מדד השמאלנות מחולק בכמות התוצאות שגוגל מחזיר עבור השם של הדמות הפוליטית בלי קשר לכינוי הגנאי.

הנה התוצאות:

leftist2

אפשר להסיק מזה כל מיני דברים. התחושה שלי אישית היא שאם היה מדד יותר ׳אמיתי׳ למיקום בציר השמאל-ימין, אז ׳מדד השמאלנות המנורמל׳ היה יוצר פונקציה בצורת ח. כלומר, אנשים שהם באופן ברור שמאל לא מתוייגים ככאלה באופן מגנה, ואנשים שברור שהם ימין בצד הקיצוני גם לא מתוייגים ככאלה. אבל אנשים בימין-מרכז הם בדיוק המטרה לכינויים האלה.

End-to-end stock predictions with deep learning

Brief summary of the post for those wondering whether to bother: I trained a neural network that takes in images of stock data like this…

yum11

…and outputs whether that stock will go up or down over the next year. On the way, I make some remarks on end-to-end learning.

====

There's a current craze within the current craze of machine learning and AI, which focuses on end-to-end learning. Roughly speaking, this is the attempt to go from raw perceptual input to the desired output with as little knowledge engineering as possible.

To give an example, suppose you were trying to teach an AI to drive a car***. You could try to factor the problem: I need to detect lanes, other cars, people, and signs. I need to figure out people's plans, I need to parcel my actions into the following sub-goals, etc. Each of these sub-problems still needs to be solved on its own (and probably you could throw a neural network at these sub-problems), but at a high-level you're making a decision about how the problem breaks down:

endtoend1.png

Contrast this with a somewhat different school of thought:

endtoend2.png

That part in the middle of the figure above is a cartoon stand-in for a deep neural network. The network gets in the pixels of the image, outputs some driving action, and gets rewarded accordingly. The hope/promise is that the network will figure out on its own the necessary features and structures needed to solve the problem, without any 'hand-engineering' by a handy engineer.

(*** I am stealing borrowing this example from Amnon Shashua, the head of the self-driving car company Mobileye, who has a bunch of interesting things to say on the topic)

These two approaches are the ends of a spectrum, rather than two completely distinct factions. Still, there are many people these days who veer heavily towards the 'end-to-end' part. And it is quite alluring: we don't need to know anything about anything, just plug in the input and desired output, and let the machine take care of the rest.

This is partly what got people so excited about DeepMind's recent Nature paper, in which a neural network was able to achieve super-human performance on certain Atari games (like Pong and Space Invaders) through reinforcement learning over the pixels of the input. The 'super-human' part is a bit of a distraction. I mean, if you had a program that explicitly knew about things like "this is the space invader sprite" and "you are the defense-turret and when you shoot it does X", then of course you could achieve super-human performance. Such a result would barely register as a worthwhile paper in a conference, let alone a prestigious journal. The wow-factor had to do with the notion that you didn't have hand-craft explicit stuff like "you are the paddle", or even what a paddle was.

breakout.gif

DQN training to destroy humanity

I think it's an open question whether the network described in the DeepMind paper actually learned the representations that allow us humans to play these games successfully. In fact I'm pretty sure it didn't. And it matters, because while end-to-end is quite seductive and works surprisingly OK in certain regimes, I think it is a little insane.

But rather than spend the rest of this post arguing that (I've covered a bit of it elsewhere), let me instead morph into an end-to-end enthusiast, who also wants to play the stock market.

(clarification, everything from here on is still kinda true. Technically.)

======

Gee wiz guys, all this neural network stuff sounds awesome. But how can we make some actual money off of it? I mean besides getting a PhD in Deep Learning and being hired by a start-up.

I know, we'll bet on stocks!

psych

Let's see, we can formulate the 'problem' of stock betting as a system that takes in some data about stocks in the past, and tries to make the right prediction about stocks in the future. Now, I don't know that much about stocks, and I don't want to bias my system by giving it any human-specific notions like 'prices', or 'companies', or 'the concept of time'.

We'll just feed in raw input into the machine in a format it can understand: visual pixels.

I downloaded all the stock data for the Fortune 500 companies going 5 years back, and created 32×32 pixel images that show how a stock fared over 365-day intervals, including the stock name and the min and max of the price (not that the machine knows anything about those, it'll have to discover them on its own if they matter):

yum11

I used 50-day jumps and 365-day intervals, so I had about 10,000 training images. But how should I label them? What counts as a 'good' stock?

There's no one way to answer that. I ended up doing the following: If the stock went up over the 365 days that followed the image (a positive correlation of 0.5 or higher), I labeled it '+1'. If the stock went down (a negative correlation of -0.5 or lower) I labeled  it '-1'. Anything else was labeled '0'. The assumption is that we can turn these labels into useful actions like 'buy', 'sell/short', or 'do nothing'.

Since stocks generally go up (in the dataset, anyway), one can know nothing at all and still predict 70% of the labels just by guessing the maximum-likelihood "+1" all the time. So, 70% accuracy will be our baseline to beat.

To recap:

  • The input is an image of the stock performance over a given span of 365 days.
  • The desired output is -1, 0, or +1 depending on how well the stock did on the *next* 365 days.
  • The number to beat is 70% accuracy.

I took an off-the-shelf convolutional neural-network that can reasonably recognize different animals and threw the problem at it, using TensorFlow.

It didn't work.

I started to think that maybe the stock market present a unique challenge with its long-range beha-

NAH LET'S JUST ADD ANOTHER CONV-LAYER AND FUTZ WITH THE LEARNING PARAMETER LOL.

q8gb6

Here we go:

endtoend3.png

The network achieved 92.3% accuracy on the left-out examples (that is, stock images that it never saw before). For the math-y types out there, 92.3 > 70.

Hooray, let's make money.

Epilogue Q&A

Q1: "But Navisheker, what did the network actually learn?"

A1: I dunno, I guess it extracted the features it needed or something.

Q2: "Wouldn't it be saner to run machine-learning directly on the actual time-series data and company information?"

A2: Sure, if you want to hand-engineer your way to profit go ahead and try. My way doesn't require knowing anything about anything.

Q3: "Surely there's a simpler algorithm for getting a similar result. What if you just predicted that things that went up before tend to go up again?"

A3: That's not end-to-end, get out of here with your old-school ways! But since you asked, if you run logistic regression to try and predict the labels from the linear regression coefficient of the past 365 days, you can get up to 84%, which is not as good.

גלקסיית הפוליטיקה והתקשורת בטוויטר

 

בפוסט הקודם ראינו תמונת-מצב של רשת הטוויטר בין 100 אנשי תקשורת בישראל. בפוסט הזה נעשה דבר דומה לרשת בין חברי כנסת.

אספתי את פרטי הטוויטר של כל חברי הכנסת שיכולתי למצוא, וסרקתי את 500 הציוצים האחרונים שלהם. אם הציוץ הופנה אל מישהו אחר, יצרתי קשר בין שני הצמתים ברשת. אני כולל אנשי תקשורת בניתוח כיוון שהם מופיעים הרבה ברשת, אבל שימו לב שלא סרקתי את הציוצים של אנשי התקשורת במקרה הזה. הם נכללו ברשת רק אם חברי כנסת שלחו אליהם ציוצים.

הצבעים ברשת מראים את השיוך הפוליטי של החברים בה, וצבע לבן פירושו שמדובר באיש תקשורת. גודל שם המשתמש מקביל למידת המרכזיות שלו ברשת (הפעם לא השתמשתי באלגוריתם פייג׳רנק כיוון שהוא פשוט היה מזהה את בנימין נתניהו כמרכז הרשת. כמעט כולם מפנים אליו ציוצים והוא לא ממש עונה, ומהווה מעין ׳כיור׳ או ׳באר׳. במקום זה השתמשתי במדד דומה שמזהה חשיבות מקומית). המיקום ברשת הוא מדד למיקום ברשת.

knesset

כמו במקרה של אנשי התקשורת, יש חברי כנסת שנכללו בסריקה המקורית אבל לא מופיעים בגרף מכיוון שהם פשוט לא חלק מה׳שיח׳ המרכזי. ברור לי שתמונת המצב שמוצגת כאן מייצגת רק חתך אחד בזמן. אני אשאיר את המסקנות לשני קוראי הבלוג.

 

 

גלקסיית התקשורת: ניתוח רשת ציוצים בין אנשי מדיה

אף פעם לא הבנתי בדיוק למה הכוונה כשכתבים אומרים דברים כמו ״הרשת גועשת בעקבות פרסום התמונות״ או ״סערה ברשתות החברתיות בעקבות ההערות של תת-ניצב בלה בלה״. אני מניח שהכתבים לא באמת מנטרים מאות אלפי אזכורים בפייסבוק, ווטסאפ, בלוגים וטוויטר. אני מניח שהם פשוט שמים לב לעלייה בתעבורה ברשת החברתית שלהם. זה כנראה מדד לא רע לעלייה בתעבורה באופן כללי, אבל זה גרם לי לחשוב, האם אפשר למפות את הרשת החברתית של התקשורת, לפחות בטוויטר.

אספתי בערך 100 אנשי תקשורת בטוויטר (הרשימה המלאה בסוף הפוסט), כולל אנשים מידיעות אחרונות, ווינט, נרג, ערוץ 1, ערוץ 2, ערוץ 10, הארץ, דה-מרקר, גלובס, ג׳רוזלם פוסט, רדיו, בלוגרים ואחרים. אני לגמרי מודע לכך שהניתוח מושפע מהאנשים שבחרתי, אבל ניסיתי לאסוף מגוון רחב, ואת רובם בחרתי על סמך כך שחשבתי על דמות בולטת, ואז בדקתי אחרי אלו אנשי תקשורת היא עוקבת, וחזרתי על התהליך.

חלק מהאנשים – כמו נחמיה גרשוני, רני רהב ויריב אופנהיימר – הם לא בדיוק אנשי תקשורת במובן שכיוונתי אליו במקור, אבל הם הופיעו באופן בולט ברשת ולכן נכנסו גם לרשימה.

כעת, הורדתי את 500 הציוצים האחרונים של כל אדם ברשימה, ובדקתי אלו מהציוצים מכוונים אל מישהו אחר (בין אם הוא ברשימת ה-100 או לא). כל צומת ברשת היא אם כן מישהו מרשימת המאה-בערך או מישהו שנשלח אליו ציוץ מרשימת המאה-בערך. קשר בין צומת אחד לשני ברשת מייצג ציוץ בין הצמתים (הרשת היא גרף מכוון).

על הרשת הזאת אפשר להריץ כל מיני סטטיסטיקות. למשל, ניסיתי לסווג תתי-קהילות באופן אוטומטי (מוצגות לפי צבע). ניסיתי גם להגדיר מי יותר ״מרכזי״ ברשת. אני בכוונה לא משתמש במילה ״חשוב״. מישהו מרכזי ברשת הטוויטר הוא מישהו שאנשים מרכזיים ברשת שולחים אליו הודעות. זה נשמע קצת מעגלי, אבל זה האלגוריתם שמשמש בין השאר את גוגל לדירוג עמודים לפי חשיבות, ויש גם הצעה להשתמש בו בתור בסיס למוסר (אדם טוב הוא אדם שנחמד לאנשים טובים).

אפשר לחשוב על האלגוריתם הזה קצת כמו מענה על השאלה ״אם אני מתחיל במיקום רנדומי ברשת, וקופץ מצומת אחת לשנייה לפי הקשרים ביניהן, איפה סביר שאני אמצא את עצמי?״

התשובה היא: נחמיה גרשוני. ובמידה מסויימת ברק רביד, חיים לוינסון ועמית סגל. ויש עוד כמה.

Untitled

(גודל שם המשתמש פרופורציונאלי לדירוג הפייג׳ראנק של המשתמש. ממדים אחרים למידת חשיבות הצומת מובילים לתמונה דומה)

כאמור, הצבעים מסמנים קהילות שנמצאו באופן אוטומטי, אבל אני לא הייתי ממהר להסיק מהן מסקנות. באופן כללי הרשת מקושרת למדי, או יותר נכון יש גלקסיה מרכזית אחת במקום תתי-קהילות נפרדות. אם כי יש אנשים שהם פשוט לא חלק מהשיח. הם לא יוצרים גלקסיה נפרדת, הם פשוט כוכב נפרד שלא נכנס אפילו לתמונה כאן.

יכול להיות מעניין להריץ ניתוח דומה על חברי כנסת.

נספח: רשימת המאה-בערך

אנשיל פפר, רועי ארד, נדב אייל, קלמן ליבסקינד, גלי עמרן, מואב ורדי, רינה מצליח, דן מרגלית, גיל הופמן, טל שניידר, נחמיה ,גרשוני, רועי שרון, יוסי מלמן, עופר חדד, לילי שחר, חמי שלו, עקיבא נוביק, לילך וייסמן, עידו בנבג׳י, אטילה שומפלבי, ערד ניר, דנה וייס, הלל גרשוני, ליאור פרידמן, יריב אופנהיימר, דרור פוייר, ברוך קרא, מזל מועלם, איילה חסון, נדב אבוקסיס, קובי אריאלי, נתי טוקר, עומרי נחמיאס, קרן מרציאנו, ספי עובדיה, מורן אזולאי, נחמיה דואק, אלעד שמחיוף, ציון נאנוס, דפנה מאור, אריאל כהנא, רוני דניאל, יעקב אילון, אמיר טיבון, איתן אבריאל, עמית סגל, אסף ליברמן, שמרית מאיר, צ׳יקו מנשה, אורן נהרי, יונית לוי, מתן חודורוב, אריק בנדר, גילי כהן, סמי פרץ, גולן יוכפז, ענבל תמיר, אושרת קוטלר, יאיר וינרב, אלון בן-דוד, ספי הנדלר, עינת פישבין, עדו באום, רותם שטרקמן, רני רהב, עקיבא אלדר, אלוף בן, שאול אמסטרדמסקי, דניאל אופיר, סיון רהב מאיר, ירח טוקר, גיא רולניק, ענת סרגוסטי, יותם ברגר, אודי סגל, יאיר שרקי, ברק רביד, רענן שקד, עידן קוולר, בן מיטלמן, אופיר ברק, בן כספית, רביב דרוקר, דפנה לאל, יועז הנדל, דני קושמרו, גאולה אבן-סער, רוגל אלפר, אמיר איבגי, חיים לוינסון.

קרוב לים, האמנם? (ניתוח דירות Airbnb בתל-אביב)

Airbnb הוא אתר להשכרת דירות לטווח קצר. הנה למשל מפה המציגה כמה דירות בתל-אביב והמחיר ללילה:

אני מגיע

הורדתי את כל המידע שיכולתי למצוא באתר על דירות בתל-אביב (כמה מאות דירות), כולל מחיר ותיאור קצר. הנה ענן מילים המאגד יחד את כל המילים שאנשים השתמשו בהם כדי לתאר את הדירות:

באתי להזיע

אז…קרוב לים?

אפשר לנסות להשתמש בתיאורים כדי לחלץ מילים שמנבאות דירות יקרות יותר וזולות יותר, בדומה למה שנעשה כאן עם מוצרים מיותרים. אפשר לנסות לנבא את המחיר או כמות האהדה שדירה מקבלת לפי התמונה שאנשים מעלים, המיקום, או כל דבר אחר שמופיע במידע.

במקום, אנחנו נשאל ״מתי לגיטימי להגיד שהדירה קרובה לים?״

=====

יש לנו את המיקום של כל דירה בקווי אורך ורוחב. אנחנו יכולים להגדיר את החוף כקו ישר יחסית, ולמדוד את המרחק בין כל דירה לנקודה הקרובה ביותר על הקו הזה:

Screen Shot 2015-12-16 at 10.26.09 AM

חישוב מדויק יותר צריך לקחת בחשבון שכדור הארץ הוא לא שטוח, אבל אחרי כמה דקות של חישובי מעגלים גדולים והמרחק לנקודות על ספירה…

הו

…החלטתי שזה לא באמת משנה.

אז יש לנו את המרחק בין כל דירה לים. האם יש קשר בין המרחק לבין השימוש במילה ״חוף״ בתיאור? נראה שכן:

boxplot

המרחק החציוני מהים של דירות שמשתמשות במילה ׳חוף׳ בתיאור הוא בערך 750 מטר. המרחק החציוני מהים של דירות שלא משתמשות במונח ׳חוף׳ הוא בערך 1000 מטר. מדובר בהבדל סטטיסטי מובהק, למי שאכפת ממובהקות.

דרך אחרת לנתח את המידע זה לשאול ״מה ההסתברות שבעל דירה ישתמש במונח ׳חוף׳ כפונקציה של מרחק מהחוף?״

הנה:

logistic

זה רגרסיה לוגיסטית על המידע, עם קווי סמך. הסיכוי שאדם ישתמש במונח ׳חוף׳ עולה ככל שמתקרבים לחוף, עד כדי 80% כאשר נמצאים כמעט על חוף.

אבל במקום להסתכל על מה שבעלי דירה עושים, אפשר לשאול מה אתה כשוכר צריך לעשות. הבה נגדיר ׳דירות קרובות לחוף׳ ככאלה שנמצאות מתחת למרחק החציוני של דירות מהחוף, ו׳דירות רחוקות מהחוף׳ ככאלה שנמצאות מעל המרחק החציוני. אם בעל דירה השתמש במונח ׳חוף׳, הסיכוי שלך להיות ב׳דירות קרובות לחוף׳ הוא בערך 60% (חישוב בייסיאני טיפוסי).

===

מתי לגיטימי בעצם להשתמש במונח ׳חוף׳ בתיאור דירה? מנקודת המבט של שוכר, הדרך הנכונה לענות על שאלה שכזו זה פשוט לשאול ״מה המרחק מהחוף שהיית מקבל כ׳קרוב לחוף׳?״. אפשר להפנות שאלה שכזו ל-amazon mechanical turk, אבל מכיוון שלא מתחשק לי לבזבז את כספי הסנדוויץ׳ שלי, ננסה לענות על שאלה אחרת – מהו מרחק לגיטימי מהחוף בעיני בעלי הדירה? אם נגדיר באופן שרירותי משהו הסכמה בין בעלי דירה כ״מעל 50% סיכוי שבעל דירה ישתמש במונח״, אז המרחק ממנו זה לגיטימי להתחיל להשתמש ב׳חוף׳ הוא משהו כמו 1.25 ק׳מ. בדיקה אקראית במפות של גוגל מראה שנקודה אקראית במרחק 1.25 ק׳מ מהחוף היא בערך במרחק 15-20 דקות צעידה מחוף. הניחוש שלי הוא שרוב האנשים יגידו ש׳קרוב לחוף׳ זה יותר כמו 5-10 דקות הליכה, אבל זה רק ניחוש.

===

כמובן שבכל הניתוח הזה לא לקחתי בחשבון שהשימוש במונח ׳חוף׳ בא בהקשר מסויים. אולי אנשים כתבו ״לא קרוב לחוף״, או ״עשרים דקות מהחוף״. לקחתי את כל התיאורים שהכילו משפטים כמו ״x דקות מהחוף!״ ושרטטתי את x כנגד המרחק האמיתי מהחוף, בהנחה שאדם ממוצע צועד בקצב של 5 קמ״ש, והולך בקו ישר מהדירה לחוף:

קיץ על החוף

קודם כל זה נחמד שיש התאמה לינארית. הגרף הזה מראה שאם בעל דירה אומר שאתה נמצא במרחק x דקות מהחוף, כדאי שתוסיף 3 דקות לפחות. וזה, כאמור, בהנחה שמדובר בקו אווירי ישר. רוב הסיכויים שצריך להוסיף לפחות 5 דקות ל-x. זה גם קצת מעניין לראות את הפיזור סביב ׳5 דקות׳ מבחינת בעלי דירות, לעומת המציאות.

מה עוד אפשר לעשות עם תיאורי דירות? למשל, אפשר להסתכל על ביטויים כמו ״מרכז העיר״ או ״לב תל-אביב״ ולנסות להראות גרפית באמצעות מסווגים שונים איפה זה מרכז העיר המנטלי.

אבל זה נושא לפוסט אחר.

מגמת התקוממות (קצר)

לפני כמה שבועות בדקתי ב-google trends את השימוש במונח ׳אינתיפאדה׳ בעברית ובערבית, במיוחד בלטה העובדה שהשימוש במונח בשתי השפות קפץ לרמה שלא היה כמותה מאז ש-trends התחיל לאסוף מידע. הימים היו ימי היסטריה וכל הכותרות הוקדשו לאירועי האלימות, ולשאלה האם מדובר באינתיפאדה, וכו׳.

בערך יומיים אחרי הפוסט ההוא לכולם נמאס מהמונח/שאלה, לפחות בעברית:

intifada2015

בערבית, לעומת זאת, הדעיכה איטית הרבה יותר. רוב הפעילות מגיעה מאיזור שגוגל מגדירה פלסטין/ירדן, ורוב החיפושים מוקדשים לחיפוש רשימות חללים, מידע היסטורי, ושירים שקשורים לאינתיפאדה, כך שלא נראה שמדובר רק בכך שיש יותר דוברי ערבית בעולם.

האם אתה יודע מה זו אינתיפאדה?

האם זו אינתיפאדה? אין לי מושג. לא נראה שיש דרך לכמת מתי עוברים ממצב של ׳לא אינתיפאדה׳ למצב של ׳כן אינתיפאדה׳.

מה שכן, יש הרבה דיונים סביב השאלה האם זוהי אינתיפאדה, ואת זה אפשר לנסות לכמת. למשל, הנה כמה משפטים מאתרי החדשות בימים האחרונים:

ואללה! מדווחים ש״האירועים האחרונים כבר מתחילים להיראות כמו אינתיפאדה״ אבל ב-ynet מסבירים ש״לא כל אלימות היא אינתיפאדה״, בזמן שהאתר גם מדווח על מהומות בהן ערבים ישראלים קראו שהם ״רוצים אינתיפאדה״. לפי נענע, השב׳כ אמר לנתניהו שיש הסלמה אבל ״לא אינתיפאדה״,  ב-NRG ארז וינר מסביר גם ש״זו לא אינתיפאדה״, ועמיר רפפורט מגדיל ונותן ״5 סיבות למה כן ו-4 סיבות למה לא״ מדובר באינתיפאדה.

אפשר לצלול עוד אל תוך הקשקשת, אבל לא נראה שיש שם תשובה. במקום, אפשר לנסות לכמת את החיפושים אחר המונח, לאורך הזמן.

הנה למשל, נפח החיפוש אחר המונח ׳אינתיפאדה׳ בעברית (כחול) ובערבית (אדום) מאז 2009:

eah

כפי שאפשר לראות, העלייה בחיפוש בעברית אחר המונח בשבועות האחרונים גבוהה פי כמה וכמה מכל השנים האחרונות. בערבית, העלייה מתקרבת לשיא של 2011 (אפשר לחתוך לאחור ולברר את 2011, ונראה שרוב התוצאות מאז מגיעות מלוב, בערך מתחילת תקופת ההתקוממות שם. לעומת זאת, רוב העלייה מהימים האחרונים מגיעה מ׳פלסטין׳ ומירדן).

===

את רצף האירועים האחרון מתארכים בתקשורת בישראל לרצח בני הזוג הנקין ב-1 לאוקטובר, אך רוב העלייה בנפח החיפוש מתרחשת כמה ימים לאחר מכן, עם המשך ההדרדרות. הנה העלייה בחיפוש אחר המונח ׳אינתיפאדה׳ בעברית (כחול) ובערבית (ירוק) מ-8 הימים האחרונים:

intifada7
(תזכורת, כל נקודת שיא כאן גבוהה הרבה יותר מאשר השבועות לפני כן בגרף. צריך לדמיין קו די שטוח נמתח מצד שמאל)

העליות בעברית קשורות לזמן מהדורות החדשות עד כמה שאני מבין, אבל העלייה בערבית פחות תלויה בהן.

העלייה בעברית בעיקר קשורה למונחים ״אינתיפאדה שלישית״ ו״אינתיפאדה 2״. העלייה בערבית בעיקר קשורה לשיר של קאסם נאג׳ר, ״האם אתה יודע מה זו אינתיפאדה?״. יש כאן בדיחת רקורסיה איפשהו, אבל אין לי כוח לחפש אותה.

ניתוח הרגש של אורי כץ (לבקשת הקורא אלעד אבן)

א: ״אז מה התשובה?״

ב: ״לא.״

א: ״אתה יכול להרחיב קצת?״

ב: ״לאאאאאאאאאאא.״

====

הקורא אלעד אבן כתב בפייסבוק:

״אני קורא את (כתביו של אורי כץ) כבר כמה שנים, ואין לי הוכחה אמפירית לכך, אך אני חש ש(הוא) הופך יותר ויותר ביקורתי ושלילי…האם זו התפכחות התבגרות, אולי המצב מתדרדר באמת או אולי זה בכלל בעיני הקורא.

נ.ב.
יש בחור שאוהב לעשות ניתוחים ממוחשבים אלגוריתמים לטקסט באופן אנונימי…אז נביא יקר, אם אתה או אחד ממכירך קורא פוסטים אלו אשמח לראות אם ניתוח Bag of words או sentiment analysis לפוסטים של אורי יאשר או יפריך את הרגשתי.״

====

אני לא ממש קורא את הפוסטים של אורי כץ, אבל קצת כמו מיץ-חיפושיות, אם מזכירים את שמי אני מופיע. אני לא מכיר כלים טובים לניתוח רגש (sentiment analysis) בעברית, אז בואו נעשה משהו טיפשי.

כתבתי סקריפט קצר בפיית׳ון שמוריד את כל הפוסטים של אורי כץ, מתרגם אותם לאנגלית, ומעביר את התרגום שורה שורה דרך ניתוח-רגש שאומן על ביקורות סרטים וטוויטר ודברים כאלה.

רעיון רע, אני יודע. גם אם היה איזשהו אות במקור אני לא ממש סומך על ניתוח-רגש שידע לחלץ אותו, ותרגום אוטומטי בטח גם פוגע בזה. אבל זה הדבר המהיר שיכולתי לעשות, והנה התוצאות:

katz1

הגרף מתאר את הרגש הממוצע של כל פוסט, לאורך הפוסטים.

למי שלא אוהב להיות ממוצע, אפשר לראות את זה גם בתור boxplot:

katz2

באופן כללי נראה שעל-פי הניתוח הזה אין הבדל לאורך הזמן (ואפשר לחתוך את זה סטטיסטית בדרכים שונות). אני מדגיש שוב שזה לא אומר שאין באמת הבדל, אלא רק שלפי הניתוח הדי מצ׳וקמק הזה לא רואים הבדל.

אפשר גם לעשות הבדלים יחסיים. למשל, ארי שביט קצת יותר שלילי בממוצע מכץ (או קצת פחות חיובי). זאת תוצאה מובהקת, אבל האפקט הוא מאוד קטן. שביט גם נעשה טיפה יותר חיובי לאורך הזמן, אם מסתכלים על החציון.

מברז זוהר ועד עניבת בייקון: ניתוח מוצרים מיותרים

מישהו מכם רוצה מיטת אקווריום?

מיטה

מה לגבי מעיל-גשם-באטמן?

איכס

שני המוצרים טיפשיים, שני המוצרים לא פרקטיים. אבל אני מנחש שאתם מעדיפים את המיטה.

הניחוש הזה מבוסס על כמות האנשים ש׳שמרו׳ את המוצרים האלה באתר ״זו הסיבה שאני מרושש״, שמציג כל מיני חפצים מיותרים-אך-משעשעים.

מיטת האקווריום היא אחד המוצרים היותר פופולריים (לא מבחינת קנייה, סתם מבחינת…פופולריות), ומעיל-גשם-באטמן הוא אחד היותר לא-פופולריים. מוצרים פופולריים אחרים כוללים שק שינה לביש, מיני בליסטרה, או כרטיסי ביקור ספציפיים. מוצרים לא-פופולריים כוללים עניבת בייקון, שלט רחוק שהוא גם פותחן בקבוקים, וספר צביעה של ביל מארי.

תהיתי, האם אפשר לנבא מה נחשב מוצר טיפשי-אך-טוב, ומה נחשב מוצר טיפשי-אך-גרוע.

אז הורדתי בערך 1000 מוצרים מהאתר. כל מוצר כולל את השם, המחיר, הפופולריות, תמונה, ותיאור קצר.

בדיקות פשוטות

הנה התפלגות הפופולריות (כלומר, כמות הפעמים שאנשים ׳שמרו׳ מוצר):
saves

נראה כמו חוק חזקה כלשהו.

והנה התפלגות המחירים (בסולם לוגריתמי, כי יש מוצרים יקרים ממש):

prices

נראה גם בערך כמו חוק חזקה, אבל זה כי הכל נראה בערך כמו חוק חזקה.

יש קורלציה שלילית קטנה בין המחיר לפופולריות, אם כי אני לא חושב שזה באמת קשר לינארי:

correlation

ניבוי על-פי תמונה

המדד הכי טוב הוא כנראה לשים בן-אדם מול תמונה של המוצר ולראות האם הפה שלו מתעקל קצת למעלה או קצת למטה והצידה, ובאיזה מידה. זה יקח זמן, ואולי אפשר לחלץ הבדל ויזואלי באופן אוטומטי.

הנה תמונות של 50 מוצרים מאוד פופולריים:

best50

והנה תמונות של 50 מוצרים מאוד לא פופולריים:

worst50

אני שם לב שהדברים הפופולריים קצת כהים יותר, מה שמסתדר עם התחושה הלא-מגובה שאנשים מאוד אוהבים דברים שמשנים צבעים או זוהרים בחושך (המוצר הפופולרי ביותר, בהפרש ניכר, הוא מבנה עם מנורות שמתלבש על הברז ומשנה את הצבע של המים בהתאם לטמפרטורה שלהם).

אימנתי 2 מסווגים (classifiers), אחד מסוג ׳שכנים קרובים׳ ואחד מסוג 'יער אקראי׳. לכל אחד נתתי אוסף מוצרים שסומנו בתור ״גרוע״ או ״מוצלח״, וביקשתי מהם לנבא מוצרים חדשים. אני יכול לספק פרטים נוספים למתעניינים, אבל השורה התחתונה היא ששניהם גרועים באופן מפתיע, בקושי מעל ניחוש אקראי.  כנראה שטעיתי כשחשבתי שיש הבדל ברור בין התמונות.

יכול להיות שאלגוריתם מתוחכם יותר שעושה זיהוי חפצים ידע לחלץ משהו יותר טוב. אפשר למשל לקחת רשת נוירונים שכבר אומנה מראש על ספרייה רצינית של אובייקטים, ולקחת את האקטיבציה של השכבות הגבוהות בתור הקלט שמכניסים למסווג. אני לא אעשה את זה, כי זה מתחיל להרגיש פחות כמו פוסט ויותר כמו עבודה.

מה נשאר? טקסט

אימנתי מודל סיווג בייסיאני תמים, פעם על שם המוצר (לרוב 2-4 מילים) ופעם על הטקסט שמתאר את המוצר (בין 40-50 מילים בממוצע). בשני המקרים המודלים ניבאו ברמת דיוק של 60-ומשהו אחוזים. לא משהו מסעיר, אבל בהחלט יותר טוב מהסיווג שהתבסס על התמונה. נראה שיש אפילו יתרון קל למסווג שמבוסס על שם מוצר בלבד, אם כי לא הרצתי מספיק בדיקות כדי לבסס הבדל מובהק. אפילו אם אין הבדל מובהק, זה מעניין שאפשר להגיע לאותה רמת דיוק רק באמצעות שם המוצר.

הנה גרף שמסכם את ההצלחה (או הכישלון) של המסווגים השונים:

השוואה

מה שנחמד במסווגי הטקסט זה שאפשר לקבל אינדיקציה אילו מילים מנבאות מוצר טוב/גרוע.

הנה כמה מהמילים שמנבאות מוצר טוב: dark, glow, high, power, night, office, enjoy, cold

הנה כמה מהמילים שמנבאות מוצר גרוע: detailed, man, his, geeky, green, men, finally, hand, help, toys

נחמד לראות שהמילים ה׳טובות׳ מתאימות לאינטואיציה שהייתה לנו מרפרוף על המוצרים הטובים.

סיכום

יש עוד עולם שלם של דברים שאפשר לעשות עם המידע הזה, ואם הייתי ה-data scientist של חנות ״מתנות לגבר״, אולי הייתי עושה את חלקם. למשל, אפשר לבנות אלגוריתמים יותר מתוחכמים של זיהוי תמונה ולנסות להפעיל סיווג מתקדם. אפשר לנסות לשלב בין זיהוי מבוסס תמונה וזיהוי מבוסס טקסט. אפשר לנסות לנבא את הפופולריות כמשתנה רציף ולא רק כמשהו בינארי של ׳טוב׳ ו׳רע׳.

ואפשר אולי להשתמש במילים הטובות והרעות כדי להזות מוצרים חדשים ולנבא אם הם יצליחו. אקווריום ג׳די מתנפח? אקדח קפה זוהר בחושך? צוללת…קפה…מתנפחת?