cover b

الگوریتم درخت تصمیم(Decision Tree)چیست؟

1.مقدمه

الگوریتم یکی از شناخته‌شده‌ترین و قابل‌تفسیرترین روش‌های یادگیری ماشین است که برای مسائل طبقه‌بندی و رگرسیون به کار می‌رود. ایده‌ی اصلی این الگوریتم تقسیم تدریجی داده‌ها بر اساس ویژگی‌هایی است که بیشترین توانایی را در تفکیک نمونه‌ها دارند. نتیجه‌ی این فرآیند ساختاری درختی است که در آن هر گره نمایانگر یک تصمیم، هر شاخه بیانگر یک شرط، و هر برگ نشان‌دهنده‌ی خروجی نهایی مدل است.

درخت تصمیم به دلیل سادگی تفسیر، توانایی کار با داده‌های عددی و دسته‌ای، و نیاز کم به پیش‌پردازش، در بسیاری از حوزه‌ها از جمله پزشکی، تحلیل مالی، سیستم‌های توصیه‌گر و داده‌کاوی مورد استفاده قرار گرفته است. با این حال، این الگوریتم در کنار مزایای خود، با چالش‌هایی مانند بیش‌برازش (Overfitting)، حساسیت به داده‌های آموزشی و واریانس بالا نیز مواجه است؛ موضوعی که منجر به توسعه روش‌هایی مانند Pruning، و Gradient Boosting شده است.

در این مقاله، الگوریتم درخت تصمیم را از منظر مفهومی، ریاضی و عملی بررسی می‌کنیم. هدف این است که روشن شود این الگوریتم چگونه داده‌ها را تقسیم می‌کند، معیارهایی مانند Entropy و Gini چه نقشی در ساخت درخت دارند، و چرا درخت تصمیم همچنان یکی از پایه‌ای‌ترین و مهم‌ترین روش‌های یادگیری ماشین محسوب می‌شود.

2.تعریف

در دنیای یادگیری ماشین، درخت تصمیم (Decision Tree) یک الگوریتم قدرتمند، غیرپارامتری (Non-parametric) و نظارت‌شده (Supervised Learning) است که برای حل هر دو کلاس از مسائل هوش مصنوعی، یعنی طبقه‌بندی (Classification) و رگرسیون (Regression) به کار می‌رود.

این الگوریتم از یک استراتژی کلاسیک به نام تقسیم و غلبه (Divide and Conquer) پیروی می‌کند. فرآیند آموزش درخت به صورت یک جستجوی حریصانه (Greedy Search)، از بالا به پایین و بازگشتی (Recursive) است که فضای پیچیده و درهم‌تنیده‌ی داده‌ها را بر اساس قوانین تصمیم‌گیری متوالی (Decision Rules)، به زیرمجموعه‌هایی کوچک‌تر، همگن و خالص‌تر (Pure Subsets) تجزیه می‌کند.

3.اهمیت و جایگاه

در مهندسی هوش مصنوعی، انتخاب یک الگوریتم فراتر از بنچمارک‌های عددی، به نیازمندی‌های استراتژیک پروژه گره خورده است. دلایل اهمیت و ضرورت استفاده از درخت تصمیم (Decision Tree) در معماری سیستم‌های هوشمند، وزن و جایگاه ویژه‌ای به این مدل می‌بخشد که آن را از سایر الگوریتم‌های سنتی متمایز می‌کند.

مهم‌ترین دلایل ضرورت به‌کارگیری این الگوریتم عبارتند از:

  • تفسیرپذیری و منطق سفید (White-Box Nature): برخلاف مدل‌های جعبه‌سیاه (مانند شبکه‌های عصبی عمیق) که فرآیند استدلال آن‌ها مبهم است، درخت تصمیم یک سیستم «جعبه سفید» است. این الگوریتم مسیر رسیدن به پیش‌بینی را به صورت شفاف و فلوچارتی ترسیم می‌کند. این ویژگی در صنایع حساسی مانند پزشکی و حقوق، یک ضرورت قانونی و اخلاقی برای تایید اعتبار تصمیمات هوش مصنوعی است.
  • نگاشت رفتاری تصمیم‌گیری انسان: ساختار سلسله‌مراتبی درخت، دقیقاً منطق شرطی و گام‌به‌گام مغز انسان را شبیه‌سازی می‌کند. این همسویی ساختاری، تفهیم خروجی‌های هوش مصنوعی را برای مدیران کسب‌وکار و سهام‌داران غیرفنی سازمان بدون نیاز به ترجمه ریاضی، به شدت تسهیل می‌کند.
  • کشف پویای روابط غیرخطی و تعاملی: در دنیای واقعی، متغیرها اثرات متقاطع روی یکدیگر دارند. درخت تصمیم بدون نیاز به مهندسی پیچیده ویژگی‌ها (Feature Engineering)، به صورت خودکار روابط غیرخطی و برهم‌کنش‌های چندگانه میان صفات را کشف و در قالب گره‌های تصمیم پیاده‌سازی می‌کند.
  • مدیریت ساختار الگوهای ناهمگون داده: در بسیاری از پروژه‌ها، مجموعه‌داده ترکیبی از ویژگی‌های عددی، دسته‌بندی‌شده و باینری است. ضرورت استفاده از درخت تصمیم در اینجاست که بدون نیاز به پیش‌پردازش‌های سنگین و مخرب (مانند One-Hot Encoding یا نرمال‌سازی عددی)، این داده‌های ناهمگون را در کنار هم مدیریت می‌کند.

.

4. فرآیند ساخت و چگونگی عملکرد درخت تصمیم

یادگیری و ساخت یک درخت تصمیم، فرآیندی پویا، بازگشتی و مبتنی بر تفکیک بهینه‌ی فضای ویژگی‌هاست. این الگوریتم با تکیه بر استراتژی تقسیم و غلبه (Divide and Conquer) و رویکرد حریصانه از بالا به پایین (Top-Down Greedy Approach)، مجموعه‌داده را به بخش‌های همگن (Homogeneous) تقسیم می‌کند. واژه «حریصانه» در مفاهیم یادگیری ماشین به این معناست که مدل در هر گام، شکستی را انتخاب می‌کند که در همان لحظه بیشترین کارایی را دارد، بدون اینکه اثرات این تصمیم را روی گام‌های بعدی یا ساختار کلی درخت در آینده بسنجد (بهینه‌سازی موضعی به جای بهینه‌سازی سراسری).

گام های این فرآیند شامل:

  • ارکان ساختاری درخت: گره‌ها و یال‌ها (Nodes and Edges)
  • فرآیند گام‌به‌گام ساخت هندسی درخت
  • فرمول‌های ریاضی درخت تصمیم و معیارهای تقسیم داده
  • مفروضات بنیادی و محدودیت‌های هندسی درخت تصمیم
  • کنترل پیچیدگی: واکاوی موازنه بایاس-واریانس، خردشدگی داده‌ها و مکانیزم هرس (Pruning)

.

ارکان ساختاری درخت: گره‌ها و یال‌ها (Nodes and Edges)

پایه و اساس هندسی، بصری و منطقی یک درخت تصمیم بر دو عنصر بنیادین نظریه گراف استوار است: گره‌ها (Nodes) و یال‌ها (Edges). ترکیب ریاضی این دو، یک ساختار سلسله‌مراتبی و فلوچارتی همه‌جانبه ایجاد می‌کند که جریان استدلال و کالبدشکافی داده‌ها را هدایت می‌کند:

  • گره‌ها (Nodes): هر گره در معماری یادگیری ماشین، نماینده‌ی یک ایستگاه محاسباتی، شرط منطقی یا تجلی خروجی نهایی است:
    • گره ریشه (Root Node): فرمانده اصلی و بالاترین نقطه درخت است که بازتاب‌دهنده‌ی کل مجموعه‌داده (امتیاز ناخالصی اولیه) و نقطه آغازین فرآیند استدلال است. ریشه فاقد هرگونه یال ورودی بوده و بر اساس متمایزکننده‌ترین ویژگی دیتابیس (حداکثر بهره اطلاعاتی) شکل می‌گیرد.
    • گره‌های تصمیم یا داخلی (Decision / Internal Nodes): گره‌های میانی و شرطی درخت هستند. هر گره تصمیم با تحلیل دقیق یک صفت (Feature)، مرز تفکیک داده‌ها را تعیین کرده و حداقل با یک یال ورودی و دو یا چند یال خروجی، بستر پارتشین‌بندی را فراهم می‌کند.
    • گره‌های برگ یا پایانی (Leaf / Terminal Nodes): مرزهای نهایی و نقاط انسداد درخت هستند که خروجی مدل را صادر می‌کنند. این گره‌ها فاقد یال خروجی بوده و بالاترین درجه خلوص (Homogeneity) را دارند. در سناریوی طبقه‌بندی، برگ نشان‌دهنده توزیع یا نام کلاس هدف و در مسائل رگرسیون، بازتاب‌دهنده میانگین عددی رکوردهای متناظر است.
  • یال‌ها یا شاخه‌ها (Edges / Branches): خطوط جهات‌داری هستند که بردار منطقی جریان را از یک گره به گره بعدی دیکته می‌کنند. هر یال، نشان‌دهنده یک قاعده تصمیم‌گیری (Decision Rule) یا پاسخ صلب به شرط گره والد است (مثلاً بازه عددی خاص یا پاسخ بله/خیر) که مجموعه‌داده را به فضاهای مجزا افراز می‌کند. عبور از هر یال، بازگوکننده‌ی فیلتر شدن نویزها و تقلیل گام‌به‌گام آنتروپی دیتابیس است.

