כל המאמרים
BacktestingSurvivorship BiasPythonמדריך
·נכתב על ידי עדן מרגוליס

מה זה Survivorship Bias ב-Backtesting

Survivorship Bias מוסבר: איך בדיקת אסטרטגיה רק על מניות שעדיין קיימות היום מנפחת תוצאות, ואיך למנוע את הטעות בבדיקות Backtesting.

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


איך זה קורה בפועל

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

import yfinance as yf

# בעייתי: משתמש ברשימת S&P 500 של היום כדי לבדוק אסטרטגיה על 2015
current_sp500_tickers = get_sp500_list()  # הרשימה כפי שהיא עכשיו
data = yf.download(current_sp500_tickers, start="2015-01-01", end="2020-01-01")

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

למה זה מטה את התוצאות כלפי מעלה

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

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

איך למנוע Survivorship Bias

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

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

זהירות מיוחדת עם בדיקות ארוכות טווח — ככל שתקופת הבדיקה ארוכה יותר (5+ שנים), חשוב יותר לבדוק את מקור הנתונים ולוודא שהוא לא סובל מ-Survivorship Bias משמעותי.

שאלות נפוצות

האם yfinance סובל מ-Survivorship Bias?

כן, באופן עקיף — yfinance עצמו לא "מסנן" נתונים, אבל אם משתמשים ברשימת מניות נוכחית (למשל רשימת S&P 500 של היום) כדי למשוך נתונים היסטוריים, נוצרת ההטיה. הבעיה היא בשיטת בחירת המניות, לא בספריית הנתונים עצמה.

האם Survivorship Bias רלוונטי לאסטרטגיות מסחר יומי קצרות?

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

מה הקשר בין Survivorship Bias ל-Look-ahead Bias?

שני מקורות שונים לניפוח תוצאות Backtesting. Look-ahead Bias נובע משימוש במידע שלא היה זמין בזמן אמת. Survivorship Bias נובע מבחירת יקום מניות שכבר "יודע" מי שרד. שניהם חשובים לבדוק בנפרד.

איך זה משפיע על מדדי Backtesting כמו Sharpe Ratio?

Survivorship Bias מנפח כמעט את כל המדדים — Sharpe Ratio, Win Rate, ותשואה כוללת — כי הוא מסיר מהמדגם בדיוק את התרחישים הגרועים ביותר. אסטרטגיה שנבדקה עם ההטיה הזו עלולה להראות טוב משמעותית מביצועיה האמיתיים בשוק חי.

רוצה לבנות בוט כזה בעצמך?

שיחה קצרה של 20 דקות.

דברו איתנו חינם