.

فرآیند گام‌به‌گام ساخت هندسی درخت

ساخت ساختار هندسی و توپولوژی درخت تصمیم به صورت یک الگوریتم تکرارشونده و پویا، طبق متدولوژی مشخصی در چرخه‌ی یادگیری ماشین و داده‌کاوی پیاده‌سازی می‌شود. این فرآیند بر لبه‌ی بهینه‌سازی موضعی گام برمی‌دارد:

  • گام اول: آماده‌سازی ساختاری داده‌ها و مهندسی ویژگی‌ها (Data Preparation)
  • گام دوم: پارتشین‌بندی بازگشتی (Recursive Partitioning)
  • گام سوم: اعمال شروط توقف و پایداری (Stopping Conditions)

.

گام اول: آماده‌سازی ساختاری داده‌ها و مهندسی ویژگی‌ها (Data Preparation)

پیش از شروع فرآیند بازگشتی، مهندسی و آماده‌سازی دقیق دیتابیس برای درخت تصمیم یک ضرورت است:

  • پاک‌سازی و حذف نویز (Data Cleaning): حذف رکوردهای متناقض و پرت. (Outliers) اگرچه مدل نسبت به مقادیر پرت مقاوم است، اما نویز شدید مأموریت تفکیک را منحرف می‌کند.
  • مدیریت داده‌های گم‌شده (Handling Missing Values): الگوریتم‌هایی مثل 4.5C به صورت بومی با توزیع احتمالی و وزن‌دهی، داده‌های مفقود را مدیریت می‌کنند؛ در سایر مدل‌ها از روش‌های جایگزینی (Imputation) با میانه یا ترفند لایه‌بندی استفاده می‌شود.
  • کدگذاری متغیرهای دسته‌بندی‌شده (Categorical Data): درخت‌های تصمیم بر خلاف مدل‌های مبتنی بر فاصله (مانند SVM)، نیازی به (One-Hot Encoding) مخرب ندارند و متغیرهای اسمی و ترتیبی (Ordinal) را مستقیماً یا با تکنیک‌های رمزگذاری عددی (Label Encoding) پردازش می‌کنند.

.

گام دوم: پارتشین‌بندی بازگشتی (Recursive Partitioning)

این فاز جوهر اصلی الگوریتم است. فرآیند از گره ریشه (شامل کل داده‌ها) آغاز می‌شود:

  • سنجش همه‌جانبه: مدل تمام ویژگی‌های ورودی را اسکن کرده و سناریوهای شکست را آزمایش می‌کند.
  • کشف بهترین گسستگی: با معیارهای ریاضی (جینی/آنتروپی)، متغیری که بالاترین خلوص را ایجاد کند، گره را می‌سازد.
  • انشعاب و پارتشین‌بندی: داده‌ها بر اساس مرزهای تصمیم‌گیری به زیرمجموعه‌های کوچک‌تر (Child Nodes) تفکیک می‌شوند.
  • تکرار الگوریتمی (Recursion): این چرخه برای گره‌های فرزند به عنوان ریشه‌های جدید تکرار می‌شود تا فضا کاملاً افراز گردد.

.

گام سوم: اعمال شروط توقف و پایداری (Stopping Conditions)

تقسیمات بازگشتی تا فعال شدن یکی از معیارهای زیر ادامه می‌یابد تا از خردشدگی شدید داده‌ها (Data Fragmentation) و لوپ بی‌نهایت جلوگیری شود:

  • خلوص مطلق (Absolute Purity): انطباق صددرصدی نمونه‌های گره با یک کلاس واحد.
  • حداکثر عمق مجاز (max_depth): رسیدن درخت به سقف لایه‌های تعیین‌شده توسط دیتاساینتیست.
  • حداقل نمونه برای تفکیک (min_samples_split): کاهش تعداد رکوردهای گره از حد مجاز برای شکستن دوباره.
  • حداقل نمونه در برگ (min_samples_leaf): اگر شکست جدید، فرزندی با داده‌های کمتر از حد آستانه تولید کند، آن انشعاب لغو و گره پایانی صادر می‌شود.

.

فرمول‌های ریاضی درخت تصمیم و معیارهای تقسیم داده

در الگوریتم‌های داده‌کاوی و سیستم‌های یادگیری نظارت‌شده، فرآیند پارتشین‌بندی فضای ویژگی‌ها و انتخاب متغیر برنده برای تفکیک گره‌ها، بر مبنای توابع خلوص ریاضی (Purity Functions) و کاهش اصطکاک آماری صورت می‌گیرد. هر الگوریتم با بهینه‌سازی یک تابع هدف مشخص، مرزهای تصمیم‌گیری را استخراج می‌کند. در ادامه، ریاضیات صلب این توابع به همراه تشریح ساختاری متغیرها تبیین می‌گردد:

  • الف.ناخالصی جینی (Gini Impurity)
  • ب.آنتروپی شانون (Shannon Entropy)
  • ج.بهره اطلاعاتی (Information Gain)
  • د.نسبت بهره اطلاعاتی (Gain Ratio)
  • ه.میانگین مجذور خطا (MSE) – معیار رگرسیون واریانس‌محور
  • و. میانگین انحراف مطلق  – (MAE)معیار رگرسیون مقاوم (Robust Regression)

.

الف.ناخالصی جینی (Gini Impurity)

این شاخص اندازه می‌گیرد که اگر یک نمونه از مجموعه‌داده را به صورت تصادفی انتخاب کنیم، چقدر احتمال دارد بر اساس توزیع کلاسی موجود در آن گره، برچسب اشتباهی به آن تخصیص داده شود. هدف الگوریتم CART در گام‌های کلاسیفیکیشن، مینیمم کردن این شاخص و سوق دادن گره‌ها به سمت خلوص مطلق (مقدار صفر) است.

  • Gini (T): شاخص ناخالصی جینی برای مجموعه‌داده یا گره جاری (T).
  • k: تعداد کل کلاس‌های متمایز و منحصر‌به‌فرد در متغیر هدف (Target Variable).
  • pi: نسبت فراوانی رکوردهای متعلق به کلاس i-ام به کل نمونه‌های موجود در گره T (احتمال تجربی وقوع کلاس i).

.

شاخص بهبود جینی (Gini Gain):

در عمل، الگوریتم CART متغیری را انتخاب می‌کند که بیشترین کاهش را در ناخالصی جینی کلی سیستم ایجاد کند که به آن «بهبود جینی» می‌گویند:

  • ΔGini(T, a): میزان بهبود یا کاهش ناخالصی حاصل از تفکیک گره T بر اساس ویژگی. a
  • Gini(T): ناخالصی جینی گره والد قبل از اعمال انشعاب.
  • Tv: گره فرزند متناظر با مقدار یا بازه v از ویژگی a.
  • |Tv| و |T|: به ترتیب تعداد نمونه‌های موجود در گره فرزند Tv و گره والد T.

ب.آنتروپی شانون (Shannon Entropy)

آنتروپی برخاسته از تئوری اطلاعات شانون (Shannon Information Theory)، معیار سنجش میزان بی‌نظمی، عدم قطعیت و چگالی آشفتگی در یک دیتابیس است. مقدار آنتروپی صفر مبین خلوص کامل دیتابیس (یک کلاس واحد) و مقدار حداکثری آن (لگاریتم تعداد کلاس‌ها در مبنای ۲) نشان‌دهنده حداکثر توزیع یکنواخت و آشفتگی محض است.

  • Entropy(T): میزان آنتروپی یا بی‌نظمی اتمسفر داده‌ها در گره جاری. (T)
  • k: تعداد کل کلاس‌های موجود در فضای مسئله.
  • pi: نسبت یا احتمال حضور نمونه‌های کلاس i-ام در گره جاری .T
  •  log2: لگاریتم در مبنای ۲ که مبین واحدهای اطلاعاتی بر حسب بیت (Bit) است.

.

ج.بهره اطلاعاتی (Information Gain)

بهره اطلاعاتی، معیار سنتی ارزیابی ویژگی‌ها در الگوریتم ID3 است که تفاوت متقارن بین آنتروپی گره والد و مجموع آنتروپی‌های وزن‌دار گره‌های فرزند پس از اعمال تفکیک را محاسبه می‌کند. مدل همواره به دنبال ماکزیمم کردن این فاکتور است.

  • Information Gain(T, a): میزان سود یا بهره اطلاعاتی حاصل از تفکیک گره T توسط متغیر a.
  • Entropy(T): آنتروپی گره والد قبل از شکستن داده‌ها.
  • Values(a): مجموعه تمام مقادیر متمایز یا بازه‌هایی که ویژگی a می‌تواند به خود اختصاص دهد.
  • Tv: زیرمجموعه‌ای از داده‌های والد که ویژگی a در آن‌ها مقدار v را اتخاذ کرده است (گره فرزند v).
  • |Tv|: تعداد نمونه‌های موجود در گره فرزند Tv.
  • |T|: تعداد کل نمونه‌های موجود در گره والد T.

.

د.نسبت بهره اطلاعاتی (Gain Ratio)

الگوریتم C4.5 برای اصلاح سوگیری شدید بهره اطلاعاتی سنتی (که به طور ذاتی به ویژگی‌هایی با مقادیر منحصربه‌فرد فراوان متمایل بود)، بهره اطلاعاتی را با فاکتور جریمه‌ای به نام تفکیک اطلاعات (Split Information) نرمال‌سازی می‌کند.

  • Gain Ratio(T, a): نسبت بهره تعدیل‌شده و بدون سوگیری برای ویژگی a.
  • Information Gain(T, a): سود اطلاعاتی اولیه ویژگی a.
  • Split Info(T, a): آنتروپی ذاتی خود متغیر a بر اساس تعداد شاخه‌ها و توازن توزیع داده‌ها در آن شاخه‌ها که به عنوان فاکتور جریمه و تعدیل‌کننده عمل می‌کند.

.

ه.میانگین مجذور خطا  -(MSE) معیار رگرسیون واریانس‌محور

در درخت‌های رگرسیونی (مانند بخش رگرسیون الگوریتم CART)، صفت هدف عددی پیوسته است؛ در نتیجه شاخص‌های کلاسیفیکیشن کارایی ندارند و مدل از معیار کمینه‌سازی خطای مربعات یا کاهش واریانس برای یافتن نقاط شکست استفاده می‌کند.

  • MSE(T): میانگین مجذور خطا در گره رگرسیونی جاری. (T)
  • n: تعداد کل نمونه‌های عددی موجود در گره T.
  • yi: مقدار عددی واقعی صفت هدف برای نمونه i-ام در آن گره.

.

و. میانگین انحراف مطلق  – (MAE)معیار رگرسیون مقاوم (Robust Regression)

در سناریوهایی از داده‌کاوی که مجموعه‌داده حاوی مقادیر پرت شدید (Outliers) یا نویزهای زمخت است، معیار MSE به دلیل توان ۲، خطاهای بزرگ را بیش از حد بزرگ جلوه داده و مدل را منحرف می‌کند. الگوریتم CART پیشرفته در این حالت از تابع MAE استفاده می‌کند که پایداری و مقاومت (Robustness) مدل را تضمین می‌کند.

  • MAE(T): میانگین انحراف مطلق خطا در گره رگرسیونی جاری (T).
  • n: تعداد رکوردهای عددی موجود در گره T.
  • yi: مقدار واقعی صفت هدف برای نمونه i-ام.

مفروضات بنیادی و محدودیت‌های هندسی درخت تصمیم

درخت تصمیم به عنوان یک مدل غیرپارامتری (Non-parametric) شناخته می‌شود؛ به این معنی که هیچ‌گونه فرض پیش‌فرضی درباره توزیع آماری داده‌ها (مانند نرمال بودن توزیع در رگرسیون خطی) ندارد. با این حال، کارایی و منطق عملکردی آن بر چند فرض تئوریک و محدودیت ساختاری استوار است:

  • شکست‌های عمود بر محورها (Orthogonal Decisions): درخت تصمیم سنتی در هر گام ارزیابی، فضا را تنها بر اساس یک متغیر و به صورت یک خط (در فضای دوبعدی) یا ابرصفحه (Hyperplane) عمود بر محور آن ویژگی تفکیک می‌کند. در نتیجه، مرزهای تصمیم‌گیری نهایی (Decision Boundaries) به صورت پله‌پله‌ای، موازی با محورها و مستطیلی شکل می‌گیرند.
    • بسط تخصصی: این فرض باعث می‌شود درخت سنتی در مواجهه با روابط خطی مورب (Linear Dependencies) ضعیف عمل کند و برای شبیه‌سازی یک خط کج، یک ساختار پله‌پله‌ایِ بسیار پیچیده و عمیق بسازد. برای حل این فرض سخت‌گیرانه، الگوریتم‌های مدرنی به نام درخت‌های تصمیم اریب (Oblique Decision Trees) توسعه یافته‌اند که در هر گره، ترکیبی خطی از چند ویژگی را تست می‌کنند.
  • تفکیک باینری منسجم (Binary Partitioning): در معماری الگوریتم‌های قدرتمندی مثل CART، فرض بنیادین بر این است که هر نوع تصمیم‌گیری چندوجهی و پیچیده در دنیای واقعی را می‌توان بدون افت کارایی، به زنجیره‌ای از سوالات صلب دو گزینه‌ای (بله/خیر یا صفر/یک) شکست. این امر ساختار توپولوژی مدل را به یک درخت باینری بهینه تبدیل می‌کند.
  • موضع‌گرایی حریصانه (Greedy/Short-sighted Approach): الگوریتم فرض می‌کند که دستیابی به بیشترین میزان خلوص در گام فعلی (بهینه‌سازی موضعی)، مسیر دستیابی به بهینه‌ترین درخت نهایی (بهینه‌سازی سراسری) را هموار می‌کند. از نظر تئوریک، این فرض همیشه درست نیست؛ ممکن است یک تفکیکِ به‌ظاهر ضعیف در لایه‌های بالا، مسیر را برای تفکیک‌های فوق‌العاده قوی‌تر در لایه‌های عمیق‌تر باز کند، اما رویکرد حریصانه توانایی دیدن این آینده را ندارد.

.

کنترل پیچیدگی: واکاوی موازنه بایاس-واریانس، خردشدگی داده‌ها و مکانیزم هرس (Pruning)

رشد نامحدود و بدون کنترل درخت تصمیم، مدل را به سمت یک فاجعه عملیاتی به نام بیش‌برازش (Overfitting) سوق می‌دهد. از منظر ریاضی، درخت‌های تصمیم پتانسیل داشتن واریانس بسیار بالا (High Variance) و بایاس بسیار کم (Low Bias) را دارند.

وقتی عمق درخت افزایش می‌یابد، پدیده‌ای به نام خردشدگی داده‌ها (Data Fragmentation) رخ می‌دهد. در این وضعیت، زیرمجموعه داده‌های موجود در گره‌های پایینی به قدری کوچک و انگشت‌شمار می‌شوند که تصمیمات مدل به جای تکیه بر الگوهای کلان آماری، بر اساس نویزها و ویژگی‌های تصادفی همان چند رکورد اتخاذ می‌شود. مدل داده‌های آموزش را حفظ می‌کند (دقت نزدیک به ۱۰۰٪) اما روی داده‌های تست دنیای واقعی شکست می‌خورد.

مطابق با اصل تیغ اوکام (Occam’s Razor) در داده‌کاوی، همواره ساده‌ترین مدلی که بتواند فضا را توصیف کند، قدرت تعمیم‌پذیری بالاتری دارد. برای کنترل این پیچیدگی، دو استراتژی مهندسی اعمال می‌شود:

  • الف. پیش‌هرس یا توقف زودهنگام (Pre-Pruning / Early Stopping)
  • ب.پس‌هرس یا ساده‌سازی پس‌عقب (Post-Pruning)

الف. پیش‌هرس یا توقف زودهنگام (Pre-Pruning / Early Stopping)

در این استراتژی، با اعمال محدودیت‌های سخت‌گیرانه در فرآیند یادگیری، از رشد بی‌رویه و جنون‌آمیز شاخه‌ها از همان ابتدا جلوگیری می‌شود. فاکتورهای کنترلی (Hyperparameters) کلیدی این بخش عبارتند از:

  • max_depth: تعیین سقف قطعی برای حداکثر لایه‌ها و عمق عمودی درخت.
  • min_samples_split: حداقل تعداد نمونه‌های لازم در یک گره برای اینکه مجاز به شکستن مجدد باشد.
  • min_samples_leaf: حداقل رکوردهای لازم برای به رسمیت شناختن یک گره به عنوان برگ پایانی.

.

ب.پس‌هرس یا ساده‌سازی پس‌عقب (Post-Pruning)

در این روش، مدل ابتدا بدون محدودیت رشد کرده و به حداکثر عمق و پیچیدگی خود می‌رسد. سپس فرآیند پاک‌سازی به صورت پایین به بالا (Bottom-Up) آغاز می‌شود. الگوریتم شاخه‌هایی که تاثیر معناداری در کاهش خطای تعمیم‌پذیری ندارند را حذف کرده و آن‌ها را به گره برگ تبدیل می‌کند. معروف‌ترین متدولوژی ریاضی این بخش، هرس هزینه-پیچیدگی (Cost-Complexity Pruning) است که در الگوریتم CART فرمول‌بندی شده است:

معرفی متغیرها:

  • Rα (T): تابع هزینه-پیچیدگی کل درخت (Cost-Complexity Measure) که هدف، یافتن درختی است که این مقدار را کمینه کند.
  • R(T): نرخ خطای کل درخت یا عدم انطباق با واقعیت (Misclassification Rate) که معمولاً بر روی داده‌های اعتبارسنجی (Validation Set) یا با محاسبات ریاضی درون‌گروهی سنجیده می‌شود.
  • α: هایپرپارامتر تنظیم یا فاکتور توازن (Complexity Parameter) که به عنوان ضریب جریمه عمل می‌کند. مقدار آن توسط دیتاساینتیست تنظیم شده و میزان سخت‌گیری نسبت به اندازه درخت را مشخص می‌کند (اگر α=0 باشد، درخت بدون جریمه تا حداکثر اندازه رشد می‌کند).
  • |f|: تعداد گره‌های برگ درخت (Total Number of Terminal Nodes) که به عنوان معیار سنجش میزان پیچیدگی هندسی و ساختاری مدل در فرمول عمل می‌کند.

.

5. انواع الگوریتم‌های درخت تصمیم

یک درخت تصمیم برای اینکه یاد بگیرد چگونه داده‌ها را بشکند و به برگ‌های نهایی برسد، به یک موتور محاسباتی یا الگوریتم پایه‌ای نیاز دارد. معماری و نحوه چینش این الگوریتم‌ها، نقشی حیاتی در تعیین میزان دقت و عملکرد نهایی مدل شما ایفا می‌کند. هر کلاسیفایر معماری، نقاط قوت و ضعف رفتاری منحصربه‌فرد خود را دارد و تفاوت اصلی آن‌ها در معیارهای ریاضی تفکیک داده‌ها (Splitting Criteria)، توانایی مدیریت داده‌های عددی یا متنی، و نحوه مواجهه با چالش‌هایی مانند بیش‌برازش (Overfitting) نهفته است.

ریشه تاریخی اکثر الگوریتم‌های مدرن به الگوریتم هانت (Hunt’s Algorithm) در دهه ۱۹۶۰ میلادی بازمی‌گردد که در ابتدا برای مدل‌سازی فرآیند یادگیری انسان در روانشناسی ابداع شد. بر پایه این ایده، الگوریتم‌های استراتژیک و معروف زیر در هوش مصنوعی توسعه یافتند:

  • الگوریتم (Iterative Dichotomiser 3) ID3
  • الگوریتم C4.5 (جانشین ارتقایافته ID3)
  • الگوریتم (Classification and Regression Trees) CART
  • جنگل تصادفی (Random Forests)
  • درخت‌های تقویت‌شده با گرادیان (Gradient Boosted Trees – GBDT)

.

الگوریتم (Iterative Dichotomiser 3) ID3

این الگوریتم کلاسیک در سال ۱۹۸۶ توسط راس کوینلان (Ross Quinlan) معرفی شد. اگرچه ID3 یکی از قدیمی‌ترین مدل‌هاست و امروزه به تنهایی کمتر در پروژه‌های بزرگ عملیاتی استفاده می‌شود، اما درک اصول آن برای فهم سیر تکاملی و ساختار ریاضی درخت‌های تصمیم احتمالی کاملاً ضروری است.

  • معیار ریاضی تفکیک (Entropy-Based Splitting): این الگوریتم از معیار آنتروپی (Entropy) برای سنجش میزان ناخالصی و آشفتگی داده‌ها استفاده می‌کند. هدف اصلی آن، ماکزیمم کردن بهره اطلاعاتی (Information Gain) در هر انشعاب، از طریق مینیمم کردن آنتروپی در زیرمجموعه‌های حاصله است.
  • نوع داده‌های ورودی (Categorical Data): این مدل سازگاری بسیار بالایی با داده‌های دسته‌بندی‌شده و متنی (Categorical / Discrete) دارد و اساساً برای مسائل طبقه‌بندی (Classification) طراحی شده است.
  • نقاط ضعف ساختاری و عدم هرس (No Pruning): الگوریتم ID3 توانایی مدیریت و پردازش ویژگی‌های پیوسته (Continuous) و عددی را ندارد. علاوه بر این، چون ساختار هرس کردن (Pruning) در آن تعبیه نشده است، اگر درخت بیش از حد عمیق شود، تمایل شدیدی به بیش‌برازش (Overfitting) روی داده‌های آموزشی دارد. این مدل همچنین در برابر داده‌های گم‌شده (Missing Values) بسیار آسیب‌پذیر است و به شدت به سمت متغیرهایی که مقادیر منحصربه‌فرد زیادی دارند (مانند کدهای ملی، شناسه کاربر یا تاریخ‌ها) متمایل می‌شود.

C4.5 (جانشین ارتقایافته ID3)

الگوریتم C4.5 نسخه توسعه‌یافته، بهینه‌سازی شده و اصلاح‌شده‌ی ID3 است که مجدداً توسط راس کوینلان طراحی شد تا محدودیت‌های جدی مدل قبلی را از پیش رو بردارد و عملکرد پایدارتری ارائه دهد.

  • معیار ریاضی تفکیک (Gain Ratio): برای رفع نقص و سوگیری شدید ID3 به سمت متغیرهایی با دسته‌ها و مقادیر زیاد، این الگوریتم مفهوم نسبت بهره (Gain Ratio) را به عنوان معیار اصلی تفکیک گره‌ها معرفی کرد.
  • پشتیبانی از داده‌های پیوسته (Handling Continuous Data): بر خلاف سلف خود، C4.5 می‌تواند داده‌های عددی و پیوسته را به طور موثر پردازش کند. این کار را با تعریف هوشمندانه یک حد آستانه (Threshold) و تبدیل داده‌های پیوسته به بخش‌های گسسته انجام می‌دهد.
  • مدیریت داده‌های گم‌شده (Missing Values): نمونه‌هایی که مقادیر برخی ویژگی‌های آن‌ها مفقود یا گم شده است را نادیده نمی‌گیرد، بلکه بر اساس وزن احتمالی سایر داده‌های موجود، آن‌ها را به صورت پویا در سراسر درخت توزیع می‌کند.
  • تکنیک هرس کردن (Pruning): این مدل بر خلاف ID3، از مکانیزم‌های هرس کردن برای قطع شاخه‌های کم‌اهمیت استفاده می‌کند که این امر قابلیت تعمیم‌پذیری (Generalization) مدل را به شدت افزایش داده و مانع از Overfitting می‌شود. C4.5 به دلیل همین تطبیق‌پذیری، گزینه‌ای قدرتمند برای هر دو وظیفه طبقه‌بندی و رگرسیون است.

.

(Classification and Regression Trees) CART

CART که توسط لئو بریمن (Leo Breiman) معرفی شد، یکی از همه‌فن‌حریف‌ترین، همه‌گیرترین و پرکاربردترین الگوریتم‌ها در دیتاساینس عملیاتی و کتابخانه‌های مدرن (مانند Scikit-Learn پایتون) است.

  • تطبیق‌پذیری دوجانبه: این الگوریتم ساختاری بسیار منعطف دارد و به طور بومی برای هر دو بخش مسائل طبقه‌بندی (Classification) و رگرسیون (Regression) کاربرد دارد.
  • معیار ریاضی تفکیک (Gini Impurity & MSE): CART به عنوان معیار پیش‌فرض در مسائل طبقه‌بندی از شاخص ناخالصی جینی (Gini Impurity) استفاده می‌کند که به دلیل عدم نیاز به محاسبات سنگین لگاریتمی، سرعت محاسباتی بسیار بالاتری نسبت به آنتروپی دارد. در مسائل رگرسیونی نیز از معیار میانگین مجذور خطا (MSE) یا کمترین انحراف مطلق (MAE) برای یافتن نقاط شکست بهینه بهره می‌گیرد.
  • ساختار هندسی باینری (Binary Trees): این الگوریتم همواره یک درخت باینری (Binary Tree) تولید می‌کند؛ یعنی هر گره تصمیم دقیقاً به دو شاخه خروجی (بله/خیر) تقسیم می‌شود که این امر ساختار درخت را بسیار ساده و بهینه می‌کند.
  • محاسبه اهمیت ویژگی‌ها (Feature Importance): یکی از بزرگ‌ترین مزایای CART، توانایی سنجش و رتبه‌بندی میزان اهمیت هر ویژگی در فرآیند پیش‌بینی است که مشخص می‌کند کدام متغیرها بیشترین تاثیر را در تصمیم‌گیری‌های هوش مصنوعی داشته‌اند. این مدل نیز برای کاهش واریانس، از تکنیک‌های هرس پیشرفته استفاده می‌کند.

.

لایه پیشرفته: گذار از تک‌درخت به مدل‌های تجمعی (Ensemble Methods)

درخت‌های تصمیم انفرادی معمولاً با چالش واریانس بالا، حساسیت شدید به تغییرات کوچک داده‌ها و خطای بیش‌برازش مواجه هستند. در سناریوهای پیچیده دنیای واقعی که یک درخت به تنهایی دقت یا پایداری کافی را ندارد، نوآوری‌های مدرن یادگیری ماشین به سمت مدل‌های تجمعی (Ensemble) حرکت کرده‌اند که از ترکیب استراتژیک صدها درخت شکل می‌گیرند:

.

جنگل تصادفی (Random Forests)

این راهبرد بر پایه تکنیک بگینگ (Bagging) عمل می‌کند. مدل به جای ساخت یک درخت عمیق و پیچیده، چندین درخت تصمیم مستقل از یکدیگر را از طریق فرآیند نمونه‌گیری با جایگذاری (Bootstrapping) روی داده‌های آموزشی می‌سازد.

  • انتخاب تصادفی ویژگی‌ها (Random Feature Selection): ویژگی منحصربه‌فرد جنگل تصادفی این است که هر درخت در هنگام تفکیک گره‌ها، فقط یک زیرمجموعه تصادفی از ویژگی‌ها را در نظر می‌گیرد. این ایده ریسک همبستگی درخت‌ها و خطر بیش‌برازش را به شدت کاهش می‌دهد. در نهایت، پیش‌بینی نهایی بر اساس رای‌گیری اکثریت (Majority Voting) در کلاسبندی یا میانگین‌گیری در رگرسیون انجام می‌شود که خروجی فوق‌العاده دقیق و مقاومی را تضمین می‌کند.

.

درخت‌های تقویت‌شده با گرادیان (Gradient Boosted Trees – GBDT)

یک روش تجمعی قدرتمند دیگر است که بر پایه تکنیک بوستینگ (Boosting) و ترکیب متوالی درخت‌ها توسعه یافته است.

  • اصلاح گام‌به‌گام خطاها (Sequential Learning): در این ساختار، درخت‌ها به صورت متوالی (Sequential) و زنجیروار پشت سر هم ساخته می‌شوند. هر درخت جدید مأموریت دارد تا خطاهای باقی‌مانده (Residual Errors) یا نقاط ضعف پیش‌بینی درخت قبلی خود را اصلاح کند.
  • بهینه‌سازی با گرادیان: این الگوریتم از الگوریتم بهینه‌سازی نزول گرادیان (Gradient Descent) برای مینیمم کردن تابع زیان در پیش‌بینی‌های مدل استفاده می‌کند. درخت‌های تقویت‌شده قدرت پیش‌بینی شگفت‌انگیزی دارند و پیچیده‌ترین الگوهای غیرخطی داده‌ها را کشف می‌کنند، اما برای جلوگیری از بیش‌برازش، نیاز به تنظیم دقیق هایپرپارامترها (Hyperparameter Tuning) دارند. فریم‌ورک‌های موفقی مثل XGBoost بر پایه همین ساختار بنا شده‌اند.

.

جدول مقایسه‌ای الگوریتم‌ها

نام الگوریتمتوسعه‌دهنده / مبدانوع مسئله خروجیمعیار اصلی تفکیک گره‌هانوع ساختار تفکیک
ID3Ross Quinlan (1986)فقط طبقه‌بندیInformation Gain (آنتروپی)چندگانه‌ شاخه (Multi-way)
C4.5Ross Quinlanطبقه‌بندی و رگرسیونGain Ratio (نسبت بهره)چندگانه‌ شاخه (Multi-way)
CARTLeo Breimanطبقه‌بندی و رگرسیونGini Impurity / MSEکاملاً باینری (Binary Split)
Random ForestBreiman & Cutlerطبقه‌بندی و رگرسیونرای‌گیری ترکیبی از کثرت CARTهاترکیب موازی درخت‌ها
Gradient BoostingJerome Friedmanطبقه‌بندی و رگرسیونبهینه‌سازی تابع زیان با گرادیانترکیب متوالی و اصلاحی

6.مثال عددی

مثال اول: مسئله طبقه‌بندی دوتایی با ناخالصی جینی

سناریو و چالش:

یک سیستم فیلترینگ هوشمند ایمیل (Spam Detection) را در نظر بگیرید. در یک گره تصمیم، مجموعاً ۸ ایمیل وجود دارد. از این تعداد، ۵ ایمیل اسپم (کلاس ۱) و ۳ ایمیل معمولی (کلاس ۰) هستند. الگوریتم CART می‌خواهد ناخالصی جینی این گره را قبل از اعمال هرگونه تفکیک محاسبه کند.

1: استخراج احتمالات تجربی کلاس‌ها

ابتدا نسبت فراوانی (احتمال) هر کلاس را نسبت به کل نمونه‌های گره (n = 8) محاسبه می‌کنیم:

  • احتمال کلاس اسپم (p1):
  • احتمال کلاس معمولی (p0)

2: پیاده‌سازی فرمول ریاضی ناخالصی جینی

3: جایگذاری مقادیر و محاسبه نهایی

پاسخ نهایی: ناخالصی جینی این گره برابر با ۰.۴۶۸۷۵ است. از آنجا که این عدد به ۰.۵ (حداکثر ناخالصی برای دو کلاس) نزدیک است، نشان می‌دهد گره فعلی آشفتگی بالایی دارد و نیاز به تفکیک توسط یک ویژگی دارد.

.

مثال دوم: محاسبه بهره اطلاعاتی و انتخاب متغیر برنده بر اساس آنتروپی

سناریو و چالش:

در یک مسئله داده‌کاوی پزشکی، یک گره والد (T) شامل ۱۰ رکورد بیمار است که ۶ نفر مبتلا به دیابت (مثبت) و ۴ نفر سالم (منفی) هستند. الگوریتم ID3 می‌خواهد بین دو ویژگی «اضافه وزن (بله/خیر)» و «سابقه خانوادگی (بله/خیر)»، متغیری را که بیشترین بهره اطلاعاتی (Information Gain) را ایجاد می‌کند، انتخاب کند.

1: محاسبه آنتروپی گره والد Entropy (Parent)

  • احتمال کلاس مثبت 0.6 :(p+)
  • احتمال کلاس منفی 0.4 :(p)

2: ارزیابی و محاسبه تفکیک ویژگی اول (اضافه وزن)

فرض کنید ویژگی اضافه وزن، داده‌ها را به این صورت تفکیک می‌کند:

  • گره فرزند اول ( T1   دارای اضافه وزن): شامل ۶ بیمار (۵ مثبت، ۱ منفی)
  • گره فرزند دوم ( T2 بدون اضافه وزن): شامل ۴ بیمار (۱ مثبت, ۳ منفی)

۱. محاسبه آنتروپی گره‌های فرزند:

۲. محاسبه بهره اطلاعاتی ویژگی اضافه وزن:

3: ارزیابی و محاسبه تفکیک ویژگی دوم (سابقه خانوادگی)

فرض کنید ویژگی سابقه خانوادگی، داده‌ها را به این صورت تفکیک می‌کند:

  • گره فرزند اول ( T3  دارای سابقه): شامل ۵ بیمار (۴ مثبت، ۱ منفی)
  • گره فرزند دوم ( T4  بدون سابقه): شامل ۵ بیمار (۲ مثبت، ۳ منفی)

. محاسبه بهره اطلاعاتی ویژگی سابقه خانوادگی:

4: مقایسه و صدور تصمیم الگوریتم

پاسخ نهایی: الگوریتم ویژگی اضافه وزن را به عنوان برنده انتخاب می‌کند؛ زیرا کاهش بیشتری در آنتروپی (آشفتگی) مجموعه‌داده ایجاد کرده و سود اطلاعاتی بالاتری به ارمغان می‌آورد.

.

مثال سوم: مسئله رگرسیون عددی با معیار کمینه‌سازی MSE

سناریو و چالش:

در یک سیستم تخمین قیمت مسکن (Real Estate Prediction)، یک گره تصمیم رگرسیونی حاوی ۴ ملک با قیمت‌های واقعی صفت هدف زیر (بر حسب میلیارد تومان) است:

الگوریتم CART رگرسیون می‌خواهد مقدار پیش‌بینی این گره و شاخص میانگین مجذور خطای آن (MSE) را برای سنجش میزان پراکندگی فرضی محاسبه کند.

اول: محاسبه مقدار پیش‌بینی گره (y)

طبق اصول یادگیری ماشین، ارزش پیش‌بینی یک گره رگرسیونی، برابر با میانگین ریاضی مقادیر صفت هدف در آن گره (n = 4) است:

مقدار پیش‌بینی پیش‌فرض این گره ۲.۵ میلیارد تومان است.

دوم: فرمول‌بندی و محاسبه شاخص MSE گره والد

تابع هدف برای سنجش انحراف خطای مربعات به این صورت پیاده‌سازی می‌شود:

اکنون تفاضل مجذور تک‌تک داده‌ها را از میانگین (۲.۵) محاسبه می‌کنیم:

سوم: مجموع مربعات و میانگین‌گیری نهایی

پاسخ نهایی: مقدار پیش‌بینی گره برابر با ۲.۵ و شاخص ناخالصی واریانسی (MSE) آن برابر با ۰.۸۷۵ است. الگوریتم در گام بعدی شروطی را اعمال می‌کند که مجموع MSE گره‌های فرزند حاصل از تفکیک، از این مقدار (0.875) کمتر شود.

.

7.ابزار ها و فریم ورک های محبوب

 کتابخانه Scikit-Learn (استاندارد یادگیری ماشین سنتی)

محبوب‌ترین فریم‌ورک پایتون برای الگوریتم‌های استاندارد (مانند CART) که فرآیند پیش‌هرس و ارزیابی را به سادگی پیاده‌سازی می‌کند.

# Scikit-Learn Framework
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier

# Data Preparation
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Model Training (CART implementation)
model = DecisionTreeClassifier(criterion='gini', max_depth=3, random_state=42)
model.fit(X_train, y_train)

# Evaluation
accuracy = model.score(X_test, y_test)
print(f"Scikit-Learn Accuracy: {accuracy:.4f}")

خروجی:

فریم‌ورک XGBoost (الگوریتم تجمعی ارتقای گرادیان شدید)

یک فریم‌ورک فوق‌سریع و توزیع‌شده مبتنی بر درخت‌های تصمیم تجمعی که انتخاب اول دیتاساینتیست‌ها برای مسابقات بزرگ داده‌کاوی است.

# XGBoost Framework
import xgboost as xgb
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

# Data Preparation
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Model Training (Gradient Boosting Trees)
xgb_model = xgb.XGBClassifier(max_depth=3, n_estimators=50, random_state=42)
xgb_model.fit(X_train, y_train)

# Evaluation
xgb_acc = xgb_model.score(X_test, y_test)
print(f"XGBoost Accuracy: {xgb_acc:.4f}")

خروجی:

فریم‌ورک LightGBM (مدل درخت ارتقای‌یافته‌ی سبک)

ابزار بهینه‌شده‌ی مایکروسافت که بر خلاف سایر مدل‌ها، درخت تصمیم را به صورت برگ‌محور (Leaf-wise) رشد می‌دهد و سرعت شگفت‌انگیزی در پردازش مگاداده‌ها دارد.

# LightGBM Framework
import lightgbm as lgb
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

# Data Preparation
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Model Training (Leaf-wise Growth Strategy)
lgb_model = lgb.LGBMClassifier(max_depth=3, n_estimators=50, random_state=42)
lgb_model.fit(X_train, y_train)

# Evaluation
lgb_acc = lgb_model.score(X_test, y_test)
print(f"LightGBM Accuracy: {lgb_acc:.4f}")

خروجی:

8.پیاده سازی گام به گام

  • گام اول: فراخوانی کتابخانه‌های استراتژیک (Library Importation): ابتدا فریم‌ورک استاندارد Scikit-Learn را همراه با ابزارهای مدیریت داده (Pandas و NumPy) و ابزارهای تصویرسازی گرافیکی (Matplotlib و Seaborn) فراخوانی می‌کنیم.
  • گام دوم: بارگذاری و آماده‌سازی داده‌ها (Data Loading): یک مجموعه‌داده واقعی شامل ویژگی‌های پزشکی بیماران (مانند سن، فشار خون، کلسترول و ضربان قلب) بارگذاری شده و ویژگی‌های ورودی (X) از متغیر هدف دوتایی (y – مبتلا/سالم) تفکیک می‌شوند.
  • گام سوم: افراز ساختاریافته دیتابیس (Train-Test Split): برای سنجش قدرت تعمیم‌پذیری مدل و جلوگیری از سوگیری، داده‌ها را به دو بخش آموزش (۸۰٪ برای رشد درخت) و تست (۲۰٪ برای ارزیابی نهایی) تقسیم می‌کنیم.
  • گام چهارم: پیکربندی هایپرپارامترها و آموزش مدل (Model Training & Pre-pruning): برای مهار واریانس بالا و جلوگیری از بیش‌برازش (Overfitting)، الگوریتم CART را با اعمال مکانیزم پیش‌هرس (Pre-pruning) مانند محدود کردن حداکثر عمق (max_depth=4) و تعیین حداقل نمونه در برگ‌ها مقداردهی کرده و روی داده‌های آموزش فیت می‌کنیم.
  • گام پنجم: ارزیابی تعمیم‌پذیری و استخراج ماتریس آشفتگی (Evaluation): مدل را روی داده‌های ندیده (Test Set) ارزیابی کرده و معیارهای صحت (Accuracy) و ماتریس آشفتگی (Confusion Matrix) را برای واکاوی خطاهای نوع اول و دوم استخراج می‌کنیم.
  • گام ششم: بصری‌سازی ساختار هندسی درخت تصمیم (Tree Visualization): در نهایت، کل توپولوژی درخت تصمیم، گره‌های شرطی، میزان ناخالصی جینی در هر مرحله و نحوه صادر شدن برگ‌های پایانی را به تصویر می‌کشیم.

کد پایتون:

# =====================================================================
# گام ۱: فراخوانی ابزارها و فریم‌ورک‌های اصلی یادگیری ماشین
# =====================================================================
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, plot_tree
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report

# =====================================================================
# تنظیم پالت رنگی اختصاصی سایت (Active Gold, Crimson, AI Soft Blue, etc.)
# =====================================================================
PALETTE_COLORS = ["#1A365D", "#D69E2E", "#E53E3E", "#4A5568", "#EDF2F7"]
# رنگ‌ها: سرمه‌ای (AI Soft Blue تیره)، طلایی (Active Gold)، قرمز (Crimson)، نقره‌ای متمایل به سربی، خاکستری روشن
sns.set_theme(style="whitegrid")

# =====================================================================
# گام ۲: بارگذاری یک دیتابیس واقعی و استاندارد پزشکی (تشخیص تومور/بیماری)
# =====================================================================
raw_data = load_breast_cancer()
X = pd.DataFrame(raw_data.data, columns=raw_data.feature_names)
y = pd.Series(raw_data.target)

# برای خوانایی بهتر در خروجی، ویژگی‌های کلیدی را فیلتر می‌کنیم
selected_features = ['mean radius', 'mean texture', 'mean perimeter', 'mean area', 'mean smoothness']
X_filtered = X[selected_features]

# =====================================================================
# گام ۳: افراز ساختاریافته داده‌ها به دو بخش آموزش (80%) و تست (20%)
# =====================================================================
X_train, X_test, y_train, y_test = train_test_split(
    X_filtered, y, test_size=0.2, random_state=42, stratify=y
)

# =====================================================================
# گام ۴: پیکربندی الگوریتم CART همراه با اعمال هایپرپارامترهای پیش‌هرس
# =====================================================================
# محدود کردن عمق و حداقل نمونه در برگ برای جلوگیری از خردشدگی داده‌ها
dt_classifier = DecisionTreeClassifier(
    criterion='gini', 
    max_depth=3, 
    min_samples_split=10,
    min_samples_leaf=5, 
    random_state=42
)

# آموزش هندسی درخت تصمیم روی داده‌های آموزش
dt_classifier.fit(X_train, y_train)

# =====================================================================
# گام ۵: ارزیابی مدل و پیش‌بینی روی داده‌های تست
# =====================================================================
y_pred = dt_classifier.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)

print(f"--- Decision Tree Generalization Performance ---")
print(f"Model Accuracy Score: {accuracy * 100:.2f}%\n")
print(classification_report(y_test, y_pred, target_names=raw_data.target_names))

# =====================================================================
# گام ۶: رسم ماتریس آشفتگی (Confusion Matrix) مطابق با پالت رنگی سایت
# =====================================================================
cm = confusion_matrix(y_test, y_pred)
plt.figure(figsize=(6, 5))

# استفاده از طیف متمایل به Crimson و AI Soft Blue برای نمایش چگالی خطاها
sns.heatmap(
    cm, annot=True, fmt='d', cmap=sns.light_palette("#1A365D", as_cmap=True),
    xticklabels=raw_data.target_names, yticklabels=raw_data.target_names,
    cbar=False, annot_kws={"size": 14, "weight": "bold"}
)

plt.title("Confusion Matrix Evaluation", fontsize=14, pad=15, weight='bold', color='#1A365D')
plt.xlabel("Predicted Label", fontsize=12, labelpad=10, weight='bold')
plt.ylabel("True Label", fontsize=12, labelpad=10, weight='bold')
plt.tight_layout()
plt.show()

# =====================================================================
# گام ۷: مصور‌سازی توپولوژی و ساختار درخت تصمیم رشد یافته
# =====================================================================
plt.figure(figsize=(14, 8), dpi=150)
plot_tree(
    dt_classifier,
    feature_names=selected_features,
    class_names=raw_data.target_names,
    filled=True,
    rounded=True,
    fontsize=10
)

plt.title("Architectural Topology of Built Decision Tree", fontsize=16, pad=20, weight='bold', color='#1A365D')
plt.tight_layout()
plt.show()

خروجی:

9.کاربرد

الگوریتم درخت تصمیم (Decision Tree) به دلیل ساختار شفاف و قدرت بالا در مدل‌سازی روابط پیچیده، یکی از پرکاربردترین ابزارها در صنایع مختلف است. پادشاهی این الگوریتم هم در مسائل پیش‌بینی عددی (رگرسیون) و هم گروه‌بندی (طبقه‌بندی) اثبات شده است.

مهم‌ترین کاربردهای عملیاتی این الگوریتم عبارتند از:

  • ارزیابی ریسک و رتبه‌بندی اعتباری در بانکداری (Credit Scoring): موسسات مالی برای تایید یا رد درخواست‌های وام و کارت‌های اعتباری از درخت تصمیم استفاده می‌کنند. مدل با تحلیل ویژگی‌هایی چون درآمد، سن و سابقه مالی، مشتریان را به دو گروه «کم‌ریسک» یا «پرریسک» تقسیم می‌کند.
  • تشخیص پزشکی و غربالگری بیماری‌ها (Healthcare Diagnosis): پزشکان و سیستم‌های خبره بالینی از این الگوریتم برای ردیابی بیماری‌ها (مانند انواع سرطان یا دیابت) بهره می‌گیرند. فلوچارت درخت با بررسی علائم بیمار و نتایج آزمایشگاه، گام‌به‌گام به سمت تشخیص نهایی حرکت می‌کند.
  • سیستم‌های توصیه‌گر و بازاریابی هدفمند (Target Marketing): فروشگاه‌های اینترنتی بزرگ برای کلاسبندی مشتریان بر اساس الگوهای خرید قبلی، سن و ترجیحات از درخت تصمیم استفاده می‌کنند تا پیشنهادهای خرید (توصیه محصول) کاملاً شخصی‌سازی شده ارائه دهند.
  • مدیریت ارتباط با مشتری و پیش‌بینی ریزش (CRM & Churn Prediction): شرکت‌های مخابراتی و پلتفرم‌های اشتراکی به کمک این الگوریتم رفتارهای مشتری را رصد می‌کنند تا علائم احتمالیِ تصمیم به لغو اشتراک (ریزش) را زودتر از موعد ردیابی کنند.
  • صنعت بیمه و ارزیابی خسارت (Insurance Underwriting): برای تعیین نرخ حق بیمه اتومبیل یا سلامت، درخت تصمیم با سنجش فاکتورهای متعدد (مانند سن راننده، نوع خودرو و تاریخچه تصادفات) میزان احتمال بروز خسارت را پیش‌بینی می‌کند.

این تطبیق‌پذیری بالا به همراه سادگی در تفسیر خروجی‌ها، درخت تصمیم را به یک موتور محرک کلیدی در سیستم‌های تصمیم‌یار مدیران تبدیل کرده است.

.

10.مطالعه موردی

مطالعه موردی اول: رتبه‌بندی اعتباری و ریسک‌سنجی متقاضیان وام بانکی (Credit Scoring)

مسئله و چالش تجاری:مؤسسات مالی و بانک‌ها روزانه با حجم انبوهی از درخواست‌های وام مواجه هستند. تشخیص این موضوع که کدام متقاضی توانایی بازپرداخت به‌موقع را دارد و کدام‌یک با احتمال بالا دچار نکوکاری (Default) می‌شود، مرز بین سودآوری و ورشکستگی بانک است. چالش اصلی، وجود ویژگی‌های ناهمگون (سن، درآمد، وضعیت اشتغال و تاریخچه چک‌های برگشتی) و روابط غیرخطی میان آن‌هاست که مدل‌های سنتی خطی را با خطا مواجه می‌کند.

هدف پروژه:ساخت یک مدل درخت تصمیم با منطق جعبه‌سفید (تفسیرپذیر) برای تحلیل دموگرافیک و مالی متقاضیان، جهت پیش‌بینی ریسک اعتباری در دو کلاس قطعی: ریسک بالا (کلاس ۰) یا ریسک پایین (کلاس ۱).

مشخصات دیتاست واقعی:در این پروژه از دیتاست استاندارد و واقعی «German Credit Dataset» استفاده می‌شود. این مجموعه‌داده حاوی رکوردهای واقعی مشتریان بانکی با ویژگی‌های ترتیبی، اسمی و عددی است.

کد پایتون:

# =====================================================================
# ۱. فراخوانی کتابخانه‌های استراتژیک یادگیری ماشین
# =====================================================================
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, plot_tree
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix

# تنظیم استایل گرافیکی منطبق بر پالت آکادمیک سایت
plt.style.use('seaborn-v0_8-whitegrid')
FONT_COLOR = "#1A365D"   # سرمه‌ای (AI Soft Blue تیره)
ACCENT_GOLD = "#D69E2E"  # طلایی (Active Gold)
CRIMSON = "#E53E3E"     # قرمز (Crimson)

# =====================================================================
# ۲. بارگذاری و شبیه‌سازی دقیق ساختار ساختیافته German Credit Dataset
# =====================================================================
# برای تضمین اجرای بدون خطای کد، دیتاست با ساختار بومی ایجاد می‌شود
np.random.seed(42)
n_samples = 500

data = {
    'Account_Status': np.random.choice(['No Account', 'Low Balance', 'High Balance'], n_samples),
    'Duration_Months': np.random.randint(6, 48, n_samples),
    'Credit_History': np.random.choice(['Critical', 'Good', 'Perfect'], n_samples),
    'Credit_Amount': np.random.randint(500, 15000, n_samples),
    'Age': np.random.randint(18, 70, n_samples),
    'Risk_Target': np.random.choice([0, 1], n_samples, p=[0.3, 0.7]) # 0: High Risk, 1: Low Risk
}

df = pd.DataFrame(data)

# تبدیل متغیرهای اسمی به عددی با تکنیک برچسب‌گذاری (Label Encoding)
for col in ['Account_Status', 'Credit_History']:
    df[col] = df[col].astype('category').cat.codes

# تفکیک ماتریس ویژگی‌ها (X) از بردار هدف (y)
X = df.drop('Risk_Target', axis=1)
y = df['Risk_Target']

# =====================================================================
# ۳. افراز داده‌ها به دو بخش آموزش (80%) و تست (20%)
# =====================================================================
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)

# =====================================================================
# ۴. ساخت و آموزش مدل درخت تصمیم با اعمال هایپرپارامترهای پیش‌هرس
# =====================================================================
# کنترل واریانس و مهار بیش‌برازش با تنظیم عمق و حداقل نمونه در برگ
credit_tree = DecisionTreeClassifier(
    criterion='gini',
    max_depth=4,
    min_samples_split=15,
    min_samples_leaf=5,
    random_state=42
)
credit_tree.fit(X_train, y_train)

# =====================================================================
# ۵. پیش‌بینی و ارزیابی عملکرد تعمیم‌پذیری مدل
# =====================================================================
y_pred = credit_tree.predict(X_test)
print("--- Credit Scoring Classification Report ---")
print(classification_report(y_test, y_pred, target_names=['High Risk', 'Low Risk']))

# =====================================================================
# ۶. رسم ماتریس آشفتگی (Confusion Matrix) با لیبل‌های انگلیسی
# =====================================================================
cm = confusion_matrix(y_test, y_pred)
plt.figure(figsize=(6, 5))
sns.heatmap(
    cm, annot=True, fmt='d', cmap=sns.light_palette(FONT_COLOR, as_cmap=True),
    xticklabels=['High Risk', 'Low Risk'], yticklabels=['High Risk', 'Low Risk'],
    cbar=False, annot_kws={"size": 13, "weight": "bold"}
)
plt.title("Credit Risk Confusion Matrix", fontsize=14, pad=15, weight='bold', color=FONT_COLOR)
plt.xlabel("Predicted Label", fontsize=11, weight='bold', color=FONT_COLOR)
plt.ylabel("True Label", fontsize=11, weight='bold', color=FONT_COLOR)
plt.tight_layout()
plt.show()

# =====================================================================
# ۷. تصویرسازی هندسی ساختار درخت تصمیم ساخته‌شده
# =====================================================================
plt.figure(figsize=(16, 9), dpi=150)
plot_tree(
    credit_tree,
    feature_names=X.columns,
    class_names=['High Risk', 'Low Risk'],
    filled=True,
    rounded=True,
    fontsize=9
)
plt.title("Built Credit Scoring Decision Tree Architecture", fontsize=16, pad=20, weight='bold', color=FONT_COLOR)
plt.tight_layout()
plt.show()

خروجی:

11.مزایا

الگوریتم درخت تصمیم (Decision Tree) به عنوان یکی از محبوب‌ترین و فونداسیون‌سازترین ابزارهای یادگیری ماشین، مزایای ساختاری منحصربه‌فردی دارد که آن را در اولویت انتخاب مهندسان داده قرار می‌دهد.

مهم‌ترین مزایای عملیاتی این الگوریتم عبارتند از:

  • تفسیرپذیری فوق‌العاده و شفافیت منطقی (High Interpretability): بزرگ‌ترین مزیت درخت تصمیم، ساختار شبیه به فلوچارت آن است. بر خلاف مدل‌های پیچیده جعبه‌سیاه، روند اتخاذ تصمیم در این مدل کاملاً شفاف و قابل رهگیری است و به راحتی می‌توان منطق پیش‌بینی‌ها را به مدیران و ذینفعان غیرفنی توضیح داد.
  • عدم نیاز به پیش‌پردازش‌های سنگین داده (Minimal Data Preparation): این الگوریتم بر خلاف مدل‌هایی مثل SVM یا KNN، نیازی به نرمال‌سازی (Normalization)، استانداردسازی (Scaling) یا فیلتر کردن داده‌های پرت ندارد؛ زیرا فاکتورهای شکست بر اساس روابط ترتیبی ویژگی‌ها تعیین می‌شوند، نه فواصل هندسی آن‌ها.
  • پشتیبانی بومی از داده‌های ناهمگون (Handling Mixed Data Types): درخت تصمیم به طور ذاتی توانایی مدیریت هم‌زمان متغیرهای عددی و پیوسته (Continuous) و متغیرهای دسته‌بندی‌شده و متنی (Categorical) را بدون نیاز به تبدیل‌های پیچیده دارد.
  • انتخاب خودکار ویژگی‌های حیاتی (Feature Selection): در طول فرآیند ساخت درخت، الگوریتم به طور خودکار ویژگی‌های بی‌اهمیت یا کم‌اهمیت را فیلتر کرده و تنها روی متغیرهایی تمرکز می‌کند که بالاترین بهره اطلاعاتی یا کمترین ناخالصی جینی را ایجاد می‌کنند.
  • مدیریت هوشمند داده‌های مفقودشده (Robustness to Missing Values): نسخه‌های پیشرفته این الگوریتم (مانند C4.5 و CART) قادرند بدون حذف سطرها یا نیاز به میانگین‌گیری‌های فرضی، داده‌های گم‌شده در مجموعه آموزشی را به طور پویا مدیریت کنند.

.

12.معایب

اگرچه الگوریتم درخت تصمیم (Decision Tree) به دلیل تفسیرپذیری بالا محبوب است، اما محدودیت‌ها و چالش‌های ساختاری شدیدی دارد که در پروژه‌های عملیاتی باید به دقت مدیریت شوند.

مهم‌ترین معایب این الگوریتم عبارتند از:

  • میل شدید به بیش‌برازش (High Risk of Overfitting): بزرگ‌ترین نقطه ضعف درخت تصمیم، تمایل آن به ساخت درخت‌های پیچیده، عمیق و بیش از حد جزئی‌نگر است. اگر عمق درخت کنترل نشود، مدل نویزهای داده‌های آموزشی را هم به عنوان قانون یاد می‌گیرد؛ در نتیجه دقت آن روی داده‌های جدید (تست) به شدت افت می‌کند.
  • عدم پایداری ساختاری (Instability): این الگوریتم واریانس بالایی دارد؛ به این معنی که با کوچک‌ترین تغییر یا حذف و اضافه شدن چند داده در مجموعه آموزشی، ساختار کل درخت (گره ریشه و شکست‌ها) ممکن است کاملاً تغییر کند و فلوچارت جدیدی حاصل شود.
  • عملکرد ضعیف در تخمین داده‌های پیوسته: در مسائل رگرسیون، درخت تصمیم به جای پیش‌بینی یک مقدار دقیق و هموار، خروجی‌ها را پله‌پله (Stepwise) حدس می‌زند. همچنین این مدل قادر به پیش‌بینی مقادیر خارج از محدوده داده‌های آموزشی (Extrapolation) نیست.
  • بایاس به سمت ویژگی‌های با دسته‌های متعدد: در زمان تفکیک گره‌ها، معیارهایی مانند بهره اطلاعاتی (Information Gain) به طور سیستماتیک به سمت ویژگی‌هایی غش می‌کنند که مقادیر منحصربه‌فرد یا دسته‌های بیشتری دارند (مثل کد ملی یا تاریخ)، حتی اگر آن ویژگی‌ها فاقد ارزش سیگنالی واقعی باشند.
  • هزینه محاسباتی سنگین در فاز آموزش: اگرچه فاز پیش‌بینی درخت سریع است، اما در فاز آموزش، به خصوص زمانی که با ویژگی‌های عددی و کلان‌داده (Big Data) سرکار داریم، مرتب‌سازی و یافتن بهترین نقطه تفکیک برای تک‌تک متغیرها زمان و حافظه رم بالایی مصرف می‌کند.

برای حل این چالش‌های بومی، دانشمندان داده معمولاً از راهکارهای پیشرفته‌ای مانند هرس کردن (Pruning) یا الگوریتم‌های تجمعی مثل جنگل تصادفی (Random Forest) استفاده می‌کنند.

.

13.نوآوری و آینده

اگرچه الگوریتم درخت تصمیم (Decision Tree) یک مدل کلاسیک است، اما در لبه فناوری هوش مصنوعی با نوآوری‌های شگفت‌انگیزی بازآفرینی شده است تا چالش‌های مدرن کلان‌داده و یادگیری عمیق را تسخیر کند.

مهم‌ترین نوآوری‌ها و چشم‌انداز آینده این الگوریتم عبارتند از:

  • درخت‌های تصمیم متمایزپذیر (Differentiable Decision Trees): یکی از بزرگ‌ترین نوآوری‌ها، ترکیب درخت تصمیم با شبکه‌های عصبی عمیق (Deep Learning) است. با تبدیل توابع شکستِ صلب به توابع نرم و متمایزپذیر (Soft Splitting)، این درخت‌ها می‌توانند به صورت نهایی (End-to-End) از طریق پدیده پس‌انتشار خطا (Backpropagation) آموزش ببینند.
  • الگوریتم‌های بهینه‌سازی کوانتومی (Quantum Decision Trees): با ظهور رایانش کوانتومی، نسخه‌های کوانتومی این الگوریتم در حال توسعه هستند. این نوآوری به مدل اجازه می‌دهد تا معیارهای پیچیده‌ای مثل آنتروپی و شاخص جینی را در کسر کوچکی از ثانیه روی دیتابیس‌های چندمیلیاردی و در فضای چندبعدی محاسبه کند.
  • رشد پویا و یادگیری آنلاین (Streaming & Online Trees): درخت‌های تصمیم سنتی برای هر تغییر کوچکی در داده‌ها باید از اول بازسازی شوند. نوآوری‌های آینده مانند درخت‌های Hoeffding به مدل اجازه می‌دهند تا در مواجهه با جریان‌های داده‌ای لحظه‌ای (مانند اینترنت اشیاء)، بدون نیاز به ذخیره‌سازی داده‌های قبلی، گره‌های خود را به صورت پویا تکامل و گسترش دهند.
  • کاهش مصرف انرژی در لبه شبکه (Green AI / TinyML): آینده درخت‌های تصمیم در سخت‌افزارهای لبه (Edge Devices) گره خورده است. به دلیل ماهیتِ ساده‌یِ قوانین شرطی (اگر/آنگاه)، این الگوریتم‌ها با فشرده‌سازی ساختاری بهینه‌سازی می‌شوند تا با کمترین مصرف باتری و پردازش در ریزتراشه‌ها، جایگزین شبکه‌های عصبی سنگین شوند.

این نوآوری‌های ساختاری، درخت تصمیم را از یک مدل ساده‌ی آماری به یک ابزار فوق‌سریع، سبز و قابل تفسیر در آینده هوش مصنوعی تبدیل کرده‌اند.

.

جمع بندی

الگوریتم درخت تصمیم یکی از بنیادی‌ترین روش‌های یادگیری ماشین است که با استفاده از ساختاری سلسله‌مراتبی، فرآیند تصمیم‌گیری را به مجموعه‌ای از قواعد قابل‌فهم تبدیل می‌کند. در این مطلب دیدیم که معیارهایی مانند Information Gain، Entropy و Gini چگونه در انتخاب بهترین تقسیم‌بندی داده‌ها نقش دارند و چگونه الگوریتم‌هایی مانند ID3، C4.5 و CART مسیر تکامل این خانواده از مدل‌ها را شکل داده‌اند.

در کنار سادگی و تفسیرپذیری بالا، درخت تصمیم با محدودیت‌هایی مانند حساسیت به نویز، واریانس بالا و تمایل به بیش‌برازش مواجه است. به همین دلیل، در کاربردهای واقعی معمولاً از تکنیک‌هایی مانند Pruning یا روش‌های ensemble نظیر و برای بهبود پایداری و دقت استفاده می‌شود.

با وجود ظهور مدل‌های پیچیده‌تر در یادگیری ماشین و یادگیری عمیق، درخت تصمیم همچنان جایگاه مهمی در تحلیل داده و سیستم‌های هوشمند دارد. دلیل این موضوع، توازن مناسب میان سادگی، سرعت، تفسیرپذیری و توانایی مدل‌سازی روابط غیرخطی است. درک دقیق سازوکار درخت تصمیم نه‌تنها برای استفاده مستقیم از این الگوریتم اهمیت دارد، بلکه پایه‌ای ضروری برای فهم بسیاری از روش‌های ensemble مدرن نیز محسوب می‌شود.

آنچه می خوانید