[{"data":1,"prerenderedAt":25293},["ShallowReactive",2],{"navigation_docs":3,"-ai-python-activation-functions-heart-disease-heart-disease-prediction":5180,"-ai-python-activation-functions-heart-disease-heart-disease-prediction-surround":25288},[4,1707,2084,2556,2737,2863,3070,3192,3242,3299,3333,3459,3536,3550,3689,3983,4060,4793,4968,5061,5114,5176],{"title":5,"icon":6,"path":7,"stem":8,"children":9},"C#","i-devicon-csharp","\u002Fcsharp","01.csharp",[10,13,60,90,120,202,219,253,379,404,457,650,1364,1654,1703],{"title":11,"path":7,"stem":12},"C# та .NET","01.csharp\u002Findex",{"title":14,"icon":15,"path":16,"stem":17,"children":18,"page":59},"Fundamentals","i-lucide-book-open","\u002Fcsharp\u002Ffundamentals","01.csharp\u002F01.fundamentals",[19,23,27,31,35,39,43,47,51,55],{"title":20,"path":21,"stem":22},"Вступ до екосистеми .NET","\u002Fcsharp\u002Ffundamentals\u002Fintroduction-to-ecosystem","01.csharp\u002F01.fundamentals\u002F01.introduction-to-ecosystem",{"title":24,"path":25,"stem":26},"Структура програми на C#","\u002Fcsharp\u002Ffundamentals\u002Fprogram-structure","01.csharp\u002F01.fundamentals\u002F02.program-structure",{"title":28,"path":29,"stem":30},"Змінні та Типи Даних","\u002Fcsharp\u002Ffundamentals\u002Fvariables-data-types","01.csharp\u002F01.fundamentals\u002F03.variables-data-types",{"title":32,"path":33,"stem":34},"Масиви","\u002Fcsharp\u002Ffundamentals\u002Farrays","01.csharp\u002F01.fundamentals\u002F04.arrays",{"title":36,"path":37,"stem":38},"Strings & Text Handling","\u002Fcsharp\u002Ffundamentals\u002Fstrings-text-handling","01.csharp\u002F01.fundamentals\u002F05.strings-text-handling",{"title":40,"path":41,"stem":42},"Дати і Час","\u002Fcsharp\u002Ffundamentals\u002Fdates-time-handling","01.csharp\u002F01.fundamentals\u002F06.dates-time-handling",{"title":44,"path":45,"stem":46},"Потік Керування","\u002Fcsharp\u002Ffundamentals\u002Fcontrol-flow","01.csharp\u002F01.fundamentals\u002F07.control-flow",{"title":48,"path":49,"stem":50},"Методи","\u002Fcsharp\u002Ffundamentals\u002Fmethods","01.csharp\u002F01.fundamentals\u002F08.methods",{"title":52,"path":53,"stem":54},"Основи Відлагодження","\u002Fcsharp\u002Ffundamentals\u002Fdebugging-basics","01.csharp\u002F01.fundamentals\u002F09.debugging-basics",{"title":56,"path":57,"stem":58},"Інтерактивна Консоль (Classic)","\u002Fcsharp\u002Ffundamentals\u002Finteractive-console","01.csharp\u002F01.fundamentals\u002F10.interactive-console",false,{"title":61,"icon":62,"path":63,"stem":64,"children":65,"page":59},"OOP","i-lucide-box","\u002Fcsharp\u002Foop","01.csharp\u002F02.oop",[66,70,74,78,82,86],{"title":67,"path":68,"stem":69},"Package Management (Управління Пакетами)","\u002Fcsharp\u002Foop\u002Fpackage-management","01.csharp\u002F02.oop\u002F01.package-management",{"title":71,"path":72,"stem":73},"Класи та Об'єкти","\u002Fcsharp\u002Foop\u002Fclasses-objects","01.csharp\u002F02.oop\u002F02.classes-objects",{"title":75,"path":76,"stem":77},"Властивості та Поля","\u002Fcsharp\u002Foop\u002Fproperties-fields","01.csharp\u002F02.oop\u002F03.properties-fields",{"title":79,"path":80,"stem":81},"Стовпи ООП","\u002Fcsharp\u002Foop\u002Foop-pillars","01.csharp\u002F02.oop\u002F04.oop-pillars",{"title":83,"path":84,"stem":85},"Advanced Types","\u002Fcsharp\u002Foop\u002Fadvanced-types","01.csharp\u002F02.oop\u002F05.advanced-types",{"title":87,"path":88,"stem":89},"Namespaces (Простори Імен)","\u002Fcsharp\u002Foop\u002Fnamespaces","01.csharp\u002F02.oop\u002F06.namespaces",{"title":91,"icon":92,"path":93,"stem":94,"children":95,"page":59},"Advanced Core","i-lucide-zap","\u002Fcsharp\u002Fadvanced-core","01.csharp\u002F03.advanced-core",[96,100,104,108,112,116],{"title":97,"path":98,"stem":99},"Generics (Узагальнення)","\u002Fcsharp\u002Fadvanced-core\u002Fgenerics","01.csharp\u002F03.advanced-core\u002F01.generics",{"title":101,"path":102,"stem":103},"Делегати, Події та Лямбда-вирази","\u002Fcsharp\u002Fadvanced-core\u002Fdelegates-events-lambdas","01.csharp\u002F03.advanced-core\u002F02.delegates-events-lambdas",{"title":105,"path":106,"stem":107},"Interfaces Deep Dive (Інтерфейси: Поглиблений Розгляд)","\u002Fcsharp\u002Fadvanced-core\u002Finterfaces-deep-dive","01.csharp\u002F03.advanced-core\u002F03.interfaces-deep-dive",{"title":109,"path":110,"stem":111},"Обробка Винятків","\u002Fcsharp\u002Fadvanced-core\u002Fexception-handling","01.csharp\u002F03.advanced-core\u002F04.exception-handling",{"title":113,"path":114,"stem":115},"Pattern Matching","\u002Fcsharp\u002Fadvanced-core\u002Fpattern-matching","01.csharp\u002F03.advanced-core\u002F05.pattern-matching",{"title":117,"path":118,"stem":119},"Додаткові Можливості C#","\u002Fcsharp\u002Fadvanced-core\u002Fadditional-features","01.csharp\u002F03.advanced-core\u002F06.additional-features",{"title":121,"icon":122,"path":123,"stem":124,"children":125,"page":59},"Architecture Best Practices","i-lucide-building-2","\u002Fcsharp\u002Farchitecture-best-practices","01.csharp\u002F04.architecture-best-practices",[126,130,149,153,157,161,165,169],{"title":127,"path":128,"stem":129},"Software Design Principles (Частина 1)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fsoftware-design-principles","01.csharp\u002F04.architecture-best-practices\u002F01.software-design-principles",{"title":131,"icon":132,"path":133,"stem":134,"children":135,"page":59},"Design Patterns","i-lucide-folder","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdesign-patterns","01.csharp\u002F04.architecture-best-practices\u002F02.design-patterns",[136],{"title":137,"icon":132,"path":138,"stem":139,"children":140,"page":59},"Creational","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdesign-patterns\u002Fcreational","01.csharp\u002F04.architecture-best-practices\u002F02.design-patterns\u002Fcreational",[141,145],{"title":142,"path":143,"stem":144},"Singleton (Одинак)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdesign-patterns\u002Fcreational\u002Fsingleton","01.csharp\u002F04.architecture-best-practices\u002F02.design-patterns\u002Fcreational\u002F01.singleton",{"title":146,"path":147,"stem":148},"Builder (Будівельник)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdesign-patterns\u002Fcreational\u002Fbuilder","01.csharp\u002F04.architecture-best-practices\u002F02.design-patterns\u002Fcreational\u002F02.builder",{"title":150,"path":151,"stem":152},"Building Professional CLIs","\u002Fcsharp\u002Farchitecture-best-practices\u002Fbuilding-professional-clis","01.csharp\u002F04.architecture-best-practices\u002F03.building-professional-clis",{"title":154,"path":155,"stem":156},"Validation & Flow Control","\u002Fcsharp\u002Farchitecture-best-practices\u002Fvalidation-flow-control","01.csharp\u002F04.architecture-best-practices\u002F04.validation-flow-control",{"title":158,"path":159,"stem":160},"The Modern .NET Host (Microsoft.Extensions)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fmodern-dotnet-host","01.csharp\u002F04.architecture-best-practices\u002F05.modern-dotnet-host",{"title":162,"path":163,"stem":164},"Data Mapper: Repository та DAO патерни (Частина 1)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdata-mapper-part1","01.csharp\u002F04.architecture-best-practices\u002F06.data-mapper-part1",{"title":166,"path":167,"stem":168},"Data Mapper: Repository та DAO патерни (Частина 2)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdata-mapper-part2","01.csharp\u002F04.architecture-best-practices\u002F07.data-mapper-part2",{"title":170,"icon":132,"path":171,"stem":172,"children":173,"page":59},"Di Ioc","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc",[174,178,182,186,190,194,198],{"title":175,"path":176,"stem":177},"Проблема залежностей та Інверсія Контролю","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fthe-dependency-problem","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F01.the-dependency-problem",{"title":179,"path":180,"stem":181},"Будуємо власний Service Container","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fbuild-your-own-container","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F02.build-your-own-container",{"title":183,"path":184,"stem":185},"Service Locator: Паттерн та Анти-паттерн","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fservice-locator-pattern","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F03.service-locator-pattern",{"title":187,"path":188,"stem":189},"Паттерни Dependency Injection","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fdependency-injection-patterns","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F04.dependency-injection-patterns",{"title":191,"path":192,"stem":193},"Microsoft DI: IServiceCollection та IServiceProvider","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fmicrosoft-di-deep-dive","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F05.microsoft-di-deep-dive",{"title":195,"path":196,"stem":197},"Service Lifetimes та Scopes","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fservice-lifetimes-and-scopes","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F06.service-lifetimes-and-scopes",{"title":199,"path":200,"stem":201},"DI Анти-паттерни та Найкращі Практики","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fdi-anti-patterns-and-best-practices","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F07.di-anti-patterns-and-best-practices",{"title":203,"icon":132,"path":204,"stem":205,"children":206,"page":59},"Standard Library","\u002Fcsharp\u002Fstandard-library","01.csharp\u002F05.standard-library",[207,211,215],{"title":208,"path":209,"stem":210},"Collections (Колекції)","\u002Fcsharp\u002Fstandard-library\u002Fcollections","01.csharp\u002F05.standard-library\u002F01.collections",{"title":212,"path":213,"stem":214},"High Performance Types (Високопродуктивні Типи)","\u002Fcsharp\u002Fstandard-library\u002Fhigh-performance-types","01.csharp\u002F05.standard-library\u002F02.high-performance-types",{"title":216,"path":217,"stem":218},"LINQ (Language Integrated Query)","\u002Fcsharp\u002Fstandard-library\u002Flinq","01.csharp\u002F05.standard-library\u002F03.linq",{"title":220,"icon":221,"path":222,"stem":223,"children":224,"page":59},"System Internals Concurrency","i-lucide-server","\u002Fcsharp\u002Fsystem-internals-concurrency","01.csharp\u002F06.system-internals-concurrency",[225,229,233,237,241,245,249],{"title":226,"path":227,"stem":228},"Memory Management","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fmemory-management","01.csharp\u002F06.system-internals-concurrency\u002F01.memory-management",{"title":230,"path":231,"stem":232},"Reflection API: System.Type та Метадані","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Freflection-fundamentals","01.csharp\u002F06.system-internals-concurrency\u002F02.reflection-fundamentals",{"title":234,"path":235,"stem":236},"Attributes та Dynamic Language Runtime","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fattributes-dynamic","01.csharp\u002F06.system-internals-concurrency\u002F03.attributes-dynamic",{"title":238,"path":239,"stem":240},"Expression Trees: Швидка Альтернатива Рефлексії","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fexpression-trees-compiled","01.csharp\u002F06.system-internals-concurrency\u002F04.expression-trees-compiled",{"title":242,"path":243,"stem":244},"Source Generators: Compile-Time Code Generation","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fsource-generators","01.csharp\u002F06.system-internals-concurrency\u002F05.source-generators",{"title":246,"path":247,"stem":248},"Multithreading Fundamentals","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fmultithreading-fundamentals","01.csharp\u002F06.system-internals-concurrency\u002F06.multithreading-fundamentals",{"title":250,"path":251,"stem":252},"Synchronization Primitives","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fsynchronization-primitives","01.csharp\u002F06.system-internals-concurrency\u002F07.synchronization-primitives",{"title":254,"icon":255,"path":256,"stem":257,"children":258,"page":59},"System Programming Windows","i-lucide-cpu","\u002Fcsharp\u002Fsystem-programming-windows","01.csharp\u002F07.system-programming-windows",[259,263,267,271,275,279,283,287,291,295,299,303,307,311,315,319,323,327,331,335,339,343,347,351,355,359,363,367,371,375],{"title":260,"path":261,"stem":262},"Як Працює Операційна Система","\u002Fcsharp\u002Fsystem-programming-windows\u002Fhow-os-works","01.csharp\u002F07.system-programming-windows\u002F01.how-os-works",{"title":264,"path":265,"stem":266},"Процеси в .NET — API та Запуск","\u002Fcsharp\u002Fsystem-programming-windows\u002Fprocesses-in-dotnet","01.csharp\u002F07.system-programming-windows\u002F02.processes-in-dotnet",{"title":268,"path":269,"stem":270},"Процеси в .NET — IPC та Міжпроцесна Комунікація","\u002Fcsharp\u002Fsystem-programming-windows\u002F02a.processes-ipc","01.csharp\u002F07.system-programming-windows\u002F02a.processes-ipc",{"title":272,"path":273,"stem":274},"Application Domains та Збірки — AppDomain і AssemblyLoadContext","\u002Fcsharp\u002Fsystem-programming-windows\u002Fappdomains-assemblies","01.csharp\u002F07.system-programming-windows\u002F03.appdomains-assemblies",{"title":276,"path":277,"stem":278},"Application Domains та Збірки — Plug-in Система з Hot-Reload","\u002Fcsharp\u002Fsystem-programming-windows\u002F03a.appdomains-plugin-system","01.csharp\u002F07.system-programming-windows\u002F03a.appdomains-plugin-system",{"title":280,"path":281,"stem":282},"Потоки — Основи та API Thread","\u002Fcsharp\u002Fsystem-programming-windows\u002Fthread-fundamentals","01.csharp\u002F07.system-programming-windows\u002F04.thread-fundamentals",{"title":284,"path":285,"stem":286},"Потоки — Lifecycle, Пріоритети та Безпечне Завершення","\u002Fcsharp\u002Fsystem-programming-windows\u002F04a.thread-lifecycle-priorities","01.csharp\u002F07.system-programming-windows\u002F04a.thread-lifecycle-priorities",{"title":288,"path":289,"stem":290},"Проблеми Спільного Стану — Race Condition та Data Race","\u002Fcsharp\u002Fsystem-programming-windows\u002Fshared-state-problems","01.csharp\u002F07.system-programming-windows\u002F05.shared-state-problems",{"title":292,"path":293,"stem":294},"Проблеми Спільного Стану — Memory Model та volatile","\u002Fcsharp\u002Fsystem-programming-windows\u002F05a.shared-state-memory-model","01.csharp\u002F07.system-programming-windows\u002F05a.shared-state-memory-model",{"title":296,"path":297,"stem":298},"Синхронізація — Monitor, lock та еволюція примітивів","\u002Fcsharp\u002Fsystem-programming-windows\u002Fsynchronization-fundamentals","01.csharp\u002F07.system-programming-windows\u002F06.synchronization-fundamentals",{"title":300,"path":301,"stem":302},"Синхронізація — Наскрізний Приклад та Deadlock Detection","\u002Fcsharp\u002Fsystem-programming-windows\u002F06a.synchronization-walkthrough","01.csharp\u002F07.system-programming-windows\u002F06a.synchronization-walkthrough",{"title":304,"path":305,"stem":306},"Синхронізація — Mutex, Semaphore та Event-Based Primitives","\u002Fcsharp\u002Fsystem-programming-windows\u002Fsynchronization-advanced","01.csharp\u002F07.system-programming-windows\u002F07.synchronization-advanced",{"title":308,"path":309,"stem":310},"Синхронізація — Interlocked, Volatile та Lock-Free Структури","\u002Fcsharp\u002Fsystem-programming-windows\u002F07a.synchronization-advanced-walkthrough","01.csharp\u002F07.system-programming-windows\u002F07a.synchronization-advanced-walkthrough",{"title":312,"path":313,"stem":314},"Interlocked, CAS та Lock-Free Структури","\u002Fcsharp\u002Fsystem-programming-windows\u002Finterlocked-cas-lockfree","01.csharp\u002F07.system-programming-windows\u002F08.interlocked-cas-lockfree",{"title":316,"path":317,"stem":318},"Volatile, Memory Model та Spinning","\u002Fcsharp\u002Fsystem-programming-windows\u002F08a.volatile-memory-model","01.csharp\u002F07.system-programming-windows\u002F08a.volatile-memory-model",{"title":320,"path":321,"stem":322},"ThreadPool — Пул Потоків для Ефективного Виконання","\u002Fcsharp\u002Fsystem-programming-windows\u002Fthread-pool","01.csharp\u002F07.system-programming-windows\u002F09.thread-pool",{"title":324,"path":325,"stem":326},"ThreadPool — Просунуті Сценарії та Внутрішня Будова","\u002Fcsharp\u002Fsystem-programming-windows\u002F09a.thread-pool-advanced","01.csharp\u002F07.system-programming-windows\u002F09a.thread-pool-advanced",{"title":328,"path":329,"stem":330},"Concurrent та Immutable Collections","\u002Fcsharp\u002Fsystem-programming-windows\u002Fconcurrent-collections","01.csharp\u002F07.system-programming-windows\u002F10.concurrent-collections",{"title":332,"path":333,"stem":334},"TPL, Task та Композиція — Від Thread до Task","\u002Fcsharp\u002Fsystem-programming-windows\u002Ftpl-parallel-plinq","01.csharp\u002F07.system-programming-windows\u002F11.tpl-parallel-plinq",{"title":336,"path":337,"stem":338},"Parallel Class та PLINQ — Data Parallelism","\u002Fcsharp\u002Fsystem-programming-windows\u002F11a.tpl-parallel-plinq-advanced","01.csharp\u002F07.system-programming-windows\u002F11a.tpl-parallel-plinq-advanced",{"title":340,"path":341,"stem":342},"Async\u002FAwait — Фундамент Асинхронного Програмування","\u002Fcsharp\u002Fsystem-programming-windows\u002Fasync-fundamentals","01.csharp\u002F07.system-programming-windows\u002F12.async-fundamentals",{"title":344,"path":345,"stem":346},"SynchronizationContext та ConfigureAwait — Контекст Виконання","\u002Fcsharp\u002Fsystem-programming-windows\u002Fasync-context-configureawait","01.csharp\u002F07.system-programming-windows\u002F13.async-context-configureawait",{"title":348,"path":349,"stem":350},"Async — Просунуті Паттерни","\u002Fcsharp\u002Fsystem-programming-windows\u002Fasync-advanced","01.csharp\u002F07.system-programming-windows\u002F14.async-advanced",{"title":352,"path":353,"stem":354},"System.Threading.Channels — Async Producer-Consumer","\u002Fcsharp\u002Fsystem-programming-windows\u002Fchannels","01.csharp\u002F07.system-programming-windows\u002F15.channels",{"title":356,"path":357,"stem":358},"Асинхронна Синхронізація","\u002Fcsharp\u002Fsystem-programming-windows\u002Fasync-synchronization","01.csharp\u002F07.system-programming-windows\u002F16.async-synchronization",{"title":360,"path":361,"stem":362},"Unsafe Code та Вказівники","\u002Fcsharp\u002Fsystem-programming-windows\u002Funsafe-code","01.csharp\u002F07.system-programming-windows\u002F17.unsafe-code",{"title":364,"path":365,"stem":366},"P\u002FInvoke та Windows API — Міст між .NET та Native Code","\u002Fcsharp\u002Fsystem-programming-windows\u002Fpinvoke-winapi","01.csharp\u002F07.system-programming-windows\u002F18.pinvoke-winapi",{"title":368,"path":369,"stem":370},"Реєстр Windows — Центральна База Конфігурації Системи","\u002Fcsharp\u002Fsystem-programming-windows\u002Fwindows-registry","01.csharp\u002F07.system-programming-windows\u002F19.windows-registry",{"title":372,"path":373,"stem":374},"Windows Hooks, Hotkeys та Services — Глибока Інтеграція з ОС","\u002Fcsharp\u002Fsystem-programming-windows\u002Fwindows-hooks-services","01.csharp\u002F07.system-programming-windows\u002F20.windows-hooks-services",{"title":376,"path":377,"stem":378},"Системне Програмування C# (Windows) — 07.system-programming-windows","\u002Fcsharp\u002Fsystem-programming-windows\u002Fimplementation_plan","01.csharp\u002F07.system-programming-windows\u002Fimplementation_plan",{"title":380,"icon":132,"path":381,"stem":382,"children":383,"page":59},"Io","\u002Fcsharp\u002Fio","01.csharp\u002F08.io",[384,388,392,396,400],{"title":385,"path":386,"stem":387},"8.1.1. Основи роботи з файловою системою","\u002Fcsharp\u002Fio\u002Ffile-system-basics","01.csharp\u002F08.io\u002F01.file-system-basics",{"title":389,"path":390,"stem":391},"8.1.2. Потоки (Streams) та Серіалізація Даних","\u002Fcsharp\u002Fio\u002Fstreams-serialization","01.csharp\u002F08.io\u002F02.streams-serialization",{"title":393,"path":394,"stem":395},"8.2.1. JSON Serialization з System.Text.Json","\u002Fcsharp\u002Fio\u002Fjson-serialization","01.csharp\u002F08.io\u002F03.json-serialization",{"title":397,"path":398,"stem":399},"8.2.2. XML Serialization та LINQ to XML","\u002Fcsharp\u002Fio\u002Fxml-serialization","01.csharp\u002F08.io\u002F04.xml-serialization",{"title":401,"path":402,"stem":403},"8.2.3. Binary Serialization: MessagePack та Protocol Buffers","\u002Fcsharp\u002Fio\u002Fbinary-serialization","01.csharp\u002F08.io\u002F05.binary-serialization",{"title":405,"icon":132,"path":406,"stem":407,"children":408,"page":59},"Ado Net","\u002Fcsharp\u002Fado-net","01.csharp\u002F09.ado-net",[409,413,417,421,425,429,433,437,441,445,449,453],{"title":410,"path":411,"stem":412},"9.1. Введення в ADO.NET","\u002Fcsharp\u002Fado-net\u002Fintroduction-to-adonet","01.csharp\u002F09.ado-net\u002F01.introduction-to-adonet",{"title":414,"path":415,"stem":416},"9.2. Клас DbConnection — з'єднання з базою даних","\u002Fcsharp\u002Fado-net\u002Fconnection","01.csharp\u002F09.ado-net\u002F02.connection",{"title":418,"path":419,"stem":420},"9.3. Клас DbCommand — виконання SQL-запитів","\u002Fcsharp\u002Fado-net\u002Fcommand-and-queries","01.csharp\u002F09.ado-net\u002F03.command-and-queries",{"title":422,"path":423,"stem":424},"9.4. Клас DbDataReader — ефективне читання даних","\u002Fcsharp\u002Fado-net\u002Fdatareader","01.csharp\u002F09.ado-net\u002F04.datareader",{"title":426,"path":427,"stem":428},"9.5. Параметризовані запити та захист від SQL Injection","\u002Fcsharp\u002Fado-net\u002Fparameters-and-sql-injection","01.csharp\u002F09.ado-net\u002F05.parameters-and-sql-injection",{"title":430,"path":431,"stem":432},"9.6. Транзакції в ADO.NET","\u002Fcsharp\u002Fado-net\u002Ftransactions","01.csharp\u002F09.ado-net\u002F06.transactions",{"title":434,"path":435,"stem":436},"9.7. DbProviderFactory — провайдер-незалежний код","\u002Fcsharp\u002Fado-net\u002Fprovider-factory","01.csharp\u002F09.ado-net\u002F07.provider-factory",{"title":438,"path":439,"stem":440},"9.8. Асинхронний доступ до даних","\u002Fcsharp\u002Fado-net\u002Fasync-data-access","01.csharp\u002F09.ado-net\u002F08.async-data-access",{"title":442,"path":443,"stem":444},"9.9. Від'єднаний режим: DataSet, DataTable, DataRow","\u002Fcsharp\u002Fado-net\u002Fdisconnected-mode-dataset","01.csharp\u002F09.ado-net\u002F09.disconnected-mode-dataset",{"title":446,"path":447,"stem":448},"9.10. DataAdapter — міст між DataSet та базою даних","\u002Fcsharp\u002Fado-net\u002Fdata-adapter","01.csharp\u002F09.ado-net\u002F10.data-adapter",{"title":450,"path":451,"stem":452},"9.11. Data Mapper та Repository: Архітектура доступу до даних","\u002Fcsharp\u002Fado-net\u002Fdata-mapper-repository","01.csharp\u002F09.ado-net\u002F11.data-mapper-repository",{"title":454,"path":455,"stem":456},"9.12. Identity Map, Unit of Work та Specification Pattern","\u002Fcsharp\u002Fado-net\u002Fadvanced-patterns","01.csharp\u002F09.ado-net\u002F12.advanced-patterns",{"title":458,"icon":255,"path":459,"stem":460,"children":461,"page":59},"Ef Core","\u002Fcsharp\u002Fef-core","01.csharp\u002F10.ef-core",[462,466,470,474,478,482,486,490,494,498,502,506,510,514,518,522,526,532,538,542,546,550,554,558,562,566,570,574,578,582,586,590,594,598,602,606,610,614,618,622,626,630,634,638,642,646],{"title":463,"path":464,"stem":465},"Що таке ORM? Від SQL до об'єктів","\u002Fcsharp\u002Fef-core\u002Fwhat-is-orm","01.csharp\u002F10.ef-core\u002F01.what-is-orm",{"title":467,"path":468,"stem":469},"Перший проєкт — від нуля до CRUD","\u002Fcsharp\u002Fef-core\u002Ffirst-project","01.csharp\u002F10.ef-core\u002F02.first-project",{"title":471,"path":472,"stem":473},"DbContext — Серце EF Core","\u002Fcsharp\u002Fef-core\u002Fdbcontext-deep-dive","01.csharp\u002F10.ef-core\u002F03.dbcontext-deep-dive",{"title":475,"path":476,"stem":477},"Провайдери баз даних — Архітектура та Вибір СУБД","\u002Fcsharp\u002Fef-core\u002Fdatabase-providers","01.csharp\u002F10.ef-core\u002F04.database-providers",{"title":479,"path":480,"stem":481},"Конвенції EF Core — Магія без конфігурації","\u002Fcsharp\u002Fef-core\u002Fconventions","01.csharp\u002F10.ef-core\u002F05.conventions",{"title":483,"path":484,"stem":485},"Fluent API та Data Annotations — Явна конфігурація моделі","\u002Fcsharp\u002Fef-core\u002Ffluent-api-vs-annotations","01.csharp\u002F10.ef-core\u002F06.fluent-api-vs-annotations",{"title":487,"path":488,"stem":489},"Зв'язки — One-to-One та One-to-Many","\u002Fcsharp\u002Fef-core\u002Frelationships-basics","01.csharp\u002F10.ef-core\u002F07.relationships-basics",{"title":491,"path":492,"stem":493},"Зв'язки Advanced — Many-to-Many та Складні Сценарії","\u002Fcsharp\u002Fef-core\u002Frelationships-advanced","01.csharp\u002F10.ef-core\u002F08.relationships-advanced",{"title":495,"path":496,"stem":497},"Властивості — Типи, Конвертери, Компаратори (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fproperty-configuration-part1","01.csharp\u002F10.ef-core\u002F09.property-configuration-part1",{"title":499,"path":500,"stem":501},"Властивості — Value Comparers, Generators, Shadow Properties (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fproperty-configuration-part2","01.csharp\u002F10.ef-core\u002F09.property-configuration-part2",{"title":503,"path":504,"stem":505},"Складні типи — Owned Types та Complex Types (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fcomplex-types-owned-part1","01.csharp\u002F10.ef-core\u002F10.complex-types-owned-part1",{"title":507,"path":508,"stem":509},"Складні типи — Complex Types, Keyless Entities, Порівняння (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fcomplex-types-owned-part2","01.csharp\u002F10.ef-core\u002F10.complex-types-owned-part2",{"title":511,"path":512,"stem":513},"JSON Columns — Складні дані у JSON (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fjson-columns-part1","01.csharp\u002F10.ef-core\u002F11.json-columns-part1",{"title":515,"path":516,"stem":517},"JSON Columns — Value Comparers, Індекси, Провайдери (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fjson-columns-part2","01.csharp\u002F10.ef-core\u002F11.json-columns-part2",{"title":519,"path":520,"stem":521},"Успадкування — Абстрактні класи та TPH (Частина 1)","\u002Fcsharp\u002Fef-core\u002Finheritance-part1","01.csharp\u002F10.ef-core\u002F12.inheritance-part1",{"title":523,"path":524,"stem":525},"Успадкування — TPT, TPC та Порівняння Стратегій (Частина 2)","\u002Fcsharp\u002Fef-core\u002Finheritance-part2","01.csharp\u002F10.ef-core\u002F12.inheritance-part2",{"title":527,"path":528,"stem":529,"children":530},"Індекси, Обмеження та Схема (Частина 1)","\u002Fcsharp\u002Fef-core\u002Findexes-constraints-part1","01.csharp\u002F10.ef-core\u002F13.indexes-constraints-part1",[531],{"title":527,"path":528,"stem":529},{"title":533,"path":534,"stem":535,"children":536},"Індекси, Обмеження та Схема (Частина 2)","\u002Fcsharp\u002Fef-core\u002Findexes-constraints-part2","01.csharp\u002F10.ef-core\u002F13.indexes-constraints-part2",[537],{"title":533,"path":534,"stem":535},{"title":539,"path":540,"stem":541},"Seed Data — Початкові Дані (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fseeding-part1","01.csharp\u002F10.ef-core\u002F14.seeding-part1",{"title":543,"path":544,"stem":545},"Seed Data — SQL-скрипти, Bogus та Стратегії (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fseeding-part2","01.csharp\u002F10.ef-core\u002F14.seeding-part2",{"title":547,"path":548,"stem":549},"Global Query Filters — Глобальні Фільтри (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fglobal-query-filters-part1","01.csharp\u002F10.ef-core\u002F15.global-query-filters-part1",{"title":551,"path":552,"stem":553},"Global Query Filters — Підводні камені та Інтеграція (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fglobal-query-filters-part2","01.csharp\u002F10.ef-core\u002F15.global-query-filters-part2",{"title":555,"path":556,"stem":557},"LINQ-запити в EF Core (Частина 1)","\u002Fcsharp\u002Fef-core\u002Flinq-queries-part1","01.csharp\u002F10.ef-core\u002F16.linq-queries-part1",{"title":559,"path":560,"stem":561},"LINQ-запити в EF Core (Частина 2)","\u002Fcsharp\u002Fef-core\u002Flinq-queries-part2","01.csharp\u002F10.ef-core\u002F16.linq-queries-part2",{"title":563,"path":564,"stem":565},"Завантаження Пов'язаних Даних (Частина 1)","\u002Fcsharp\u002Fef-core\u002Floading-related-data-part1","01.csharp\u002F10.ef-core\u002F17.loading-related-data-part1",{"title":567,"path":568,"stem":569},"Завантаження Пов'язаних Даних (Частина 2)","\u002Fcsharp\u002Fef-core\u002Floading-related-data-part2","01.csharp\u002F10.ef-core\u002F17.loading-related-data-part2",{"title":571,"path":572,"stem":573},"Raw SQL, Views та Stored Procedures (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fraw-sql-part1","01.csharp\u002F10.ef-core\u002F18.raw-sql-part1",{"title":575,"path":576,"stem":577},"Raw SQL — Stored Procedures, DbFunction та Bulk Operations (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fraw-sql-part2","01.csharp\u002F10.ef-core\u002F18.raw-sql-part2",{"title":579,"path":580,"stem":581},"Продвинуті Запити — Compiled Queries, Bulk та Оптимізація (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fadvanced-queries-part1","01.csharp\u002F10.ef-core\u002F19.advanced-queries-part1",{"title":583,"path":584,"stem":585},"Продвинуті Запити — Query Tags, Bulk та Interceptors (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fadvanced-queries-part2","01.csharp\u002F10.ef-core\u002F19.advanced-queries-part2",{"title":587,"path":588,"stem":589},"Change Tracker — Відстеження Змін (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fchange-tracking-part1","01.csharp\u002F10.ef-core\u002F20.change-tracking-part1",{"title":591,"path":592,"stem":593},"Change Tracker — Графи Об'єктів та Disconnected (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fchange-tracking-part2","01.csharp\u002F10.ef-core\u002F20.change-tracking-part2",{"title":595,"path":596,"stem":597},"Збереження Даних та Транзакції (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fsaving-data-part1","01.csharp\u002F10.ef-core\u002F21.saving-data-part1",{"title":599,"path":600,"stem":601},"Збереження Даних — Concurrency та Outbox (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fsaving-data-part2","01.csharp\u002F10.ef-core\u002F21.saving-data-part2",{"title":603,"path":604,"stem":605},"Конкурентність та Блокування (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fconcurrency-part1","01.csharp\u002F10.ef-core\u002F22.concurrency-part1",{"title":607,"path":608,"stem":609},"Конкурентність — Дедлоки та Queue Processing (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fconcurrency-part2","01.csharp\u002F10.ef-core\u002F22.concurrency-part2",{"title":611,"path":612,"stem":613},"Міграції в EF Core — Основи (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fmigrations-basics-part1","01.csharp\u002F10.ef-core\u002F23.migrations-basics-part1",{"title":615,"path":616,"stem":617},"Міграції в EF Core — Основи (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fmigrations-basics-part2","01.csharp\u002F10.ef-core\u002F23.migrations-basics-part2",{"title":619,"path":620,"stem":621},"Міграції — Просунуті Сценарії (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fmigrations-advanced-part1","01.csharp\u002F10.ef-core\u002F24.migrations-advanced-part1",{"title":623,"path":624,"stem":625},"Міграції — Просунуті Сценарії (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fmigrations-advanced-part2","01.csharp\u002F10.ef-core\u002F24.migrations-advanced-part2",{"title":627,"path":628,"stem":629},"Управління Схемою та Database-First (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fschema-management-part1","01.csharp\u002F10.ef-core\u002F25.schema-management-part1",{"title":631,"path":632,"stem":633},"Управління Схемою та Database-First (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fschema-management-part2","01.csharp\u002F10.ef-core\u002F25.schema-management-part2",{"title":635,"path":636,"stem":637},"Продуктивність EF Core — Основи (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fperformance-fundamentals-part1","01.csharp\u002F10.ef-core\u002F26.performance-fundamentals-part1",{"title":639,"path":640,"stem":641},"Interceptors в EF Core (Частина 1)","\u002Fcsharp\u002Fef-core\u002Finterceptors-part1","01.csharp\u002F10.ef-core\u002F29.interceptors-part1",{"title":643,"path":644,"stem":645},"Interceptors в EF Core — Connection, Transaction та Materialization (Частина 2)","\u002Fcsharp\u002Fef-core\u002Finterceptors-part2","01.csharp\u002F10.ef-core\u002F29.interceptors-part2",{"title":647,"path":648,"stem":649},"План вивчення Entity Framework Core — Повний курс","\u002Fcsharp\u002Fef-core\u002Fimplementation_plan","01.csharp\u002F10.ef-core\u002Fimplementation_plan",{"title":651,"icon":652,"path":653,"stem":654,"children":655,"page":59},"ASP.NET","i-devicon-dotnetcore","\u002Fcsharp\u002Faspnet","01.csharp\u002F11.aspnet",[656,730,791,869,927,941,967,1057,1111,1182,1212,1289,1346],{"title":657,"icon":658,"path":659,"stem":660,"children":661,"page":59},"Minimal API","i-lucide-network","\u002Fcsharp\u002Faspnet\u002Fminimal-api","01.csharp\u002F11.aspnet\u002F01.minimal-api",[662,666,670,674,678,682,686,690,694,698,702,706,710,714,718,722,726],{"title":663,"path":664,"stem":665},"Вступ до ASP.NET та еволюція фреймворку","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fintroduction","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F01.introduction",{"title":667,"path":668,"stem":669},"Перший додаток на ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Ffirst-application","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F02.first-application",{"title":671,"path":672,"stem":673},"WebApplication, Builder та Dependency Injection","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fwebapplication-builder","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F03.webapplication-builder",{"title":675,"path":676,"stem":677},"Конвеєр запитів та Middleware","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Frequest-pipeline-middleware","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F04.request-pipeline-middleware",{"title":679,"path":680,"stem":681},"Маршрутизація в ASP.NET Core: Основи","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Frouting-basics","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F05.routing-basics",{"title":683,"path":684,"stem":685},"Маршрутизація в ASP.NET Core: Розширені можливості","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Frouting-advanced","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F06.routing-advanced",{"title":687,"path":688,"stem":689},"Статичні файли в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fstatic-files","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F07.static-files",{"title":691,"path":692,"stem":693},"Статичні Активи: MapStaticAssets (ASP.NET Core 9.0)","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fstatic-assets","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F08.static-assets",{"title":695,"path":696,"stem":697},"Конфігурація в ASP.NET Core: Основи","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fconfiguration-fundamentals","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F09.configuration-fundamentals",{"title":699,"path":700,"stem":701},"Конфігурація: Паттерн Options","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fconfiguration-options","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F10.configuration-options",{"title":703,"path":704,"stem":705},"Логування в ASP.NET Core: Основи","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Flogging-basics","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F11.logging-basics",{"title":707,"path":708,"stem":709},"Логування: Serilog та Middleware","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Flogging-advanced","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F12.logging-advanced",{"title":711,"path":712,"stem":713},"Управління станом: HttpContext.Items та Cookies","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fstate-management","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F13.state-management",{"title":715,"path":716,"stem":717},"Стан сесії: Sessions","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fsession-state","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F14.session-state",{"title":719,"path":720,"stem":721},"Структура проєкту: від хаосу до архітектури","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fproject-structure","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F15.project-structure",{"title":723,"path":724,"stem":725},"Scalar у Minimal API: повний проєкт і Fluent OpenAPI","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fscalar-openapi-fluent","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F16.scalar-openapi-fluent",{"title":727,"path":728,"stem":729},"Swagger \u002F Swashbuckle у Minimal API: окремий класичний шлях","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fswagger-swashbuckle","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F17.swagger-swashbuckle",{"title":731,"icon":658,"path":732,"stem":733,"children":734,"page":59},"API","\u002Fcsharp\u002Faspnet\u002Fapi","01.csharp\u002F11.aspnet\u002F02.api",[735,739,743,747,751,755,759,763,767,771,775,779,783,787],{"title":736,"path":737,"stem":738},"Що таке API. Клієнт-серверна архітектура","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fwhat-is-api","01.csharp\u002F11.aspnet\u002F02.api\u002F01.what-is-api",{"title":740,"path":741,"stem":742},"Формати даних: JSON, XML, TOML та бінарні формати","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fdata-formats","01.csharp\u002F11.aspnet\u002F02.api\u002F02.data-formats",{"title":744,"path":745,"stem":746},"Парадигми API та концепція REST","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fapi-paradigms-rest","01.csharp\u002F11.aspnet\u002F02.api\u002F03.api-paradigms-rest",{"title":748,"path":749,"stem":750},"HTTP-методи, статус-коди та заголовки","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fhttp-methods-status-codes","01.csharp\u002F11.aspnet\u002F02.api\u002F04.http-methods-status-codes",{"title":752,"path":753,"stem":754},"Організація HTTP API за принципами REST","\u002Fcsharp\u002Faspnet\u002Fapi\u002Frest-organizing","01.csharp\u002F11.aspnet\u002F02.api\u002F05.rest-organizing",{"title":756,"path":757,"stem":758},"Номенклатура URL та CRUD-операції","\u002Fcsharp\u002Faspnet\u002Fapi\u002Furl-nomenclature-crud","01.csharp\u002F11.aspnet\u002F02.api\u002F06.url-nomenclature-crud",{"title":760,"path":761,"stem":762},"Правила дизайну: іменування та стандарти","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fapi-design-naming","01.csharp\u002F11.aspnet\u002F02.api\u002F07.api-design-naming",{"title":764,"path":765,"stem":766},"Валідація, ліміти та обробка помилок","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fapi-design-validation","01.csharp\u002F11.aspnet\u002F02.api\u002F08.api-design-validation",{"title":768,"path":769,"stem":770},"Обробка помилок у Minimal API","\u002Fcsharp\u002Faspnet\u002Fapi\u002Ferror-handling-http","01.csharp\u002F11.aspnet\u002F02.api\u002F09.error-handling-http",{"title":772,"path":773,"stem":774},"Ідемпотентність та синхронізація стану","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fidempotency-sync","01.csharp\u002F11.aspnet\u002F02.api\u002F10.idempotency-sync",{"title":776,"path":777,"stem":778},"Пагінація та організація списків","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fpagination-lists","01.csharp\u002F11.aspnet\u002F02.api\u002F11.pagination-lists",{"title":780,"path":781,"stem":782},"Безпека API, кешування та інтернаціоналізація","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fsecurity-auth","01.csharp\u002F11.aspnet\u002F02.api\u002F12.security-auth",{"title":784,"path":785,"stem":786},"Процес проєктування API та документування","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fapi-design-process","01.csharp\u002F11.aspnet\u002F02.api\u002F13.api-design-process",{"title":788,"path":789,"stem":790},"OpenAPI: контракт, специфікація та документація API","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fopenapi","01.csharp\u002F11.aspnet\u002F02.api\u002F14.openapi",{"title":792,"icon":793,"path":794,"stem":795,"children":796,"page":59},"Auth","i-lucide-shield-check","\u002Fcsharp\u002Faspnet\u002Fauth","01.csharp\u002F11.aspnet\u002F03.auth",[797,801,805,809,813,817,821,825,829,833,837,841,845,849,853,857,861,865],{"title":798,"path":799,"stem":800},"Основи аутентифікації та авторизації","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fauth-fundamentals","01.csharp\u002F11.aspnet\u002F03.auth\u002F01.auth-fundamentals",{"title":802,"path":803,"stem":804},"JWT-аутентифікація","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fjwt-authentication","01.csharp\u002F11.aspnet\u002F03.auth\u002F02.jwt-authentication",{"title":806,"path":807,"stem":808},"Авторизація: ролі, політики та resource-based доступ","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fauthorization-policies","01.csharp\u002F11.aspnet\u002F03.auth\u002F03.authorization-policies",{"title":810,"path":811,"stem":812},"Cookie-аутентифікація та ASP.NET Core Identity","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fcookie-auth-identity","01.csharp\u002F11.aspnet\u002F03.auth\u002F04.cookie-auth-identity",{"title":814,"path":815,"stem":816},"JWT + Refresh Tokens (HttpOnly Cookie)","\u002Fcsharp\u002Faspnet\u002Fauth\u002F04b.identity-auth-jwt","01.csharp\u002F11.aspnet\u002F03.auth\u002F04b.identity-auth-jwt",{"title":818,"path":819,"stem":820},"Identity: Підтвердження Email та Скидання Пароля","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fidentity-email-confirmation","01.csharp\u002F11.aspnet\u002F03.auth\u002F05.identity-email-confirmation",{"title":822,"path":823,"stem":824},"Identity: Двофакторна Аутентифікація (2FA)","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fidentity-two-factor","01.csharp\u002F11.aspnet\u002F03.auth\u002F06.identity-two-factor",{"title":826,"path":827,"stem":828},"Identity: Внутрішня Архітектура та Кастомізація","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fidentity-internals","01.csharp\u002F11.aspnet\u002F03.auth\u002F07.identity-internals",{"title":830,"path":831,"stem":832},"OAuth 2.0 та зовнішні провайдери","\u002Fcsharp\u002Faspnet\u002Fauth\u002Foauth-external-providers","01.csharp\u002F11.aspnet\u002F03.auth\u002F08.oauth-external-providers",{"title":834,"path":835,"stem":836},"Безпека на практиці: CORS, HTTPS та захист від атак","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fsecurity-hardening","01.csharp\u002F11.aspnet\u002F03.auth\u002F09.security-hardening",{"title":838,"path":839,"stem":840},"Теорія OAuth 2.0: Поняття, Аналогії та Флоу","\u002Fcsharp\u002Faspnet\u002Fauth\u002Foauth-theory","01.csharp\u002F11.aspnet\u002F03.auth\u002F10.oauth-theory",{"title":842,"path":843,"stem":844},"OIDC, OAuth 2.0 та Keycloak в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Foidc-keycloak","01.csharp\u002F11.aspnet\u002F03.auth\u002F10.oidc-keycloak",{"title":846,"path":847,"stem":848},"API Keys аутентифікація в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fapi-keys","01.csharp\u002F11.aspnet\u002F03.auth\u002F11.api-keys",{"title":850,"path":851,"stem":852},"Rate Limiting та Throttling в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Frate-limiting","01.csharp\u002F11.aspnet\u002F03.auth\u002F12.rate-limiting",{"title":854,"path":855,"stem":856},"Refresh Token Rotation в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Frefresh-token-rotation","01.csharp\u002F11.aspnet\u002F03.auth\u002F13.refresh-token-rotation",{"title":858,"path":859,"stem":860},"Certificate Authentication та mTLS в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fcertificate-auth","01.csharp\u002F11.aspnet\u002F03.auth\u002F14.certificate-auth",{"title":862,"path":863,"stem":864},"RBAC, ABAC та ReBAC в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Frbac-abac-rebac","01.csharp\u002F11.aspnet\u002F03.auth\u002F15.rbac-abac-rebac",{"title":866,"path":867,"stem":868},"Multi-tenancy та ізоляція даних в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fmulti-tenancy","01.csharp\u002F11.aspnet\u002F03.auth\u002F16.multi-tenancy",{"title":870,"icon":871,"path":872,"stem":873,"children":874,"page":59},"Нотифікації","i-lucide-bell","\u002Fcsharp\u002Faspnet\u002Fnotifications","01.csharp\u002F11.aspnet\u002F04.notifications",[875,879,883,887,891,895,899,903,907,911,915,919,923],{"title":876,"path":877,"stem":878},"In-App нотифікації через базу даних","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fin-app-database-notifications","01.csharp\u002F11.aspnet\u002F04.notifications\u002F01.in-app-database-notifications",{"title":880,"path":881,"stem":882},"Polling: Регулярний запит оновлень","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fpolling","01.csharp\u002F11.aspnet\u002F04.notifications\u002F02.polling",{"title":884,"path":885,"stem":886},"Server-Sent Events: Однострімовий push від сервера","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fserver-sent-events","01.csharp\u002F11.aspnet\u002F04.notifications\u002F03.server-sent-events",{"title":888,"path":889,"stem":890},"WebSockets: Двостороннє з'єднання в реальному часі","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fwebsockets","01.csharp\u002F11.aspnet\u002F04.notifications\u002F04.websockets",{"title":892,"path":893,"stem":894},"SignalR: Абстракція над транспортами реального часу","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fsignalr","01.csharp\u002F11.aspnet\u002F04.notifications\u002F05.signalr",{"title":896,"path":897,"stem":898},"Background Services: Фонові задачі в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fbackground-services","01.csharp\u002F11.aspnet\u002F04.notifications\u002F06.background-services",{"title":900,"path":901,"stem":902},"Web Push нотифікації","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fweb-push","01.csharp\u002F11.aspnet\u002F04.notifications\u002F07.web-push",{"title":904,"path":905,"stem":906},"Email нотифікації","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Femail-notifications","01.csharp\u002F11.aspnet\u002F04.notifications\u002F08.email-notifications",{"title":908,"path":909,"stem":910},"Порівняння підходів: Як вибрати правильну технологію нотифікацій","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fchoosing-the-right-approach","01.csharp\u002F11.aspnet\u002F04.notifications\u002F09.choosing-the-right-approach",{"title":912,"path":913,"stem":914},"Hangfire: Надійне планування фонових задач","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fhangfire","01.csharp\u002F11.aspnet\u002F04.notifications\u002F10.hangfire",{"title":916,"path":917,"stem":918},"Практика: Конвертація зображень у WebP через Hangfire","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fhangfire-image-webp","01.csharp\u002F11.aspnet\u002F04.notifications\u002F11.hangfire-image-webp",{"title":920,"path":921,"stem":922},"Практика: Підготовка відео до HLS-стрімінгу через Hangfire","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fhangfire-video-hls","01.csharp\u002F11.aspnet\u002F04.notifications\u002F12.hangfire-video-hls",{"title":924,"path":925,"stem":926},"Telegram-нотифікації: від одного повідомлення до масових розсилок і мульти-канального підходу","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Ftelegram-notifications","01.csharp\u002F11.aspnet\u002F04.notifications\u002F13.telegram-notifications",{"title":928,"icon":929,"path":930,"stem":931,"children":932,"page":59},"Інтернаціоналізація","i-lucide-languages","\u002Fcsharp\u002Faspnet\u002Fi18n","01.csharp\u002F11.aspnet\u002F05.i18n",[933,937],{"title":934,"path":935,"stem":936},"Інтернаціоналізація (i18n) у Minimal API: від A до Я","\u002Fcsharp\u002Faspnet\u002Fi18n\u002Finternationalization","01.csharp\u002F11.aspnet\u002F05.i18n\u002F01.internationalization",{"title":938,"path":939,"stem":940},"Humanizer: людиномовні рядки у .NET","\u002Fcsharp\u002Faspnet\u002Fi18n\u002Fhumanizer","01.csharp\u002F11.aspnet\u002F05.i18n\u002F02.humanizer",{"title":942,"icon":943,"path":944,"stem":945,"children":946,"page":59},"Кешування","i-lucide-layers","\u002Fcsharp\u002Faspnet\u002Fcaching","01.csharp\u002F11.aspnet\u002F06.caching",[947,951,955,959,963],{"title":948,"path":949,"stem":950},"Огляд кешування: чотири рівні і коли що обирати","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Fcaching","01.csharp\u002F11.aspnet\u002F06.caching\u002F01.caching",{"title":952,"path":953,"stem":954},"IMemoryCache: кеш в оперативній пам'яті","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Fmemory-cache","01.csharp\u002F11.aspnet\u002F06.caching\u002F02.memory-cache",{"title":956,"path":957,"stem":958},"IDistributedCache і Redis: розподілений кеш","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Fdistributed-cache","01.csharp\u002F11.aspnet\u002F06.caching\u002F03.distributed-cache",{"title":960,"path":961,"stem":962},"Response Cache: HTTP-кешування через Cache-Control","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Fresponse-cache","01.csharp\u002F11.aspnet\u002F06.caching\u002F04.response-cache",{"title":964,"path":965,"stem":966},"Output Cache: серверний кеш HTTP-відповідей (.NET 7+)","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Foutput-cache","01.csharp\u002F11.aspnet\u002F06.caching\u002F05.output-cache",{"title":968,"icon":969,"path":970,"stem":971,"children":972,"page":59},"Тестування","i-lucide-test-tube","\u002Fcsharp\u002Faspnet\u002Ftesting","01.csharp\u002F11.aspnet\u002F07.testing",[973,977,981,985,989,993,997,1001,1005,1009,1013,1017,1021,1025,1029,1033,1037,1041,1045,1049,1053],{"title":974,"path":975,"stem":976},"Що таке тестування? Від інтуїції до науки","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fwhat-is-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F01.what-is-testing",{"title":978,"path":979,"stem":980},"Піраміда тестування — Стратегія, а не Догма","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftesting-pyramid","01.csharp\u002F11.aspnet\u002F07.testing\u002F02.testing-pyramid",{"title":982,"path":983,"stem":984},"Дві Школи Тестування — Лондон проти Детройту","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftesting-schools","01.csharp\u002F11.aspnet\u002F07.testing\u002F03.testing-schools",{"title":986,"path":987,"stem":988},"TDD та BDD — Тести як Дизайн-інструмент","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftdd-and-bdd","01.csharp\u002F11.aspnet\u002F07.testing\u002F04.tdd-and-bdd",{"title":990,"path":991,"stem":992},"Що саме тестувати — Техніки аналізу та Циклomatична складність","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fwhat-to-test","01.csharp\u002F11.aspnet\u002F07.testing\u002F05.what-to-test",{"title":994,"path":995,"stem":996},"Тестові Фреймворки — Навіщо вони і що всередині","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftest-frameworks","01.csharp\u002F11.aspnet\u002F07.testing\u002F06.test-frameworks",{"title":998,"path":999,"stem":1000},"xUnit — Факти, Теорії та Lifecycle тестів","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fxunit-basics","01.csharp\u002F11.aspnet\u002F07.testing\u002F07.xunit-basics",{"title":1002,"path":1003,"stem":1004},"xUnit Advanced — Fixtures, Кастомізація та Розширення","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fxunit-advanced","01.csharp\u002F11.aspnet\u002F07.testing\u002F08.xunit-advanced",{"title":1006,"path":1007,"stem":1008},"Moq — Глибоке занурення в мокування","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fmocking-with-moq","01.csharp\u002F11.aspnet\u002F07.testing\u002F09.mocking-with-moq",{"title":1010,"path":1011,"stem":1012},"Тестування Баз Даних — EF Core, SQLite та Testcontainers","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fdatabase-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F10.database-testing",{"title":1014,"path":1015,"stem":1016},"Integration Testing — Частина 1 [Теорія та WebApplicationFactory]","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fintegration-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F11.integration-testing",{"title":1018,"path":1019,"stem":1020},"Інтеграційне тестування — Практика","\u002Fcsharp\u002Faspnet\u002Ftesting\u002F11a.integration-testing-practice","01.csharp\u002F11.aspnet\u002F07.testing\u002F11a.integration-testing-practice",{"title":1022,"path":1023,"stem":1024},"Integration Testing — Частина 2 [Просунуті Сценарії та Testcontainers]","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fintegration-testing-advanced","01.csharp\u002F11.aspnet\u002F07.testing\u002F12.integration-testing-advanced",{"title":1026,"path":1027,"stem":1028},"Професійний Postman: Колекції, Змінні та GitHub Інтеграція","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fpostman-professional","01.csharp\u002F11.aspnet\u002F07.testing\u002F13.postman-professional",{"title":1030,"path":1031,"stem":1032},"HttpClient у Тестах Частина 1: Архітектура та MockHttpMessageHandler","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fhttpclient-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F14.httpclient-testing",{"title":1034,"path":1035,"stem":1036},"HttpClient у Тестах Частина 2: WireMock.Net та Resilience","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fwiremock-net","01.csharp\u002F11.aspnet\u002F07.testing\u002F15.wiremock-net",{"title":1038,"path":1039,"stem":1040},"Патерни та Анти-патерни Тестування: Test Smells","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftesting-patterns","01.csharp\u002F11.aspnet\u002F07.testing\u002F16.testing-patterns",{"title":1042,"path":1043,"stem":1044},"Просунуті інструменти: Time, Snapshots та Властивості","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fadvanced-testing-tools","01.csharp\u002F11.aspnet\u002F07.testing\u002F17.advanced-testing-tools",{"title":1046,"path":1047,"stem":1048},"Тестування Архітектури з NetArchTest","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Farchitecture-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F18.architecture-testing",{"title":1050,"path":1051,"stem":1052},"Тестування Продуктивності: BenchmarkDotNet, NBomber та k6","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fperformance-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F19.performance-testing",{"title":1054,"path":1055,"stem":1056},"Залишок плану для курсу \"Тестування ASP.NET Minimal API\"","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fremaining_plan","01.csharp\u002F11.aspnet\u002F07.testing\u002Fremaining_plan",{"title":1058,"icon":1059,"path":1060,"stem":1061,"children":1062,"page":59},"Платежі","i-lucide-credit-card","\u002Fcsharp\u002Faspnet\u002Fpayments","01.csharp\u002F11.aspnet\u002F08.payments",[1063,1067,1071,1075,1079,1083,1087,1091,1095,1099,1103,1107],{"title":1064,"path":1065,"stem":1066},"Основи платіжної інфраструктури","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fpayment-fundamentals","01.csharp\u002F11.aspnet\u002F08.payments\u002F01.payment-fundamentals",{"title":1068,"path":1069,"stem":1070},"Методи оплати в Україні","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fpayment-methods-ukraine","01.csharp\u002F11.aspnet\u002F08.payments\u002F02.payment-methods-ukraine",{"title":1072,"path":1073,"stem":1074},"PCI DSS та безпека платежів","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fpci-dss-security","01.csharp\u002F11.aspnet\u002F08.payments\u002F03.pci-dss-security",{"title":1076,"path":1077,"stem":1078},"Архітектура платіжної підсистеми","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fpayment-architecture","01.csharp\u002F11.aspnet\u002F08.payments\u002F04.payment-architecture",{"title":1080,"path":1081,"stem":1082},"Інтеграція LiqPay (ПриватБанк)","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fliqpay-integration","01.csharp\u002F11.aspnet\u002F08.payments\u002F05.liqpay-integration",{"title":1084,"path":1085,"stem":1086},"Інтеграція Monobank Acquiring API","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fmonobank-acquiring","01.csharp\u002F11.aspnet\u002F08.payments\u002F06.monobank-acquiring",{"title":1088,"path":1089,"stem":1090},"Інтеграція Stripe","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fstripe-integration","01.csharp\u002F11.aspnet\u002F08.payments\u002F07.stripe-integration",{"title":1092,"path":1093,"stem":1094},"Webhooks — глибоке занурення","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fwebhooks-deep-dive","01.csharp\u002F11.aspnet\u002F08.payments\u002F08.webhooks-deep-dive",{"title":1096,"path":1097,"stem":1098},"Підписки та рекурентні платежі","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fsubscriptions-recurring","01.csharp\u002F11.aspnet\u002F08.payments\u002F09.subscriptions-recurring",{"title":1100,"path":1101,"stem":1102},"Повернення коштів та диспути","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Frefunds-disputes","01.csharp\u002F11.aspnet\u002F08.payments\u002F10.refunds-disputes",{"title":1104,"path":1105,"stem":1106},"Тестування платіжних інтеграцій","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Ftesting-payments","01.csharp\u002F11.aspnet\u002F08.payments\u002F11.testing-payments",{"title":1108,"path":1109,"stem":1110},"Чекліст виходу в Production","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fproduction-checklist","01.csharp\u002F11.aspnet\u002F08.payments\u002F12.production-checklist",{"title":1112,"icon":1113,"items":1114,"path":1127,"stem":1128,"children":1129,"page":59},"Популярні бібліотеки","lucide:box",[1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126],"01.fluent-validation","02.mapster","03.erroror-result-pattern","04.serilog","05.mediatr","06.polly","07.health-checks","08.feature-management","09.fluent-email","10.quest-pdf","11.bogus","12.humanizer-guard","\u002Fcsharp\u002Faspnet\u002Flibraries","01.csharp\u002F11.aspnet\u002F09.libraries",[1130,1134,1138,1142,1146,1150,1154,1158,1162,1166,1170,1174,1178],{"title":1131,"path":1132,"stem":1133},"Валідація з FluentValidation в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Ffluent-validation","01.csharp\u002F11.aspnet\u002F09.libraries\u002F01.fluent-validation",{"title":1135,"path":1136,"stem":1137},"Маппінг об","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fmapster","01.csharp\u002F11.aspnet\u002F09.libraries\u002F02.mapster",{"title":1139,"path":1140,"stem":1141},"Обробка помилок з ErrorOr та Result Pattern в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Ferroror-result-pattern","01.csharp\u002F11.aspnet\u002F09.libraries\u002F03.erroror-result-pattern",{"title":1143,"path":1144,"stem":1145},"Структуроване логування з Serilog в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fserilog","01.csharp\u002F11.aspnet\u002F09.libraries\u002F04.serilog",{"title":1147,"path":1148,"stem":1149},"CQRS та Mediator з MediatR в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fmediatr","01.csharp\u002F11.aspnet\u002F09.libraries\u002F05.mediatr",{"title":1151,"path":1152,"stem":1153},"Відмовостійкість з Polly в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fpolly","01.csharp\u002F11.aspnet\u002F09.libraries\u002F06.polly",{"title":1155,"path":1156,"stem":1157},"Health Checks в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fhealth-checks","01.csharp\u002F11.aspnet\u002F09.libraries\u002F07.health-checks",{"title":1159,"path":1160,"stem":1161},"Feature Management та Feature Flags в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Ffeature-management","01.csharp\u002F11.aspnet\u002F09.libraries\u002F08.feature-management",{"title":1163,"path":1164,"stem":1165},"Відправка Email з FluentEmail в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Ffluent-email","01.csharp\u002F11.aspnet\u002F09.libraries\u002F09.fluent-email",{"title":1167,"path":1168,"stem":1169},"Генерація PDF з QuestPDF в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fquest-pdf","01.csharp\u002F11.aspnet\u002F09.libraries\u002F10.quest-pdf",{"title":1171,"path":1172,"stem":1173},"Генерація тестових даних з Bogus в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fbogus","01.csharp\u002F11.aspnet\u002F09.libraries\u002F11.bogus",{"title":1175,"path":1176,"stem":1177},"Humanizer та Guard Clauses в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fhumanizer-guard","01.csharp\u002F11.aspnet\u002F09.libraries\u002F12.humanizer-guard",{"title":1179,"path":1180,"stem":1181},"План модуля 10.libraries — Популярні бібліотеки ASP.NET","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fplan","01.csharp\u002F11.aspnet\u002F09.libraries\u002Fplan",{"title":1183,"icon":1184,"path":1185,"stem":1186,"children":1187,"page":59},"Razor Pages","i-lucide-layout-template","\u002Fcsharp\u002Faspnet\u002Frazor-pages","01.csharp\u002F11.aspnet\u002F10.razor-pages",[1188,1192,1196,1200,1204,1208],{"title":1189,"path":1190,"stem":1191},"Від Minimal API до Razor Pages: концептуальний перехід","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Ffrom-minimal-api","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F01.from-minimal-api",{"title":1193,"path":1194,"stem":1195},"PageModel: логіка сторінки Razor Pages","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Fpage-model","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F02.page-model",{"title":1197,"path":1198,"stem":1199},"Razor синтаксис: шаблонізатор у .cshtml","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Frazor-syntax","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F03.razor-syntax",{"title":1201,"path":1202,"stem":1203},"Tag Helpers: типізований HTML","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Ftag-helpers","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F04.tag-helpers",{"title":1205,"path":1206,"stem":1207},"Форми і валідація: повний цикл обробки даних","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Fforms-validation","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F05.forms-validation",{"title":1209,"path":1210,"stem":1211},"Практичний проєкт: TaskManager на Razor Pages","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Fproject-task-manager","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F06.project-task-manager",{"title":1213,"path":1214,"stem":1215,"children":1216,"page":59},"ASP.NET Core MVC","\u002Fcsharp\u002Faspnet\u002Fmvc","01.csharp\u002F11.aspnet\u002F11.mvc",[1217,1221,1225,1229,1233,1237,1241,1245,1249,1253,1257,1261,1265,1269,1273,1277,1281,1285],{"title":1218,"path":1219,"stem":1220},"Патерн MVC: архітектура, що змінила веб","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fmvc-pattern","01.csharp\u002F11.aspnet\u002F11.mvc\u002F01.mvc-pattern",{"title":1222,"path":1223,"stem":1224},"Від Razor Pages до MVC: концептуальний перехід","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Ffrom-razor-pages","01.csharp\u002F11.aspnet\u002F11.mvc\u002F02.from-razor-pages",{"title":1226,"path":1227,"stem":1228},"Controllers та Actions: серце MVC","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fcontrollers-actions","01.csharp\u002F11.aspnet\u002F11.mvc\u002F03.controllers-actions",{"title":1230,"path":1231,"stem":1232},"Маршрутизація в MVC: Convention vs Attribute Routing","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Frouting-mvc","01.csharp\u002F11.aspnet\u002F11.mvc\u002F04.routing-mvc",{"title":1234,"path":1235,"stem":1236},"Model Binding: від HTTP до C#","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fmodel-binding","01.csharp\u002F11.aspnet\u002F11.mvc\u002F05.model-binding",{"title":1238,"path":1239,"stem":1240},"Views, ViewData, ViewBag, TempData і ViewModel","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fviews-viewdata-tempdata","01.csharp\u002F11.aspnet\u002F11.mvc\u002F06.views-viewdata-tempdata",{"title":1242,"path":1243,"stem":1244},"Filters: аспектно-орієнтоване програмування в MVC","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Ffilters","01.csharp\u002F11.aspnet\u002F11.mvc\u002F07.filters",{"title":1246,"path":1247,"stem":1248},"Areas: структурування великих застосунків","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fareas","01.csharp\u002F11.aspnet\u002F11.mvc\u002F08.areas",{"title":1250,"path":1251,"stem":1252},"View Components: повторювані незалежні блоки UI","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fview-components","01.csharp\u002F11.aspnet\u002F11.mvc\u002F09.view-components",{"title":1254,"path":1255,"stem":1256},"Display та Editor Templates","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fdisplay-editor-templates","01.csharp\u002F11.aspnet\u002F11.mvc\u002F10.display-editor-templates",{"title":1258,"path":1259,"stem":1260},"Валідація: IValidatableObject та FluentValidation","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fvalidation-advanced","01.csharp\u002F11.aspnet\u002F11.mvc\u002F11.validation-advanced",{"title":1262,"path":1263,"stem":1264},"HTMX: інтерактивність через HTML-атрибути","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fhtmx","01.csharp\u002F11.aspnet\u002F11.mvc\u002F12.htmx",{"title":1266,"path":1267,"stem":1268},"HTMX у ASP.NET Core MVC: серверна інтеграція","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fajax-htmx-mvc","01.csharp\u002F11.aspnet\u002F11.mvc\u002F13.ajax-htmx-mvc",{"title":1270,"path":1271,"stem":1272},"Практичний проєкт: Каталог товарів з HTMX","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fhtmx-project","01.csharp\u002F11.aspnet\u002F11.mvc\u002F14.htmx-project",{"title":1274,"path":1275,"stem":1276},"Завантаження та обробка файлів","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Ffile-upload","01.csharp\u002F11.aspnet\u002F11.mvc\u002F15.file-upload",{"title":1278,"path":1279,"stem":1280},"Глобалізація та Локалізація MVC","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fglobalization-localization","01.csharp\u002F11.aspnet\u002F11.mvc\u002F16.globalization-localization",{"title":1282,"path":1283,"stem":1284},"Підсумковий проєкт: Блог-платформа","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fmvc-project","01.csharp\u002F11.aspnet\u002F11.mvc\u002F17.mvc-project",{"title":1286,"path":1287,"stem":1288},"План курсу: ASP.NET Core MVC","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fplan","01.csharp\u002F11.aspnet\u002F11.mvc\u002Fplan",{"title":1290,"path":1291,"stem":1292,"children":1293,"page":59},"Web Api","\u002Fcsharp\u002Faspnet\u002Fweb-api","01.csharp\u002F11.aspnet\u002F12.web-api",[1294,1298,1302,1306,1310,1314,1318,1322,1326,1330,1334,1338,1342],{"title":1295,"path":1296,"stem":1297},"Від Minimal API до Controller-based API","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Ffrom-minimal-api-to-controllers","01.csharp\u002F11.aspnet\u002F12.web-api\u002F01.from-minimal-api-to-controllers",{"title":1299,"path":1300,"stem":1301},"ControllerBase, ActionResult\u003CT> та Response Types","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fcontroller-base-actionresult","01.csharp\u002F11.aspnet\u002F12.web-api\u002F02.controller-base-actionresult",{"title":1303,"path":1304,"stem":1305},"Content Negotiation - JSON, XML та власні форматери","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fcontent-negotiation","01.csharp\u002F11.aspnet\u002F12.web-api\u002F03.content-negotiation",{"title":1307,"path":1308,"stem":1309},"Версіонування API","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fapi-versioning","01.csharp\u002F11.aspnet\u002F12.web-api\u002F04.api-versioning",{"title":1311,"path":1312,"stem":1313},"ProblemDetails та структурована обробка помилок","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fproblemdetails-error-handling","01.csharp\u002F11.aspnet\u002F12.web-api\u002F05.problemdetails-error-handling",{"title":1315,"path":1316,"stem":1317},"Фільтри у Web API контексті","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Ffilters-for-api","01.csharp\u002F11.aspnet\u002F12.web-api\u002F06.filters-for-api",{"title":1319,"path":1320,"stem":1321},"Пагінація, фільтрація та сортування","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fpagination-filtering-sorting","01.csharp\u002F11.aspnet\u002F12.web-api\u002F07.pagination-filtering-sorting",{"title":1323,"path":1324,"stem":1325},"HATEOAS та Resource Expansion","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fhateoas-resource-expansion","01.csharp\u002F11.aspnet\u002F12.web-api\u002F08.hateoas-resource-expansion",{"title":1327,"path":1328,"stem":1329},"Гібридна архітектура - Minimal API + Controllers","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fminimal-api-vs-controllers-hybrid","01.csharp\u002F11.aspnet\u002F12.web-api\u002F09.minimal-api-vs-controllers-hybrid",{"title":1331,"path":1332,"stem":1333},"Документація API - Swashbuckle, NSwag та генерація клієнтів","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fapi-documentation-generation","01.csharp\u002F11.aspnet\u002F12.web-api\u002F10.api-documentation-generation",{"title":1335,"path":1336,"stem":1337},"Health Checks та моніторинг API","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fhealth-checks-monitoring","01.csharp\u002F11.aspnet\u002F12.web-api\u002F11.health-checks-monitoring",{"title":1339,"path":1340,"stem":1341},"Підсумковий проєкт - Production-Ready REST API","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fweb-api-project","01.csharp\u002F11.aspnet\u002F12.web-api\u002F12.web-api-project",{"title":1343,"path":1344,"stem":1345},"План курсу: ASP.NET Core Web API (Controllers)","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fplan","01.csharp\u002F11.aspnet\u002F12.web-api\u002Fplan",{"title":1347,"icon":1348,"path":1349,"stem":1350,"children":1351,"page":59},"Моніторинг","i-lucide-activity","\u002Fcsharp\u002Faspnet\u002Fmonitoring","01.csharp\u002F11.aspnet\u002F13.monitoring",[1352,1356,1360],{"title":1353,"path":1354,"stem":1355},"Спостережуваність: від console.log до production-систем","\u002Fcsharp\u002Faspnet\u002Fmonitoring\u002Fobservability-intro","01.csharp\u002F11.aspnet\u002F13.monitoring\u002F01.observability-intro",{"title":1357,"path":1358,"stem":1359},"Health Checks: перший рівень observability","\u002Fcsharp\u002Faspnet\u002Fmonitoring\u002Fhealth-checks","01.csharp\u002F11.aspnet\u002F13.monitoring\u002F02.health-checks",{"title":1361,"path":1362,"stem":1363},"Вбудовані метрики .NET 10 та System.Diagnostics.Metrics","\u002Fcsharp\u002Faspnet\u002Fmonitoring\u002Fdotnet-metrics","01.csharp\u002F11.aspnet\u002F13.monitoring\u002F03.dotnet-metrics",{"title":1365,"icon":1366,"path":1367,"stem":1368,"children":1369,"page":59},"Desktop UI","i-lucide-app-window","\u002Fcsharp\u002Fdesktop-ui","01.csharp\u002F12.desktop-ui",[1370,1374,1378,1382,1386,1390,1394,1398,1402,1406,1410,1414,1418,1422,1426,1430,1434,1438,1442,1446,1450,1454,1458,1462,1466,1470,1474,1478,1482,1486,1490,1494,1498,1502,1506,1510,1514,1518,1522,1526,1530,1534,1538,1542,1546,1550,1554,1558,1562,1566,1570,1574,1578,1582,1586,1590,1594,1598,1602,1606,1610,1614,1618,1622,1626,1630,1634,1638,1642,1646,1650],{"title":1371,"path":1372,"stem":1373},"Що таке десктопна розробка?","\u002Fcsharp\u002Fdesktop-ui\u002Fwhat-is-desktop-dev","01.csharp\u002F12.desktop-ui\u002F01.what-is-desktop-dev",{"title":1375,"path":1376,"stem":1377},"Архітектура WPF — як влаштований графічний інтерфейс","\u002Fcsharp\u002Fdesktop-ui\u002Fwpf-architecture","01.csharp\u002F12.desktop-ui\u002F02.wpf-architecture",{"title":1379,"path":1380,"stem":1381},"Перший WPF-проєкт — від нуля до вікна","\u002Fcsharp\u002Fdesktop-ui\u002Ffirst-wpf-app","01.csharp\u002F12.desktop-ui\u002F03.first-wpf-app",{"title":1383,"path":1384,"stem":1385},"Перший Avalonia-проєкт: WPF для всіх платформ","\u002Fcsharp\u002Fdesktop-ui\u002F03a.first-avalonia-app","01.csharp\u002F12.desktop-ui\u002F03a.first-avalonia-app",{"title":1387,"path":1388,"stem":1389},"XAML: декларативний інтерфейс","\u002Fcsharp\u002Fdesktop-ui\u002Fxaml-basics","01.csharp\u002F12.desktop-ui\u002F04.xaml-basics",{"title":1391,"path":1392,"stem":1393},"Fluent UI у WPF — сучасний дизайн Windows 11","\u002Fcsharp\u002Fdesktop-ui\u002F04a.wpf-fluent-ui","01.csharp\u002F12.desktop-ui\u002F04a.wpf-fluent-ui",{"title":1395,"path":1396,"stem":1397},"WPF UI — сучасна бібліотека Fluent контролів","\u002Fcsharp\u002Fdesktop-ui\u002F04b.wpf-ui-library","01.csharp\u002F12.desktop-ui\u002F04b.wpf-ui-library",{"title":1399,"path":1400,"stem":1401},"HandyControl — велика бібліотека UI контролів для WPF","\u002Fcsharp\u002Fdesktop-ui\u002F04c.handycontrol-library","01.csharp\u002F12.desktop-ui\u002F04c.handycontrol-library",{"title":1403,"path":1404,"stem":1405},"Простори імен та ресурси XAML","\u002Fcsharp\u002Fdesktop-ui\u002Fxaml-namespaces-resources","01.csharp\u002F12.desktop-ui\u002F05.xaml-namespaces-resources",{"title":1407,"path":1408,"stem":1409},"XAML в Avalonia: ключові відмінності від WPF","\u002Fcsharp\u002Fdesktop-ui\u002F05a.avalonia-xaml-differences","01.csharp\u002F12.desktop-ui\u002F05a.avalonia-xaml-differences",{"title":1411,"path":1412,"stem":1413},"Розширення розмітки XAML (Markup Extensions)","\u002Fcsharp\u002Fdesktop-ui\u002Fxaml-markup-extensions","01.csharp\u002F12.desktop-ui\u002F06.xaml-markup-extensions",{"title":1415,"path":1416,"stem":1417},"Панелі Layout: StackPanel, WrapPanel, DockPanel","\u002Fcsharp\u002Fdesktop-ui\u002Flayout-panels-part1","01.csharp\u002F12.desktop-ui\u002F07.layout-panels-part1",{"title":1419,"path":1420,"stem":1421},"Grid, Canvas, UniformGrid","\u002Fcsharp\u002Fdesktop-ui\u002Flayout-panels-part2","01.csharp\u002F12.desktop-ui\u002F07.layout-panels-part2",{"title":1423,"path":1424,"stem":1425},"Просунуті техніки Layout","\u002Fcsharp\u002Fdesktop-ui\u002Flayout-advanced","01.csharp\u002F12.desktop-ui\u002F08.layout-advanced",{"title":1427,"path":1428,"stem":1429},"Адаптивний Layout та найкращі практики","\u002Fcsharp\u002Fdesktop-ui\u002Flayout-responsive","01.csharp\u002F12.desktop-ui\u002F09.layout-responsive",{"title":1431,"path":1432,"stem":1433},"Layout в Avalonia: відмінності та нові можливості","\u002Fcsharp\u002Fdesktop-ui\u002F09a.layout-avalonia","01.csharp\u002F12.desktop-ui\u002F09a.layout-avalonia",{"title":1435,"path":1436,"stem":1437},"Button, Image, ProgressBar та інші базові контроли","\u002Fcsharp\u002Fdesktop-ui\u002Fbasic-controls","01.csharp\u002F12.desktop-ui\u002F10.basic-controls",{"title":1439,"path":1440,"stem":1441},"Контроли в Avalonia: відмінності від WPF","\u002Fcsharp\u002Fdesktop-ui\u002F10a.controls-avalonia","01.csharp\u002F12.desktop-ui\u002F10a.controls-avalonia",{"title":1443,"path":1444,"stem":1445},"Текстові контроли — TextBlock, TextBox, RichTextBox","\u002Fcsharp\u002Fdesktop-ui\u002Ftext-controls","01.csharp\u002F12.desktop-ui\u002F11.text-controls",{"title":1447,"path":1448,"stem":1449},"Контроли вибору — CheckBox, RadioButton, ComboBox, ListBox, DatePicker","\u002Fcsharp\u002Fdesktop-ui\u002Fselection-controls","01.csharp\u002F12.desktop-ui\u002F12.selection-controls",{"title":1451,"path":1452,"stem":1453},"Content Model — GroupBox, Expander, TabControl, StatusBar","\u002Fcsharp\u002Fdesktop-ui\u002Fcontent-controls","01.csharp\u002F12.desktop-ui\u002F13.content-controls",{"title":1455,"path":1456,"stem":1457},"UI\u002FUX принципи десктопних застосунків","\u002Fcsharp\u002Fdesktop-ui\u002F13a.ui-ux-principles","01.csharp\u002F12.desktop-ui\u002F13a.ui-ux-principles",{"title":1459,"path":1460,"stem":1461},"Dependency Properties — Концепція та Value Resolution","\u002Fcsharp\u002Fdesktop-ui\u002Fdependency-properties-part1","01.csharp\u002F12.desktop-ui\u002F14.dependency-properties-part1",{"title":1463,"path":1464,"stem":1465},"Avalonia Property System — StyledProperty та DirectProperty","\u002Fcsharp\u002Fdesktop-ui\u002F14a.avalonia-property-system","01.csharp\u002F12.desktop-ui\u002F14a.avalonia-property-system",{"title":1467,"path":1468,"stem":1469},"Attached Properties — Властивості без меж","\u002Fcsharp\u002Fdesktop-ui\u002Fattached-properties","01.csharp\u002F12.desktop-ui\u002F15.attached-properties",{"title":1471,"path":1472,"stem":1473},"Routed Events — Маршрутизація подій у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Frouted-events","01.csharp\u002F12.desktop-ui\u002F16.routed-events",{"title":1475,"path":1476,"stem":1477},"Data Binding — Від Code-Behind до Декларативності","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-binding-basics-part1","01.csharp\u002F12.desktop-ui\u002F17.data-binding-basics-part1",{"title":1479,"path":1480,"stem":1481},"INotifyPropertyChanged — Живе оновлення UI","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-binding-basics-part2","01.csharp\u002F12.desktop-ui\u002F17.data-binding-basics-part2",{"title":1483,"path":1484,"stem":1485},"Compiled Bindings в Avalonia — Безпека на етапі компіляції","\u002Fcsharp\u002Fdesktop-ui\u002F17a.avalonia-compiled-bindings","01.csharp\u002F12.desktop-ui\u002F17a.avalonia-compiled-bindings",{"title":1487,"path":1488,"stem":1489},"Просунутий Data Binding — ElementName, RelativeSource, MultiBinding","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-binding-advanced","01.csharp\u002F12.desktop-ui\u002F18.data-binding-advanced",{"title":1491,"path":1492,"stem":1493},"Value Converters — Перетворення типів даних у Data Binding","\u002Fcsharp\u002Fdesktop-ui\u002Fvalue-converters","01.csharp\u002F12.desktop-ui\u002F19.value-converters",{"title":1495,"path":1496,"stem":1497},"Data Templates — Візуалізація об'єктів у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-templates","01.csharp\u002F12.desktop-ui\u002F20.data-templates",{"title":1499,"path":1500,"stem":1501},"Collections Binding Part 1 — ObservableCollection та ItemsControl","\u002Fcsharp\u002Fdesktop-ui\u002Fcollections-binding-part1","01.csharp\u002F12.desktop-ui\u002F21.collections-binding-part1",{"title":1503,"path":1504,"stem":1505},"Collections Binding Part 2 — ICollectionView, Filtering, Sorting та Virtualization","\u002Fcsharp\u002Fdesktop-ui\u002Fcollections-binding-part2","01.csharp\u002F12.desktop-ui\u002F21.collections-binding-part2",{"title":1507,"path":1508,"stem":1509},"MVVM Pattern — Від Spaghetti Code до архітектури","\u002Fcsharp\u002Fdesktop-ui\u002Fmvvm-pattern","01.csharp\u002F12.desktop-ui\u002F22.mvvm-pattern",{"title":1511,"path":1512,"stem":1513},"ViewModel Implementation — Від BaseViewModel до валідації","\u002Fcsharp\u002Fdesktop-ui\u002Fviewmodel-implementation","01.csharp\u002F12.desktop-ui\u002F23.viewmodel-implementation",{"title":1515,"path":1516,"stem":1517},"Commands — Від event handlers до декларативних команд","\u002Fcsharp\u002Fdesktop-ui\u002Fcommands","01.csharp\u002F12.desktop-ui\u002F24.commands",{"title":1519,"path":1520,"stem":1521},"MVVM Toolkit — MVVM без boilerplate через Source Generators","\u002Fcsharp\u002Fdesktop-ui\u002Fmvvm-toolkit","01.csharp\u002F12.desktop-ui\u002F25.mvvm-toolkit",{"title":1523,"path":1524,"stem":1525},"Messenger Pattern — Комунікація між ViewModel без прямих посилань","\u002Fcsharp\u002Fdesktop-ui\u002Fmessenger-pattern","01.csharp\u002F12.desktop-ui\u002F26.messenger-pattern",{"title":1527,"path":1528,"stem":1529},"Стилі WPF — CSS для десктопу","\u002Fcsharp\u002Fdesktop-ui\u002Fstyles-basics","01.csharp\u002F12.desktop-ui\u002F27.styles-basics",{"title":1531,"path":1532,"stem":1533},"CSS-like стилі Avalonia","\u002Fcsharp\u002Fdesktop-ui\u002F27a.avalonia-css-styling","01.csharp\u002F12.desktop-ui\u002F27a.avalonia-css-styling",{"title":1535,"path":1536,"stem":1537},"Control Templates — Частина 1. Концепція та TemplateBinding","\u002Fcsharp\u002Fdesktop-ui\u002Fcontrol-templates-part1","01.csharp\u002F12.desktop-ui\u002F28.control-templates-part1",{"title":1539,"path":1540,"stem":1541},"Control Templates — Частина 2. Named Parts та ContentPresenter","\u002Fcsharp\u002Fdesktop-ui\u002Fcontrol-templates-part2","01.csharp\u002F12.desktop-ui\u002F28.control-templates-part2",{"title":1543,"path":1544,"stem":1545},"Control Themes в Avalonia — нова ера стилізації","\u002Fcsharp\u002Fdesktop-ui\u002F28a.avalonia-control-themes","01.csharp\u002F12.desktop-ui\u002F28a.avalonia-control-themes",{"title":1547,"path":1548,"stem":1549},"Triggers та Visual State Manager у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Ftriggers-visual-states","01.csharp\u002F12.desktop-ui\u002F29.triggers-visual-states",{"title":1551,"path":1552,"stem":1553},"Pseudo-classes в Avalonia — замість WPF Triggers","\u002Fcsharp\u002Fdesktop-ui\u002F29a.avalonia-pseudo-classes","01.csharp\u002F12.desktop-ui\u002F29a.avalonia-pseudo-classes",{"title":1555,"path":1556,"stem":1557},"Теми та ресурсні словники у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fresources-themes","01.csharp\u002F12.desktop-ui\u002F30.resources-themes",{"title":1559,"path":1560,"stem":1561},"Avalonia Themes — Fluent Design та система тематизації","\u002Fcsharp\u002Fdesktop-ui\u002F30a.avalonia-themes-fluent","01.csharp\u002F12.desktop-ui\u002F30a.avalonia-themes-fluent",{"title":1563,"path":1564,"stem":1565},"Контроли колекцій — глибоке занурення","\u002Fcsharp\u002Fdesktop-ui\u002Fcollection-controls","01.csharp\u002F12.desktop-ui\u002F31.collection-controls",{"title":1567,"path":1568,"stem":1569},"DataGrid — колонки та базове відображення","\u002Fcsharp\u002Fdesktop-ui\u002Fdatagrid-part1","01.csharp\u002F12.desktop-ui\u002F32.datagrid-part1",{"title":1571,"path":1572,"stem":1573},"DataGrid — сортування, фільтрація, редагування","\u002Fcsharp\u002Fdesktop-ui\u002Fdatagrid-part2","01.csharp\u002F12.desktop-ui\u002F32.datagrid-part2",{"title":1575,"path":1576,"stem":1577},"TreeView та GridView","\u002Fcsharp\u002Fdesktop-ui\u002Ftreeview-listview","01.csharp\u002F12.desktop-ui\u002F33.treeview-listview",{"title":1579,"path":1580,"stem":1581},"Меню, Toolbar, ContextMenu, StatusBar","\u002Fcsharp\u002Fdesktop-ui\u002Fmenus-toolbars","01.csharp\u002F12.desktop-ui\u002F34.menus-toolbars",{"title":1583,"path":1584,"stem":1585},"Навігація та керування вікнами. Частина 1: вікна та сторінки","\u002Fcsharp\u002Fdesktop-ui\u002Fnavigation-windows-part1","01.csharp\u002F12.desktop-ui\u002F35.navigation-windows-part1",{"title":1587,"path":1588,"stem":1589},"Навігація та керування вікнами. Частина 2: MVVM-навігація","\u002Fcsharp\u002Fdesktop-ui\u002Fnavigation-windows-part2","01.csharp\u002F12.desktop-ui\u002F35.navigation-windows-part2",{"title":1591,"path":1592,"stem":1593},"Avalonia — Навігація та діалоги","\u002Fcsharp\u002Fdesktop-ui\u002F35a.avalonia-navigation-dialogs","01.csharp\u002F12.desktop-ui\u002F35a.avalonia-navigation-dialogs",{"title":1595,"path":1596,"stem":1597},"Діалоги та File Pickers у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fdialogs-file-pickers","01.csharp\u002F12.desktop-ui\u002F36.dialogs-file-pickers",{"title":1599,"path":1600,"stem":1601},"UserControl: компонентний підхід у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fuser-controls","01.csharp\u002F12.desktop-ui\u002F37.user-controls",{"title":1603,"path":1604,"stem":1605},"Custom Controls: Lookless Controls у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fcustom-controls","01.csharp\u002F12.desktop-ui\u002F38.custom-controls",{"title":1607,"path":1608,"stem":1609},"Avalonia TemplatedControl — Lookless Controls","\u002Fcsharp\u002Fdesktop-ui\u002F38a.avalonia-templated-controls","01.csharp\u002F12.desktop-ui\u002F38a.avalonia-templated-controls",{"title":1611,"path":1612,"stem":1613},"Анімації у WPF: Storyboard та Easing Functions","\u002Fcsharp\u002Fdesktop-ui\u002Fanimations-transitions","01.csharp\u002F12.desktop-ui\u002F39.animations-transitions",{"title":1615,"path":1616,"stem":1617},"Анімації в Avalonia","\u002Fcsharp\u002Fdesktop-ui\u002F39a.avalonia-animations","01.csharp\u002F12.desktop-ui\u002F39a.avalonia-animations",{"title":1619,"path":1620,"stem":1621},"2D Графіка та Мультимедіа у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fmedia-graphics","01.csharp\u002F12.desktop-ui\u002F40.media-graphics",{"title":1623,"path":1624,"stem":1625},"Dependency Injection у WPF та Avalonia","\u002Fcsharp\u002Fdesktop-ui\u002Fdi-integration","01.csharp\u002F12.desktop-ui\u002F41.di-integration",{"title":1627,"path":1628,"stem":1629},"SQLite та EF Core у десктопних додатках","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-persistence-part1","01.csharp\u002F12.desktop-ui\u002F42.data-persistence-part1",{"title":1631,"path":1632,"stem":1633},"Repository Pattern та Unit of Work","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-persistence-part2","01.csharp\u002F12.desktop-ui\u002F43.data-persistence-part2",{"title":1635,"path":1636,"stem":1637},"Тестування ViewModels","\u002Fcsharp\u002Fdesktop-ui\u002Fviewmodel-testing","01.csharp\u002F12.desktop-ui\u002F44.viewmodel-testing",{"title":1639,"path":1640,"stem":1641},"Avalonia Headless Testing — тестування UI без вікон","\u002Fcsharp\u002Fdesktop-ui\u002F44a.avalonia-headless-testing","01.csharp\u002F12.desktop-ui\u002F44a.avalonia-headless-testing",{"title":1643,"path":1644,"stem":1645},"Кросплатформна розробка з Avalonia","\u002Fcsharp\u002Fdesktop-ui\u002Favalonia-cross-platform","01.csharp\u002F12.desktop-ui\u002F45.avalonia-cross-platform",{"title":1647,"path":1648,"stem":1649},"Пакування та розгортання Avalonia додатків","\u002Fcsharp\u002Fdesktop-ui\u002Favalonia-packaging-deployment","01.csharp\u002F12.desktop-ui\u002F46.avalonia-packaging-deployment",{"title":1651,"path":1652,"stem":1653},"Розгортання WPF застосунків","\u002Fcsharp\u002Fdesktop-ui\u002Fwpf-packaging-deployment","01.csharp\u002F12.desktop-ui\u002F47.wpf-packaging-deployment",{"title":1655,"icon":658,"path":1656,"stem":1657,"children":1658,"page":59},"Network Programming","\u002Fcsharp\u002Fnetwork-programming","01.csharp\u002F13.network-programming",[1659,1663,1667,1671,1675,1679,1683,1687,1691,1695,1699],{"title":1660,"path":1661,"stem":1662},"Основи комп'ютерних мереж","\u002Fcsharp\u002Fnetwork-programming\u002Ffoundations","01.csharp\u002F13.network-programming\u002F01.foundations",{"title":1664,"path":1665,"stem":1666},"Модель OSI та стек TCP\u002FIP","\u002Fcsharp\u002Fnetwork-programming\u002Fosi-model","01.csharp\u002F13.network-programming\u002F02.osi-model",{"title":1668,"path":1669,"stem":1670},"IP-протокол та адресація","\u002Fcsharp\u002Fnetwork-programming\u002Fip-addressing","01.csharp\u002F13.network-programming\u002F03.ip-addressing",{"title":1672,"path":1673,"stem":1674},"UDP — протокол без з'єднання","\u002Fcsharp\u002Fnetwork-programming\u002Fudp","01.csharp\u002F13.network-programming\u002F05.udp",{"title":1676,"path":1677,"stem":1678},"UDP Broadcast та Multicast","\u002Fcsharp\u002Fnetwork-programming\u002Fudp-broadcast-multicast","01.csharp\u002F13.network-programming\u002F06.udp-broadcast-multicast",{"title":1680,"path":1681,"stem":1682},"HTTP — протокол вебу","\u002Fcsharp\u002Fnetwork-programming\u002Fhttp-fundamentals","01.csharp\u002F13.network-programming\u002F07.http-fundamentals",{"title":1684,"path":1685,"stem":1686},"HttpListener — вбудований HTTP-сервер .NET","\u002Fcsharp\u002Fnetwork-programming\u002F07a.http-listener","01.csharp\u002F13.network-programming\u002F07a.http-listener",{"title":1688,"path":1689,"stem":1690},"HTTP Advanced — cookies, аутентифікація та HTTPS","\u002Fcsharp\u002Fnetwork-programming\u002Fhttp-advanced","01.csharp\u002F13.network-programming\u002F08.http-advanced",{"title":1692,"path":1693,"stem":1694},"SMTP та протоколи електронної пошти","\u002Fcsharp\u002Fnetwork-programming\u002Fsmtp","01.csharp\u002F13.network-programming\u002F09.smtp",{"title":1696,"path":1697,"stem":1698},"WebSocket — повнодуплексний протокол реального часу","\u002Fcsharp\u002Fnetwork-programming\u002Fwebsockets","01.csharp\u002F13.network-programming\u002F10.websockets",{"title":1700,"path":1701,"stem":1702},"TLS\u002FSSL — криптографічний захист мережевих з'єднань","\u002Fcsharp\u002Fnetwork-programming\u002Ftls-ssl","01.csharp\u002F13.network-programming\u002F11.tls-ssl",{"title":1704,"path":1705,"stem":1706},"C# & .NET: The Ultimate Roadmap","\u002Fcsharp\u002Froadmap","01.csharp\u002Froadmap",{"title":1708,"icon":1709,"path":1710,"stem":1711,"children":1712,"page":59},"C++","i-devicon-cplusplus","\u002Fcpp","02.cpp",[1713,1717,1721,1725,1729,1733,1737,1741,1745,1748,1752,1756,1760,1764,1768,1772,1776,1780,1784,1788,1792,1796,1800,1804,1808,1812,1816,1820,1824,1828,1832,1836,1840,1844,1848,1852,1856,1860,1864,1868,1872,1876,1880,1884,1888,1892,1896,1900,1904,1908,1912,1916,1920,1924,1928,1932,1936,1940,1944,1948,1952,1956,1960,1964,1968,1972,1976,1980,1984,1988,1992,1996,2000,2004,2008,2012,2016,2020,2024,2028,2032,2036,2040,2044,2048,2052,2056,2060,2064,2068,2072,2076,2080],{"title":1714,"path":1715,"stem":1716},"Вступ у програмування та алгоритми","\u002Fcpp\u002Fintro-algorithms","02.cpp\u002F01.intro-algorithms",{"title":1718,"path":1719,"stem":1720},"Code Style: угоди про оформлення коду","\u002Fcpp\u002Fcode-style","02.cpp\u002F02.code-style",{"title":1722,"path":1723,"stem":1724},"Середовище розробки та перший проєкт","\u002Fcpp\u002Fide-setup","02.cpp\u002F03.ide-setup",{"title":1726,"path":1727,"stem":1728},"Вивід даних на екран","\u002Fcpp\u002Fdata-output","02.cpp\u002F04.data-output",{"title":1730,"path":1731,"stem":1732},"Типи даних, змінні та константи","\u002Fcpp\u002Fdata-types-variables","02.cpp\u002F05.data-types-variables",{"title":1734,"path":1735,"stem":1736},"Ввід даних з клавіатури","\u002Fcpp\u002Fdata-input","02.cpp\u002F06.data-input",{"title":1738,"path":1739,"stem":1740},"Оператори, перетворення типів та логічні операції","\u002Fcpp\u002Foperators-type-conversion","02.cpp\u002F07.operators-type-conversion",{"title":1742,"path":1743,"stem":1744},"Цикли","\u002Fcpp\u002Floops","02.cpp\u002F08.loops",{"title":32,"path":1746,"stem":1747},"\u002Fcpp\u002Farrays","02.cpp\u002F09.arrays",{"title":1749,"path":1750,"stem":1751},"Алгоритми сортування та аналіз складності","\u002Fcpp\u002Fsorting","02.cpp\u002F10.sorting",{"title":1753,"path":1754,"stem":1755},"Алгоритми пошуку","\u002Fcpp\u002Fsearching","02.cpp\u002F11.searching",{"title":1757,"path":1758,"stem":1759},"Функції: основи","\u002Fcpp\u002Ffunctions-basics","02.cpp\u002F12.functions-basics",{"title":1761,"path":1762,"stem":1763},"Функції: прототипи, область видимості та додаткові можливості","\u002Fcpp\u002Ffunctions-scope","02.cpp\u002F13.functions-scope",{"title":1765,"path":1766,"stem":1767},"Функції: перевантаження та шаблони","\u002Fcpp\u002Ffunctions-overloading-templates","02.cpp\u002F14.functions-overloading-templates",{"title":1769,"path":1770,"stem":1771},"Вказівники: основи","\u002Fcpp\u002Fpointers-basics","02.cpp\u002F15.pointers-basics",{"title":1773,"path":1774,"stem":1775},"Посилання (References)","\u002Fcpp\u002Freferences","02.cpp\u002F16.references",{"title":1777,"path":1778,"stem":1779},"Вказівники, const і масиви","\u002Fcpp\u002Fpointers-const-arrays","02.cpp\u002F17.pointers-const-arrays",{"title":1781,"path":1782,"stem":1783},"Адресна арифметика","\u002Fcpp\u002Fpointer-arithmetic","02.cpp\u002F18.pointer-arithmetic",{"title":1785,"path":1786,"stem":1787},"Динамічна пам'ять","\u002Fcpp\u002Fdynamic-memory","02.cpp\u002F19.dynamic-memory",{"title":1789,"path":1790,"stem":1791},"Вказівники типу void","\u002Fcpp\u002Fvoid-pointers","02.cpp\u002F20.void-pointers",{"title":1793,"path":1794,"stem":1795},"Вказівники на вказівники","\u002Fcpp\u002Fpointers-to-pointers","02.cpp\u002F21.pointers-to-pointers",{"title":1797,"path":1798,"stem":1799},"Оператор доступу до членів через вказівник (->)","\u002Fcpp\u002Fmember-access-operator","02.cpp\u002F22.member-access-operator",{"title":1801,"path":1802,"stem":1803},"Цикл for-each (Range-based for)","\u002Fcpp\u002Fforeach-loop","02.cpp\u002F23.foreach-loop",{"title":1805,"path":1806,"stem":1807},"Вказівники на функції","\u002Fcpp\u002Ffunction-pointers","02.cpp\u002F24.function-pointers",{"title":1809,"path":1810,"stem":1811},"Лямбда-вирази","\u002Fcpp\u002Flambdas","02.cpp\u002F25.lambdas",{"title":1813,"path":1814,"stem":1815},"Лямбда-захоплення","\u002Fcpp\u002Flambda-captures","02.cpp\u002F26.lambda-captures",{"title":1817,"path":1818,"stem":1819},"Еліпсис","\u002Fcpp\u002Fellipsis","02.cpp\u002F27.ellipsis",{"title":1821,"path":1822,"stem":1823},"Безпечні альтернативи еліпсису","\u002Fcpp\u002F27a.ellipsis","02.cpp\u002F27a.ellipsis",{"title":1825,"path":1826,"stem":1827},"Аргументи командного рядка","\u002Fcpp\u002Fcommand-line-arguments","02.cpp\u002F28.command-line-arguments",{"title":1829,"path":1830,"stem":1831},"Перерахування (enum)","\u002Fcpp\u002Fenum","02.cpp\u002F29.enum",{"title":1833,"path":1834,"stem":1835},"Класи-перерахування (enum class)","\u002Fcpp\u002Fenum-class","02.cpp\u002F30.enum-class",{"title":1837,"path":1838,"stem":1839},"Псевдоніми типів (typedef і using)","\u002Fcpp\u002Ftype-aliases","02.cpp\u002F31.type-aliases",{"title":1841,"path":1842,"stem":1843},"Системи числення та двійкова арифметика","\u002Fcpp\u002Fnumber-systems","02.cpp\u002F32.number-systems",{"title":1845,"path":1846,"stem":1847},"Структури (struct): агрегування даних","\u002Fcpp\u002Fstruct","02.cpp\u002F33.struct",{"title":1849,"path":1850,"stem":1851},"Структури у функціях","\u002Fcpp\u002Fstruct-functions","02.cpp\u002F34.struct-functions",{"title":1853,"path":1854,"stem":1855},"Масиви структур і вкладені структури","\u002Fcpp\u002Fstruct-arrays","02.cpp\u002F35.struct-arrays",{"title":1857,"path":1858,"stem":1859},"Патерни struct та межі застосування","\u002Fcpp\u002Fstruct-patterns","02.cpp\u002F36.struct-patterns",{"title":1861,"path":1862,"stem":1863},"Символи та таблиця ASCII","\u002Fcpp\u002Fascii-characters","02.cpp\u002F37.ascii-characters",{"title":1865,"path":1866,"stem":1867},"Unicode та кодування UTF","\u002Fcpp\u002Funicode-utf","02.cpp\u002F38.unicode-utf",{"title":1869,"path":1870,"stem":1871},"C-style рядки","\u002Fcpp\u002Fc-strings","02.cpp\u002F39.c-strings",{"title":1873,"path":1874,"stem":1875},"Вступ до std::string","\u002Fcpp\u002Fstd-string-intro","02.cpp\u002F40.std-string-intro",{"title":1877,"path":1878,"stem":1879},"Довжина, ємність та доступ до символів std::string","\u002Fcpp\u002Fstd-string-capacity-access","02.cpp\u002F41.std-string-capacity-access",{"title":1881,"path":1882,"stem":1883},"Модифікація std::string: присвоювання, додавання, вставка, видалення та заміна","\u002Fcpp\u002Fstd-string-modification","02.cpp\u002F42.std-string-modification",{"title":1885,"path":1886,"stem":1887},"Пошук у std::string: find, npos та практичні патерни","\u002Fcpp\u002Fstd-string-search","02.cpp\u002F43.std-string-search",{"title":1889,"path":1890,"stem":1891},"std::string_view: невласницький погляд на рядок без копіювання","\u002Fcpp\u002Fstd-string-view","02.cpp\u002F44.std-string-view",{"title":1893,"path":1894,"stem":1895},"Об'єднання (union): один блок пам'яті, кілька інтерпретацій","\u002Fcpp\u002Funion","02.cpp\u002F45.union",{"title":1897,"path":1898,"stem":1899},"Організація коду: файли, препроцесор, простори імен","\u002Fcpp\u002Fmultifile-programs","02.cpp\u002F46.multifile-programs",{"title":1901,"path":1902,"stem":1903},"Робота з файлами: C-стиль (stdio.h)","\u002Fcpp\u002Fc-style-files","02.cpp\u002F47.c-style-files",{"title":1905,"path":1906,"stem":1907},"Робота з файлами: C++-стиль (fstream)","\u002Fcpp\u002Fcpp-style-files","02.cpp\u002F48.cpp-style-files",{"title":1909,"path":1910,"stem":1911},"Введення в ООП: від процедур до об'єктів","\u002Fcpp\u002Foop-intro","02.cpp\u002F49.oop-intro",{"title":1913,"path":1914,"stem":1915},"Класи, об'єкти та методи","\u002Fcpp\u002Fclasses-objects-methods","02.cpp\u002F50.classes-objects-methods",{"title":1917,"path":1918,"stem":1919},"Специфікатори доступу та інкапсуляція","\u002Fcpp\u002Faccess-specifiers-encapsulation","02.cpp\u002F51.access-specifiers-encapsulation",{"title":1921,"path":1922,"stem":1923},"Конструктори: гарантована ініціалізація об'єктів","\u002Fcpp\u002Fconstructors","02.cpp\u002F52.constructors",{"title":1925,"path":1926,"stem":1927},"Списки ініціалізації та делегуючі конструктори","\u002Fcpp\u002Finit-lists-delegating","02.cpp\u002F53.init-lists-delegating",{"title":1929,"path":1930,"stem":1931},"Деструктори та ідіома RAII","\u002Fcpp\u002Fdestructors-raii","02.cpp\u002F54.destructors-raii",{"title":1933,"path":1934,"stem":1935},"Прихований покажчик this","\u002Fcpp\u002Fthis-pointer","02.cpp\u002F55.this-pointer",{"title":1937,"path":1938,"stem":1939},"Розподіл класу на заголовковий файл та файл реалізації","\u002Fcpp\u002Fclass-header-source","02.cpp\u002F56.class-header-source",{"title":1941,"path":1942,"stem":1943},"Класи та const","\u002Fcpp\u002Fconst-classes","02.cpp\u002F57.const-classes",{"title":1945,"path":1946,"stem":1947},"Статичні члени класу","\u002Fcpp\u002Fstatic-members","02.cpp\u002F58.static-members",{"title":1949,"path":1950,"stem":1951},"Конструктор копіювання та запобігання копіюванню","\u002Fcpp\u002Fcopy-constructor","02.cpp\u002F59.copy-constructor",{"title":1953,"path":1954,"stem":1955},"Дружні функції та класи","\u002Fcpp\u002Ffriend-functions-classes","02.cpp\u002F60.friend-functions-classes",{"title":1957,"path":1958,"stem":1959},"Анонімні об'єкти та вкладені типи","\u002Fcpp\u002Fanonymous-objects-nested-types","02.cpp\u002F61.anonymous-objects-nested-types",{"title":1961,"path":1962,"stem":1963},"Вимірювання часу виконання: RAII-таймер","\u002Fcpp\u002Ftiming-raii-timer","02.cpp\u002F62.timing-raii-timer",{"title":1965,"path":1966,"stem":1967},"Перевантаження операторів: основи та арифметика","\u002Fcpp\u002Foperator-overloading-basics","02.cpp\u002F63.operator-overloading-basics",{"title":1969,"path":1970,"stem":1971},"Перевантаження операторів: методи класу та спеціальні оператори","\u002Fcpp\u002Foperator-overloading-methods","02.cpp\u002F64.operator-overloading-methods",{"title":1973,"path":1974,"stem":1975},"Приведення типів, explicit та delete","\u002Fcpp\u002Ftypecast-explicit-delete","02.cpp\u002F65.typecast-explicit-delete",{"title":1977,"path":1978,"stem":1979},"Глибоке копіювання та оператор присвоювання","\u002Fcpp\u002Fdeep-copy-assignment","02.cpp\u002F66.deep-copy-assignment",{"title":1981,"path":1982,"stem":1983},"Зв'язки між об'єктами: композиція та агрегація","\u002Fcpp\u002Fcomposition-aggregation","02.cpp\u002F67.composition-aggregation",{"title":1985,"path":1986,"stem":1987},"Асоціація та залежність між об","\u002Fcpp\u002Fassociation-dependency","02.cpp\u002F68.association-dependency",{"title":1989,"path":1990,"stem":1991},"Контейнерні класи та `std::initializer_list`","\u002Fcpp\u002Fcontainer-classes-initializer-list","02.cpp\u002F69.container-classes-initializer-list",{"title":1993,"path":1994,"stem":1995},"Вступ до наслідування: базові поняття та відношення «is-a»","\u002Fcpp\u002Finheritance-intro","02.cpp\u002F70.inheritance-intro",{"title":1997,"path":1998,"stem":1999},"Конструктори, деструктори та порядок ініціалізації в ієрархіях","\u002Fcpp\u002Finheritance-constructors-destructors","02.cpp\u002F71.inheritance-constructors-destructors",{"title":2001,"path":2002,"stem":2003},"Специфікатор `protected` та види наслідування","\u002Fcpp\u002Finheritance-access-specifiers","02.cpp\u002F72.inheritance-access-specifiers",{"title":2005,"path":2006,"stem":2007},"Перевизначення методів та приховування імен","\u002Fcpp\u002Fmethod-overriding-hiding","02.cpp\u002F73.method-overriding-hiding",{"title":2009,"path":2010,"stem":2011},"Множинне наслідування та проблема ромба","\u002Fcpp\u002Fmultiple-inheritance-diamond","02.cpp\u002F74.multiple-inheritance-diamond",{"title":2013,"path":2014,"stem":2015},"Вказівники на базовий клас та віртуальні функції","\u002Fcpp\u002Fvirtual-functions-polymorphism","02.cpp\u002F75.virtual-functions-polymorphism",{"title":2017,"path":2018,"stem":2019},"Специфікатори override, final та віртуальні деструктори","\u002Fcpp\u002Foverride-final-virtual-destructors","02.cpp\u002F76.override-final-virtual-destructors",{"title":2021,"path":2022,"stem":2023},"Внутрішні механізми поліморфізму: vtable, vptr та зв'язування","\u002Fcpp\u002Fvirtual-table-binding","02.cpp\u002F77.virtual-table-binding",{"title":2025,"path":2026,"stem":2027},"Абстрактні класи та чисті віртуальні функції","\u002Fcpp\u002Fabstract-classes-interfaces","02.cpp\u002F78.abstract-classes-interfaces",{"title":2029,"path":2030,"stem":2031},"Зрізка об'єктів, віртуальне наслідування та поліморфний вивід","\u002Fcpp\u002Fslicing-virtual-base-io","02.cpp\u002F79.slicing-virtual-base-io",{"title":2033,"path":2034,"stem":2035},"Динамічне приведення типів (`dynamic_cast`) та RTTI","\u002Fcpp\u002Fdynamic-cast-rtti","02.cpp\u002F80.dynamic-cast-rtti",{"title":2037,"path":2038,"stem":2039},"Шаблони функцій: узагальнене програмування","\u002Fcpp\u002Ffunction-templates","02.cpp\u002F81.function-templates",{"title":2041,"path":2042,"stem":2043},"Шаблони класів та NTTP-параметри","\u002Fcpp\u002Fclass-templates-nttp","02.cpp\u002F82.class-templates-nttp",{"title":2045,"path":2046,"stem":2047},"Повна (явна) спеціалізація шаблонів","\u002Fcpp\u002Ffull-template-specialization","02.cpp\u002F83.full-template-specialization",{"title":2049,"path":2050,"stem":2051},"Часткова спеціалізація шаблонів класів","\u002Fcpp\u002Fpartial-template-specialization","02.cpp\u002F84.partial-template-specialization",{"title":2053,"path":2054,"stem":2055},"Механізм винятків: try, catch, throw та розкручування стеку","\u002Fcpp\u002Fexceptions-basics","02.cpp\u002F85.exceptions-basics",{"title":2057,"path":2058,"stem":2059},"Ієрархія std::exception та власні класи винятків","\u002Fcpp\u002Fexception-hierarchy-custom","02.cpp\u002F86.exception-hierarchy-custom",{"title":2061,"path":2062,"stem":2063},"Повторне генерування винятків та функціональний try-блок","\u002Fcpp\u002Frethrow-function-try","02.cpp\u002F87.rethrow-function-try",{"title":2065,"path":2066,"stem":2067},"Безпека винятків, noexcept та деструктори","\u002Fcpp\u002Fsafety-noexcept","02.cpp\u002F88.safety-noexcept",{"title":2069,"path":2070,"stem":2071},"Стаття 89 — Власні структури даних: стек та черга","\u002Fcpp\u002Fcustom-stack-queue","02.cpp\u002F89.custom-stack-queue",{"title":2073,"path":2074,"stem":2075},"Стаття 90 — Власні структури даних: однозв'язаний список","\u002Fcpp\u002Flinked-list","02.cpp\u002F90.linked-list",{"title":2077,"path":2078,"stem":2079},"Стаття 91 — Власні структури даних: бінарне дерево пошуку","\u002Fcpp\u002Fbinary-search-tree","02.cpp\u002F91.binary-search-tree",{"title":2081,"path":2082,"stem":2083},"Стаття 92 — Власні структури даних: хеш-таблиця","\u002Fcpp\u002Fhash-table","02.cpp\u002F92.hash-table",{"title":2085,"icon":2086,"path":2087,"stem":2088,"children":2089,"page":59},"JavaScript","i-devicon-javascript","\u002Fjavascript","03.javascript",[2090,2116,2170,2192,2496,2534,2552],{"title":2091,"icon":2092,"path":2093,"stem":2094,"children":2095,"page":59},"Events","i-lucide-mouse-pointer-click","\u002Fjavascript\u002Fevents","03.javascript\u002F01.events",[2096,2100,2104,2108,2112],{"title":2097,"path":2098,"stem":2099},"Вступ до подій браузера","\u002Fjavascript\u002Fevents\u002Fintro","03.javascript\u002F01.events\u002F01.intro",{"title":2101,"path":2102,"stem":2103},"Бульбашковий механізм (Bubbling) та занурення (Capturing)","\u002Fjavascript\u002Fevents\u002Fbubbling-capturing","03.javascript\u002F01.events\u002F02.bubbling-capturing",{"title":2105,"path":2106,"stem":2107},"Делегування подій (Event Delegation)","\u002Fjavascript\u002Fevents\u002Fdelegate-events","03.javascript\u002F01.events\u002F03.delegate-events",{"title":2109,"path":2110,"stem":2111},"Типові дії браузера та preventDefault()","\u002Fjavascript\u002Fevents\u002Fprevent-default","03.javascript\u002F01.events\u002F04.prevent-default",{"title":2113,"path":2114,"stem":2115},"Запуск користувацьких подій (Custom Events)","\u002Fjavascript\u002Fevents\u002Fcustom-events","03.javascript\u002F01.events\u002F05.custom-events",{"title":2117,"icon":2118,"path":2119,"stem":2120,"children":2121,"page":59},"Network","i-lucide-globe","\u002Fjavascript\u002Fnetwork","03.javascript\u002F02.network",[2122,2126,2130,2134,2138,2142,2146,2150,2154,2158,2162,2166],{"title":2123,"path":2124,"stem":2125},"Fetch API - Сучасний підхід до HTTP-запитів","\u002Fjavascript\u002Fnetwork\u002F01-fetch-api","03.javascript\u002F02.network\u002F01-fetch-api",{"title":2127,"path":2128,"stem":2129},"FormData - Робота з формами та файлами","\u002Fjavascript\u002Fnetwork\u002F02-formdata","03.javascript\u002F02.network\u002F02-formdata",{"title":2131,"path":2132,"stem":2133},"Відстеження прогресу завантаження","\u002Fjavascript\u002Fnetwork\u002F03-download-progress","03.javascript\u002F02.network\u002F03-download-progress",{"title":2135,"path":2136,"stem":2137},"Переривання fetch-запитів","\u002Fjavascript\u002Fnetwork\u002F04-abort-requests","03.javascript\u002F02.network\u002F04-abort-requests",{"title":2139,"path":2140,"stem":2141},"CORS - Запити між різними джерелами","\u002Fjavascript\u002Fnetwork\u002F05-cors","03.javascript\u002F02.network\u002F05-cors",{"title":2143,"path":2144,"stem":2145},"Fetch API - Повний довідник опцій","\u002Fjavascript\u002Fnetwork\u002F06-fetch-options","03.javascript\u002F02.network\u002F06-fetch-options",{"title":2147,"path":2148,"stem":2149},"URL Objects - Робота з посиланнями","\u002Fjavascript\u002Fnetwork\u002F07-url-objects","03.javascript\u002F02.network\u002F07-url-objects",{"title":2151,"path":2152,"stem":2153},"XMLHttpRequest - AJAX та низькорівневі запити","\u002Fjavascript\u002Fnetwork\u002F08-xmlhttprequest","03.javascript\u002F02.network\u002F08-xmlhttprequest",{"title":2155,"path":2156,"stem":2157},"Відновлюване завантаження файлів","\u002Fjavascript\u002Fnetwork\u002F09-resumable-upload","03.javascript\u002F02.network\u002F09-resumable-upload",{"title":2159,"path":2160,"stem":2161},"Cookies, document.cookie та світ після \"Cookiepocalypse\"","\u002Fjavascript\u002Fnetwork\u002F10-cookies","03.javascript\u002F02.network\u002F10-cookies",{"title":2163,"path":2164,"stem":2165},"js-cookie: Керування Cookies без Болю","\u002Fjavascript\u002Fnetwork\u002F11-js-cookie","03.javascript\u002F02.network\u002F11-js-cookie",{"title":2167,"path":2168,"stem":2169},"Axios: Потужний HTTP-клієнт для JavaScript","\u002Fjavascript\u002Fnetwork\u002F12-axios","03.javascript\u002F02.network\u002F12-axios",{"title":2171,"icon":2172,"path":2173,"stem":2174,"children":2175,"page":59},"Bom","i-lucide-monitor","\u002Fjavascript\u002Fbom","03.javascript\u002F03.bom",[2176,2180,2184,2188],{"title":2177,"path":2178,"stem":2179},"LocalStorage, SessionStorage та patterns збереження даних","\u002Fjavascript\u002Fbom\u002F01-localstorage","03.javascript\u002F03.bom\u002F01-localstorage",{"title":2181,"path":2182,"stem":2183},"Location Object - Керування адресою сторінки","\u002Fjavascript\u002Fbom\u002F02-location-object","03.javascript\u002F03.bom\u002F02-location-object",{"title":2185,"path":2186,"stem":2187},"History API - Керування історією браузера","\u002Fjavascript\u002Fbom\u002F03-history-api","03.javascript\u002F03.bom\u002F03-history-api",{"title":2189,"path":2190,"stem":2191},"Navigator Object - Ідентифікація та Можливості Пристрою","\u002Fjavascript\u002Fbom\u002F04-navigator-object","03.javascript\u002F03.bom\u002F04-navigator-object",{"title":2193,"icon":2194,"path":2195,"stem":2196,"children":2197},"React","i-devicon-react","\u002Fjavascript\u002Freact","03.javascript\u002F04.react\u002Findex",[2198,2199,2203,2207,2211,2215,2278,2313,2465],{"title":2193,"path":2195,"stem":2196},{"title":2200,"path":2201,"stem":2202},"Робота з Формами в React","\u002Fjavascript\u002Freact\u002Freact-forms","03.javascript\u002F04.react\u002F01.react-forms",{"title":2204,"path":2205,"stem":2206},"React Hook Form: Професійна Робота з Формами","\u002Fjavascript\u002Freact\u002Freact-hook-form","03.javascript\u002F04.react\u002F02.react-hook-form",{"title":2208,"path":2209,"stem":2210},"React Hook Form: Глибоке Розуміння Архітектури та Оптимізації","\u002Fjavascript\u002Freact\u002Freact-hook-form-new","03.javascript\u002F04.react\u002F02.react-hook-form-new",{"title":2212,"path":2213,"stem":2214},"Axios та React: Професійна Архітектура Запитів","\u002Fjavascript\u002Freact\u002Fdata-fetching-axios","03.javascript\u002F04.react\u002F03.data-fetching-axios",{"title":2216,"icon":132,"path":2217,"stem":2218,"children":2219},"Tanstack Query","\u002Fjavascript\u002Freact\u002Ftanstack-query","03.javascript\u002F04.react\u002F04.tanstack-query\u002Findex",[2220,2222,2226,2230,2234,2238,2242,2246,2250,2254,2258,2262,2266,2270,2274],{"title":2221,"path":2217,"stem":2218},"TanStack Query: Майстерність Керування Станом Сервера",{"title":2223,"path":2224,"stem":2225},"Парадигма Server State: Чому useEffect недостатньо","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fserver-state-paradigm","03.javascript\u002F04.react\u002F04.tanstack-query\u002F01.server-state-paradigm",{"title":2227,"path":2228,"stem":2229},"Встановлення та Налаштування: Фундамент","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Finstallation-and-devtools","03.javascript\u002F04.react\u002F04.tanstack-query\u002F02.installation-and-devtools",{"title":2231,"path":2232,"stem":2233},"Основи Запитів та Магія Ключів","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fquery-basics-and-keys","03.javascript\u002F04.react\u002F04.tanstack-query\u002F03.query-basics-and-keys",{"title":2235,"path":2236,"stem":2237},"Синхронізація Даних: Життєвий Цикл Запиту","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fdata-synchronization","03.javascript\u002F04.react\u002F04.tanstack-query\u002F04.data-synchronization",{"title":2239,"path":2240,"stem":2241},"Мутації та Інвалідація: Зміна Даних","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fmutations-and-invalidation","03.javascript\u002F04.react\u002F04.tanstack-query\u002F05.mutations-and-invalidation",{"title":2243,"path":2244,"stem":2245},"Оптимістичні Оновлення: Швидше за Світло","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Foptimistic-updates","03.javascript\u002F04.react\u002F04.tanstack-query\u002F06.optimistic-updates",{"title":2247,"path":2248,"stem":2249},"Пагінація та Infinite Scroll","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fpagination-and-load-more","03.javascript\u002F04.react\u002F04.tanstack-query\u002F07.pagination-and-load-more",{"title":2251,"path":2252,"stem":2253},"Просунуті Патерни та Оптимізація","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fadvanced-patterns","03.javascript\u002F04.react\u002F04.tanstack-query\u002F08.advanced-patterns",{"title":2255,"path":2256,"stem":2257},"Архітектура та Best Practices","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Farchitecture-and-best-practices","03.javascript\u002F04.react\u002F04.tanstack-query\u002F09.architecture-and-best-practices",{"title":2259,"path":2260,"stem":2261},"Server-Side Rendering (SSR) та Гідратація","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fserver-side-rendering","03.javascript\u002F04.react\u002F04.tanstack-query\u002F10.server-side-rendering",{"title":2263,"path":2264,"stem":2265},"Стратегії Тестування","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Ftesting-strategies","03.javascript\u002F04.react\u002F04.tanstack-query\u002F11.testing-strategies",{"title":2267,"path":2268,"stem":2269},"Аутентифікація та Обробка Помилок","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fauthentication-and-errors","03.javascript\u002F04.react\u002F04.tanstack-query\u002F12.authentication-and-errors",{"title":2271,"path":2272,"stem":2273},"React Suspense та Майбутнє","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Freact-suspense","03.javascript\u002F04.react\u002F04.tanstack-query\u002F13.react-suspense",{"title":2275,"path":2276,"stem":2277},"Глибоке Занурення в Продуктивність","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fperformance-deep-dive","03.javascript\u002F04.react\u002F04.tanstack-query\u002F14.performance-deep-dive",{"title":2279,"icon":2194,"path":2280,"stem":2281,"children":2282},"React Router","\u002Fjavascript\u002Freact\u002Freact-router","03.javascript\u002F04.react\u002F05.react-router\u002Findex",[2283,2285,2289,2293,2297,2301,2305,2309],{"title":2284,"path":2280,"stem":2281},"React Router: Навігаційна система сучасного вебу",{"title":2286,"path":2287,"stem":2288},"Налаштування та Базовий Роутинг","\u002Fjavascript\u002Freact\u002Freact-router\u002Fsetup-and-basic-routing","03.javascript\u002F04.react\u002F05.react-router\u002F01.setup-and-basic-routing",{"title":2290,"path":2291,"stem":2292},"Динамічна Навігація","\u002Fjavascript\u002Freact\u002Freact-router\u002Fnavigation-and-links","03.javascript\u002F04.react\u002F05.react-router\u002F02.navigation-and-links",{"title":2294,"path":2295,"stem":2296},"Вкладені Маршрути та Макети","\u002Fjavascript\u002Freact\u002Freact-router\u002Fnested-routes-and-layouts","03.javascript\u002F04.react\u002F05.react-router\u002F03.nested-routes-and-layouts",{"title":2298,"path":2299,"stem":2300},"Динамічні Маршрути та Параметри","\u002Fjavascript\u002Freact\u002Freact-router\u002Fdynamic-routing","03.javascript\u002F04.react\u002F05.react-router\u002F04.dynamic-routing",{"title":2302,"path":2303,"stem":2304},"Data APIs: Loaders та Actions","\u002Fjavascript\u002Freact\u002Freact-router\u002Fdata-loading","03.javascript\u002F04.react\u002F05.react-router\u002F05.data-loading",{"title":2306,"path":2307,"stem":2308},"Просунуті Патерни","\u002Fjavascript\u002Freact\u002Freact-router\u002Fadvanced-patterns","03.javascript\u002F04.react\u002F05.react-router\u002F06.advanced-patterns",{"title":2310,"path":2311,"stem":2312},"Legacy Routing: Компонентний підхід","\u002Fjavascript\u002Freact\u002Freact-router\u002Flegacy-routing","03.javascript\u002F04.react\u002F05.react-router\u002F07.legacy-routing",{"title":2314,"icon":132,"path":2315,"stem":2316,"children":2317},"Redux","\u002Fjavascript\u002Freact\u002Fredux","03.javascript\u002F04.react\u002F06.redux\u002Findex",[2318,2320,2336,2365,2374,2395,2411,2440],{"title":2319,"path":2315,"stem":2316},"Redux: Еволюція управління станом",{"title":14,"icon":15,"path":2321,"stem":2322,"children":2323,"page":59},"\u002Fjavascript\u002Freact\u002Fredux\u002Ffundamentals","03.javascript\u002F04.react\u002F06.redux\u002F01.fundamentals",[2324,2328,2332],{"title":2325,"path":2326,"stem":2327},"Вступ до State Management","\u002Fjavascript\u002Freact\u002Fredux\u002Ffundamentals\u002Fintro-state-management","03.javascript\u002F04.react\u002F06.redux\u002F01.fundamentals\u002F01.intro-state-management",{"title":2329,"path":2330,"stem":2331},"Філософія Redux та Три Принципи","\u002Fjavascript\u002Freact\u002Fredux\u002Ffundamentals\u002Fredux-philosophy","03.javascript\u002F04.react\u002F06.redux\u002F01.fundamentals\u002F02.redux-philosophy",{"title":2333,"path":2334,"stem":2335},"Чисті функції та Іммутабельність","\u002Fjavascript\u002Freact\u002Fredux\u002Ffundamentals\u002Fpure-functions-immutability","03.javascript\u002F04.react\u002F06.redux\u002F01.fundamentals\u002F03.pure-functions-immutability",{"title":2337,"icon":132,"path":2338,"stem":2339,"children":2340,"page":59},"Classic Redux","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux",[2341,2345,2349,2353,2357,2361],{"title":2342,"path":2343,"stem":2344},"Створення Store (Classic Redux)","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Fstore-setup","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F01.store-setup",{"title":2346,"path":2347,"stem":2348},"Actions, Constants та Action Creators","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Factions-constants","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F02.actions-constants",{"title":2350,"path":2351,"stem":2352},"Логіка Reducers","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Freducers","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F03.reducers",{"title":2354,"path":2355,"stem":2356},"Комбінування Reducers (Root Reducer)","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Fdata-flow","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F04.data-flow",{"title":2358,"path":2359,"stem":2360},"Підключення до React (React-Redux)","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Freact-redux-connection","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F05.react-redux-connection",{"title":2362,"path":2363,"stem":2364},"Middleware та Асинхронність (Redux Thunk)","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Fmiddleware-thunk","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F06.middleware-thunk",{"title":2366,"icon":132,"path":2367,"stem":2368,"children":2369,"page":59},"Transition To Rtk","\u002Fjavascript\u002Freact\u002Fredux\u002Ftransition-to-rtk","03.javascript\u002F04.react\u002F06.redux\u002F03.transition-to-rtk",[2370],{"title":2371,"path":2372,"stem":2373},"Проблеми класичного Redux","\u002Fjavascript\u002Freact\u002Fredux\u002Ftransition-to-rtk\u002Fproblems-with-classic","03.javascript\u002F04.react\u002F06.redux\u002F03.transition-to-rtk\u002F01.problems-with-classic",{"title":2375,"icon":132,"path":2376,"stem":2377,"children":2378,"page":59},"Redux Toolkit","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit",[2379,2383,2387,2391],{"title":2380,"path":2381,"stem":2382},"Налаштування Store з configureStore","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit\u002Fconfigure-store","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit\u002F01.configure-store",{"title":2384,"path":2385,"stem":2386},"createSlice: Революція в Redux","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit\u002Fcreate-slice","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit\u002F02.create-slice",{"title":2388,"path":2389,"stem":2390},"Асинхронність з createAsyncThunk","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit\u002Fasync-thunks","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit\u002F03.async-thunks",{"title":2392,"path":2393,"stem":2394},"04. Entity Adapter: Керування нормалізованим станом","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit\u002Fentity-adapter","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit\u002F04.entity-adapter",{"title":2396,"icon":92,"path":2397,"stem":2398,"children":2399,"page":59},"Advanced","\u002Fjavascript\u002Freact\u002Fredux\u002Fadvanced","03.javascript\u002F04.react\u002F06.redux\u002F05.advanced",[2400,2404,2408],{"title":2401,"path":2402,"stem":2403},"Мемоізація та Селектори: Повний Гайд по Reselect","\u002Fjavascript\u002Freact\u002Fredux\u002Fadvanced\u002Fselectors-reselect","03.javascript\u002F04.react\u002F06.redux\u002F05.advanced\u002F01.selectors-reselect",{"title":2405,"path":2406,"stem":2407},"RTK Query: Архітектура Серверного Кешу","\u002Fjavascript\u002Freact\u002Fredux\u002Fadvanced\u002Frtk-query-intro","03.javascript\u002F04.react\u002F06.redux\u002F05.advanced\u002F02.rtk-query-intro",{"title":2255,"path":2409,"stem":2410},"\u002Fjavascript\u002Freact\u002Fredux\u002Fadvanced\u002Farchitecture-best-practices","03.javascript\u002F04.react\u002F06.redux\u002F05.advanced\u002F03.architecture-best-practices",{"title":2412,"icon":132,"path":2413,"stem":2414,"children":2415,"page":59},"Project Kanban","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban",[2416,2420,2424,2428,2432,2436],{"title":2417,"path":2418,"stem":2419},"Проєкт: Kanban Board (Trello Clone)","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Fproject-overview","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F01.project-overview",{"title":2421,"path":2422,"stem":2423},"Налаштування та Типізація","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Fsetup-and-types","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F02.setup-and-types",{"title":2425,"path":2426,"stem":2427},"Board Slice: Серце Дошки","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Fboard-slice","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F03.board-slice",{"title":2429,"path":2430,"stem":2431},"Логіка Drag & Drop","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Fdrag-and-drop-logic","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F04.drag-and-drop-logic",{"title":2433,"path":2434,"stem":2435},"Інтеграція з RTK Query","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Frtk-query-integration","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F05.rtk-query-integration",{"title":2437,"path":2438,"stem":2439},"Optimistic Updates","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Foptimistic-updates","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F06.optimistic-updates",{"title":2441,"icon":132,"path":2442,"stem":2443,"children":2444,"page":59},"Testing","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting","03.javascript\u002F04.react\u002F06.redux\u002F07.testing",[2445,2449,2453,2457,2461],{"title":2446,"path":2447,"stem":2448},"Тестування Redux","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Fintro-testing","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F01.intro-testing",{"title":2450,"path":2451,"stem":2452},"Тестування Reducers","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Ftesting-reducers","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F02.testing-reducers",{"title":2454,"path":2455,"stem":2456},"Тестування Селекторів","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Ftesting-selectors","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F03.testing-selectors",{"title":2458,"path":2459,"stem":2460},"Тестування Компонентів (Integration)","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Ftesting-components","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F04.testing-components",{"title":2462,"path":2463,"stem":2464},"Тестування Async Thunks","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Ftesting-thunks","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F05.testing-thunks",{"title":2466,"icon":132,"path":2467,"stem":2468,"children":2469},"Ui Libraries","\u002Fjavascript\u002Freact\u002Fui-libraries","03.javascript\u002F04.react\u002F07.ui-libraries\u002Findex",[2470,2472,2476,2480,2484,2488,2492],{"title":2471,"path":2467,"stem":2468},"UI Бібліотеки в React",{"title":2473,"path":2474,"stem":2475},"Вступ до UI Бібліотек: Навіщо Винаходити Велосипед Двічі?","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fintroduction-to-ui-libraries","03.javascript\u002F04.react\u002F07.ui-libraries\u002F01.introduction-to-ui-libraries",{"title":2477,"path":2478,"stem":2479},"Філософія shadcn\u002Fui: \"Not a Component Library\"","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-philosophy","03.javascript\u002F04.react\u002F07.ui-libraries\u002F02.shadcn-philosophy",{"title":2481,"path":2482,"stem":2483},"Установка та Налаштування shadcn\u002Fui","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-installation","03.javascript\u002F04.react\u002F07.ui-libraries\u002F03.shadcn-installation",{"title":2485,"path":2486,"stem":2487},"Базові Компоненти shadcn\u002Fui: Фундамент Інтерфейсу","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-components-basics","03.javascript\u002F04.react\u002F07.ui-libraries\u002F04.shadcn-components-basics",{"title":2489,"path":2490,"stem":2491},"Компоненти Форм: Побудова Інтерактивних Form","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-components-forms","03.javascript\u002F04.react\u002F07.ui-libraries\u002F05.shadcn-components-forms",{"title":2493,"path":2494,"stem":2495},"Складні Компоненти: Dialog, Dropdown, Table та Command","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-components-advanced","03.javascript\u002F04.react\u002F07.ui-libraries\u002F06.shadcn-components-advanced",{"title":2497,"icon":2498,"path":2499,"stem":2500,"children":2501,"page":59},"TypeScript","i-devicon-typescript","\u002Fjavascript\u002Ftypescript","03.javascript\u002F05.typescript",[2502,2506,2510,2514,2518,2522,2526,2530],{"title":2503,"path":2504,"stem":2505},"TypeScript: Броня для вашого коду","\u002Fjavascript\u002Ftypescript\u002Fintro-and-basic-types","03.javascript\u002F05.typescript\u002F01.intro-and-basic-types",{"title":2507,"path":2508,"stem":2509},"Майстерність Моделювання Даних: Інтерфейси та Просунуті Типи","\u002Fjavascript\u002Ftypescript\u002Finterfaces-and-advanced-types","03.javascript\u002F05.typescript\u002F02.interfaces-and-advanced-types",{"title":2511,"path":2512,"stem":2513},"Алхімія Типів: Generics та Utility Types","\u002Fjavascript\u002Ftypescript\u002Fgenerics-and-utilities","03.javascript\u002F05.typescript\u002F03.generics-and-utilities",{"title":2515,"path":2516,"stem":2517},"Архітектура та Шаблони: Класи в TypeScript","\u002Fjavascript\u002Ftypescript\u002Fclasses-and-oop","03.javascript\u002F05.typescript\u002F04.classes-and-oop",{"title":2519,"path":2520,"stem":2521},"Продакшн та Екосистема: Advanced Config & Workflow","\u002Fjavascript\u002Ftypescript\u002Fadvanced-patterns-and-config","03.javascript\u002F05.typescript\u002F05.advanced-patterns-and-config",{"title":2523,"path":2524,"stem":2525},"TypeScript у світі React","\u002Fjavascript\u002Ftypescript\u002Freact-basics","03.javascript\u002F05.typescript\u002F06.react-basics",{"title":2527,"path":2528,"stem":2529},"React + TypeScript: Продвинуті патерни","\u002Fjavascript\u002Ftypescript\u002Freact-advanced","03.javascript\u002F05.typescript\u002F07.react-advanced",{"title":2531,"path":2532,"stem":2533},"React + TypeScript: Екосистема та бібліотеки","\u002Fjavascript\u002Ftypescript\u002Freact-ecosystem","03.javascript\u002F05.typescript\u002F08.react-ecosystem",{"title":2535,"icon":2536,"path":2537,"stem":2538,"children":2539,"page":59},"Асинхронність","i-lucide-refresh-cw","\u002Fjavascript\u002Fasync-programming","03.javascript\u002F06.async-programming",[2540,2544,2548],{"title":2541,"path":2542,"stem":2543},"Event Loop: серце асинхронності в JavaScript","\u002Fjavascript\u002Fasync-programming\u002Fevent-loop-fundamentals","03.javascript\u002F06.async-programming\u002F01.event-loop-fundamentals",{"title":2545,"path":2546,"stem":2547},"Task Queue та Microtask Queue: пріоритети виконання","\u002Fjavascript\u002Fasync-programming\u002Ftask-queues","03.javascript\u002F06.async-programming\u002F02.task-queues",{"title":2549,"path":2550,"stem":2551},"Асинхронні патерни: від Callbacks до Async\u002FAwait","\u002Fjavascript\u002Fasync-programming\u002Fasync-patterns","03.javascript\u002F06.async-programming\u002F03.async-patterns",{"title":2553,"path":2554,"stem":2555},"Atomic Design","\u002Fjavascript\u002Fatomic-design","03.javascript\u002F2.atomic-design",{"title":2557,"icon":2558,"path":2559,"stem":2560,"children":2561,"page":59},"Java","i-devicon-java","\u002Fjava","04.java",[2562,2565,2568,2572,2576,2580,2584],{"title":162,"path":2563,"stem":2564},"\u002Fjava\u002Fdata-mapper-part1","04.java\u002F01.data-mapper-part1",{"title":166,"path":2566,"stem":2567},"\u002Fjava\u002Fdata-mapper-part2","04.java\u002F02.data-mapper-part2",{"title":2569,"path":2570,"stem":2571},"Service Layer: Організація бізнес-логіки","\u002Fjava\u002Fservice-layer","04.java\u002F03.service-layer",{"title":2573,"path":2574,"stem":2575},"Rich Domain Model та State Pattern","\u002Fjava\u002Frich-domain-model","04.java\u002F04.rich-domain-model",{"title":2577,"path":2578,"stem":2579},"Патерни для складної бізнес-логіки","\u002Fjava\u002Fbusiness-logic-patterns","04.java\u002F05.business-logic-patterns",{"title":2581,"path":2582,"stem":2583},"Обробка помилок та валідація","\u002Fjava\u002Ferror-handling-validation","04.java\u002F06.error-handling-validation",{"title":2585,"path":2586,"stem":2587,"children":2588,"page":59},"Проектування баз даних","\u002Fjava\u002Fpr2","04.java\u002Fpr2",[2589,2593,2597,2601,2605,2609,2613,2617,2621,2625,2629,2633,2637,2641,2645,2649,2653,2657,2661,2665,2669,2673,2677,2681,2685,2689,2693,2697,2701,2705,2709,2713,2717,2721,2725,2729,2733],{"title":2590,"path":2591,"stem":2592},"Концептуальне моделювання: Мистецтво розуміння предметної області","\u002Fjava\u002Fpr2\u002Fconceptual-modeling","04.java\u002Fpr2\u002F01.conceptual-modeling",{"title":2594,"path":2595,"stem":2596},"Логічне моделювання: Від бізнес-ідей до структур даних","\u002Fjava\u002Fpr2\u002Flogical-modeling","04.java\u002Fpr2\u002F02.logical-modeling",{"title":2598,"path":2599,"stem":2600},"Нормалізація: Гігієна даних та боротьба з аномаліями","\u002Fjava\u002Fpr2\u002Fnormalization","04.java\u002Fpr2\u002F03.normalization",{"title":2602,"path":2603,"stem":2604},"Фізична схема: Від абстракції до DDL","\u002Fjava\u002Fpr2\u002Fphysical-schema","04.java\u002Fpr2\u002F04.physical-schema",{"title":2606,"path":2607,"stem":2608},"Архітектурна класифікація таблиць","\u002Fjava\u002Fpr2\u002Ftable-classification","04.java\u002Fpr2\u002F05.table-classification",{"title":2610,"path":2611,"stem":2612},"Database Migrations: Версіонування схеми з Flyway","\u002Fjava\u002Fpr2\u002Fdatabase-migrations","04.java\u002Fpr2\u002F06.database-migrations",{"title":2614,"path":2615,"stem":2616},"А що, якби це була не реляційна БД?","\u002Fjava\u002Fpr2\u002Fbeyond-relational","04.java\u002Fpr2\u002F07.beyond-relational",{"title":2618,"path":2619,"stem":2620},"Object-Relational Impedance Mismatch: Два світи, що не хочуть дружити","\u002Fjava\u002Fpr2\u002Fimpedance-mismatch","04.java\u002Fpr2\u002F09.impedance-mismatch",{"title":2622,"path":2623,"stem":2624},"JDBC: Перший контакт із базою даних","\u002Fjava\u002Fpr2\u002Fjdbc-fundamentals","04.java\u002Fpr2\u002F10.jdbc-fundamentals",{"title":2626,"path":2627,"stem":2628},"Якість коду: Spotless, SpotBugs та SonarQube","\u002Fjava\u002Fpr2\u002F10a.code-quality","04.java\u002Fpr2\u002F10a.code-quality",{"title":2630,"path":2631,"stem":2632},"Connection Pool: Патерн Object Pool для JDBC-з'єднань","\u002Fjava\u002Fpr2\u002Fconnection-pool","04.java\u002Fpr2\u002F11.connection-pool",{"title":2634,"path":2635,"stem":2636},"Row Data Gateway: Об'єкт як обгортка рядка таблиці","\u002Fjava\u002Fpr2\u002Frow-data-gateway","04.java\u002Fpr2\u002F12.row-data-gateway",{"title":2638,"path":2639,"stem":2640},"Table Data Gateway: Фасад таблиці як архітектурний відступ","\u002Fjava\u002Fpr2\u002Ftable-data-gateway","04.java\u002Fpr2\u002F13.table-data-gateway",{"title":2642,"path":2643,"stem":2644},"Repository + Data Mapper: Правильна шарова архітектура з JDBC","\u002Fjava\u002Fpr2\u002Frepository-data-mapper","04.java\u002Fpr2\u002F14.repository-data-mapper",{"title":2646,"path":2647,"stem":2648},"Identity Map: Кешування сутностей у рамках сесії","\u002Fjava\u002Fpr2\u002Fidentity-map","04.java\u002Fpr2\u002F15.identity-map",{"title":2650,"path":2651,"stem":2652},"Unit of Work: Відстеження змін і координація JDBC-транзакцій","\u002Fjava\u002Fpr2\u002Funit-of-work","04.java\u002Fpr2\u002F16.unit-of-work",{"title":2654,"path":2655,"stem":2656},"Strategy: Замінювані SQL-стратегії для підтримки різних СУБД","\u002Fjava\u002Fpr2\u002Fstrategy-sql","04.java\u002Fpr2\u002F17.strategy-sql",{"title":2658,"path":2659,"stem":2660},"Proxy: Lazy Loading для One-To-Many колекцій","\u002Fjava\u002Fpr2\u002Fproxy-lazy-loading","04.java\u002Fpr2\u002F18.proxy-lazy-loading",{"title":2662,"path":2663,"stem":2664},"Generic Repository через Java Reflection: анотації та динамічний SQL","\u002Fjava\u002Fpr2\u002Fgeneric-repository-reflection","04.java\u002Fpr2\u002F19.generic-repository-reflection",{"title":2666,"path":2667,"stem":2668},"Specification Pattern: Композиція бізнес-правил для складних запитів","\u002Fjava\u002Fpr2\u002Fspecification-pattern","04.java\u002Fpr2\u002F20.specification-pattern",{"title":2670,"path":2671,"stem":2672},"Розширені можливості Specification Pattern: підзапити, агрегації та гібридний підхід","\u002Fjava\u002Fpr2\u002F20a.advanced-specifications","04.java\u002Fpr2\u002F20a.advanced-specifications",{"title":2674,"path":2675,"stem":2676},"Асинхронність у JDBC: Від блокуючих викликів до CompletableFuture","\u002Fjava\u002Fpr2\u002Fasynchronous-jdbc","04.java\u002Fpr2\u002F21.asynchronous-jdbc",{"title":2678,"path":2679,"stem":2680},"Інтеграційне тестування JDBC-репозиторіїв: Embedded H2 та патерн AAA","\u002Fjava\u002Fpr2\u002Fintegration-testing-h2","04.java\u002Fpr2\u002F22.integration-testing-h2",{"title":2682,"path":2683,"stem":2684},"Testcontainers: Тестування з реальною PostgreSQL у Docker-контейнерах","\u002Fjava\u002Fpr2\u002Fintegration-testing-testcontainers","04.java\u002Fpr2\u002F23.integration-testing-testcontainers",{"title":2686,"path":2687,"stem":2688},"Google Guice: Впровадження залежностей у JavaFX-проєкті","\u002Fjava\u002Fpr2\u002Fdependency-injection-guice","04.java\u002Fpr2\u002F24.dependency-injection-guice",{"title":2690,"path":2691,"stem":2692},"JavaFX: Основи побудови графічних інтерфейсів","\u002Fjava\u002Fpr2\u002Fjavafx-fundamentals","04.java\u002Fpr2\u002F25.javafx-fundamentals",{"title":2694,"path":2695,"stem":2696},"Properties та Bindings: Реактивність у JavaFX","\u002Fjava\u002Fpr2\u002Fjavafx-properties-bindings","04.java\u002Fpr2\u002F26.javafx-properties-bindings",{"title":2698,"path":2699,"stem":2700},"MVC vs MVP vs MVVM: Еволюція архітектурних патернів UI","\u002Fjava\u002Fpr2\u002Fui-architecture-patterns","04.java\u002Fpr2\u002F27.ui-architecture-patterns",{"title":2702,"path":2703,"stem":2704},"MVVM на практиці: Побудова ViewModel","\u002Fjava\u002Fpr2\u002Fmvvm-viewmodel-implementation","04.java\u002Fpr2\u002F28.mvvm-viewmodel-implementation",{"title":2706,"path":2707,"stem":2708},"View та Controller: Зв'язування з ViewModel через FXML","\u002Fjava\u002Fpr2\u002Fmvvm-view-controller","04.java\u002Fpr2\u002F29.mvvm-view-controller",{"title":2710,"path":2711,"stem":2712},"Інтеграція MVVM з Guice: Автоматична ін'єкція залежностей","\u002Fjava\u002Fpr2\u002Fmvvm-guice-integration","04.java\u002Fpr2\u002F30.mvvm-guice-integration",{"title":2714,"path":2715,"stem":2716},"Валідація та обробка помилок у MVVM","\u002Fjava\u002Fpr2\u002Fmvvm-validation-error-handling","04.java\u002Fpr2\u002F31.mvvm-validation-error-handling",{"title":2718,"path":2719,"stem":2720},"Навігація та управління екранами у JavaFX MVVM","\u002Fjava\u002Fpr2\u002Fmvvm-navigation-screen-management","04.java\u002Fpr2\u002F32.mvvm-navigation-screen-management",{"title":2722,"path":2723,"stem":2724},"Тестування JavaFX MVVM-додатків","\u002Fjava\u002Fpr2\u002Fmvvm-testing","04.java\u002Fpr2\u002F33.mvvm-testing",{"title":2726,"path":2727,"stem":2728},"Стилізація та теми у JavaFX: CSS та User Experience","\u002Fjava\u002Fpr2\u002Fjavafx-styling-themes","04.java\u002Fpr2\u002F34.javafx-styling-themes",{"title":2730,"path":2731,"stem":2732},"AtlantaFX: Сучасні теми для JavaFX додатків","\u002Fjava\u002Fpr2\u002Fatlantafx-modern-themes","04.java\u002Fpr2\u002F35.atlantafx-modern-themes",{"title":2734,"path":2735,"stem":2736},"Пакування та розповсюдження JavaFX-додатків","\u002Fjava\u002Fpr2\u002Fjar-packaging-distribution","04.java\u002Fpr2\u002F36.jar-packaging-distribution",{"title":2738,"icon":2739,"path":2740,"stem":2741,"children":2742,"page":59},"Python","i-devicon-python","\u002Fpython","05.python",[2743,2747,2750,2754,2758,2762,2766,2770,2774,2778,2782,2786,2790,2794,2798,2859],{"title":2744,"path":2745,"stem":2746},"Модулі, Пакети та Віртуальні Середовища","\u002Fpython\u002Fmodules-packages-venv","05.python\u002F00.modules-packages-venv",{"title":71,"path":2748,"stem":2749},"\u002Fpython\u002Fclasses-objects","05.python\u002F01.classes-objects",{"title":2751,"path":2752,"stem":2753},"Інкапсуляція, Керування Доступом та Властивості","\u002Fpython\u002Fencapsulation","05.python\u002F02.encapsulation",{"title":2755,"path":2756,"stem":2757},"Наслідування, MRO та суперсила super()","\u002Fpython\u002Finheritance-mro","05.python\u002F03.inheritance-mro",{"title":2759,"path":2760,"stem":2761},"Абстракція — ABC проти Статичних Протоколів (PEP 544)","\u002Fpython\u002Fabstraction-protocols","05.python\u002F04.abstraction-protocols",{"title":2763,"path":2764,"stem":2765},"Магічні методи (Dunder) та Емуляція протоколів","\u002Fpython\u002Fdunder-methods","05.python\u002F05.dunder-methods",{"title":2767,"path":2768,"stem":2769},"Декоратори та Керування життєвим циклом методів","\u002Fpython\u002Fdecorators-static-class","05.python\u002F06.decorators-static-class",{"title":2771,"path":2772,"stem":2773},"Дескриптори — Магія доступу до атрибутів","\u002Fpython\u002Fdescriptors","05.python\u002F07.descriptors",{"title":2775,"path":2776,"stem":2777},"Метакласи — Динамічне створення класів під капотом CPython","\u002Fpython\u002Fmetaclasses","05.python\u002F08.metaclasses",{"title":2779,"path":2780,"stem":2781},"Dataclasses, NamedTuple та сучасні контейнери Python","\u002Fpython\u002Fmodern-containers","05.python\u002F09.modern-containers",{"title":2783,"path":2784,"stem":2785},"GIL та модель конкурентності CPython — фундамент перед потоками і процесами","\u002Fpython\u002Fgil-concurrency-intro","05.python\u002F11.gil-concurrency-intro",{"title":2787,"path":2788,"stem":2789},"Threading — конкурентність для I\u002FO-bound задач","\u002Fpython\u002Fthreading","05.python\u002F12.threading",{"title":2791,"path":2792,"stem":2793},"Multiprocessing — справжній паралелізм для CPU-bound задач","\u002Fpython\u002Fmultiprocessing","05.python\u002F13.multiprocessing",{"title":2795,"path":2796,"stem":2797},"asyncio — кооперативна конкурентність та event loop","\u002Fpython\u002Fasyncio","05.python\u002F14.asyncio",{"title":2799,"icon":92,"path":2800,"stem":2801,"children":2802,"page":59},"FastAPI","\u002Fpython\u002Ffastapi","05.python\u002Ffastapi",[2803,2807,2811,2815,2819,2823,2827,2831,2835,2839,2843,2847,2851,2855],{"title":2804,"path":2805,"stem":2806},"Глибокий Typing та Pydantic v2 — від анотацій до валідації","\u002Fpython\u002Ffastapi\u002Ftyping-pydantic","05.python\u002Ffastapi\u002F15.typing-pydantic",{"title":2808,"path":2809,"stem":2810},"WSGI, ASGI та Python Web-екосистема","\u002Fpython\u002Ffastapi\u002Fwsgi-asgi-ecosystem","05.python\u002Ffastapi\u002F16.wsgi-asgi-ecosystem",{"title":2812,"path":2813,"stem":2814},"FastAPI: Перший додаток, Uvicorn та OpenAPI","\u002Fpython\u002Ffastapi\u002Ffastapi-intro","05.python\u002Ffastapi\u002F17.fastapi-intro",{"title":2816,"path":2817,"stem":2818},"Маршрутизація, параметри запитів та APIRouter","\u002Fpython\u002Ffastapi\u002Ffastapi-routing-params","05.python\u002Ffastapi\u002F18.fastapi-routing-params",{"title":2820,"path":2821,"stem":2822},"Pydantic v2 у FastAPI — схеми, валідація та серіалізація","\u002Fpython\u002Ffastapi\u002Ffastapi-pydantic-schemas","05.python\u002Ffastapi\u002F19.fastapi-pydantic-schemas",{"title":2824,"path":2825,"stem":2826},"Dependency Injection — серце архітектури FastAPI","\u002Fpython\u002Ffastapi\u002Ffastapi-dependency-injection","05.python\u002Ffastapi\u002F20.fastapi-dependency-injection",{"title":2828,"path":2829,"stem":2830},"Обробка помилок, Middleware та CORS у FastAPI","\u002Fpython\u002Ffastapi\u002Ffastapi-errors-middleware","05.python\u002Ffastapi\u002F21.fastapi-errors-middleware",{"title":2832,"path":2833,"stem":2834},"SQLAlchemy 2.0 — ORM, Core та Async Engine","\u002Fpython\u002Ffastapi\u002Fsqlalchemy-orm","05.python\u002Ffastapi\u002F22.sqlalchemy-orm",{"title":2836,"path":2837,"stem":2838},"Alembic — міграції бази даних","\u002Fpython\u002Ffastapi\u002Falembic-migrations","05.python\u002Ffastapi\u002F23.alembic-migrations",{"title":2840,"path":2841,"stem":2842},"Repository Pattern та Clean Architecture у FastAPI","\u002Fpython\u002Ffastapi\u002Ffastapi-repository-clean-arch","05.python\u002Ffastapi\u002F24.fastapi-repository-clean-arch",{"title":2844,"path":2845,"stem":2846},"Автентифікація та авторизація — JWT, OAuth2, RBAC","\u002Fpython\u002Ffastapi\u002Ffastapi-auth-security","05.python\u002Ffastapi\u002F25.fastapi-auth-security",{"title":2848,"path":2849,"stem":2850},"Тестування FastAPI — pytest, httpx, fixtures","\u002Fpython\u002Ffastapi\u002Ffastapi-testing","05.python\u002Ffastapi\u002F26.fastapi-testing",{"title":2852,"path":2853,"stem":2854},"Async на повну — Background Tasks, WebSockets, SSE та Celery","\u002Fpython\u002Ffastapi\u002Ffastapi-async-advanced","05.python\u002Ffastapi\u002F27.fastapi-async-advanced",{"title":2856,"path":2857,"stem":2858},"Deployment — Docker, CI\u002FCD, Monitoring","\u002Fpython\u002Ffastapi\u002Ffastapi-deployment","05.python\u002Ffastapi\u002F28.fastapi-deployment",{"title":2860,"path":2861,"stem":2862},"[object Object]","\u002Fpython\u002Foop-plan","05.python\u002Foop-plan",{"title":2864,"icon":2865,"path":2866,"stem":2867,"children":2868,"page":59},"Бази даних","i-lucide-database","\u002Fdatabases","06.databases",[2869,2899,2922,2959,2988,3006,3040,3052,3061],{"title":2870,"icon":2871,"path":2872,"stem":2873,"children":2874,"page":59},"Intro","i-lucide-play","\u002Fdatabases\u002Fintro","06.databases\u002F01.intro",[2875,2879,2883,2887,2891,2895],{"title":2876,"path":2877,"stem":2878},"Введення в теорію баз даних","\u002Fdatabases\u002Fintro\u002Fintroduction-to-databases","06.databases\u002F01.intro\u002F01.introduction-to-databases",{"title":2880,"path":2881,"stem":2882},"Реляційна модель даних","\u002Fdatabases\u002Fintro\u002Frelational-model-theory","06.databases\u002F01.intro\u002F02.relational-model-theory",{"title":2884,"path":2885,"stem":2886},"ER-моделювання","\u002Fdatabases\u002Fintro\u002Fer-modeling","06.databases\u002F01.intro\u002F03.er-modeling",{"title":2888,"path":2889,"stem":2890},"Логічне проектування БД","\u002Fdatabases\u002Fintro\u002Flogical-schema","06.databases\u002F01.intro\u002F04.logical-schema",{"title":2892,"path":2893,"stem":2894},"Класифікація таблиць","\u002Fdatabases\u002Fintro\u002Ftable-classification","06.databases\u002F01.intro\u002F05.table-classification",{"title":2896,"path":2897,"stem":2898},"PlantUML для баз даних","\u002Fdatabases\u002Fintro\u002Fplantuml-diagrams","06.databases\u002F01.intro\u002F06.plantuml-diagrams",{"title":2900,"icon":2865,"path":2901,"stem":2902,"children":2903,"page":59},"MS SQL Server Start","\u002Fdatabases\u002Fms-sql-server-start","06.databases\u002F02.ms-sql-server-start",[2904,2908,2914,2918],{"title":2905,"path":2906,"stem":2907},"Типи даних у MS SQL Server","\u002Fdatabases\u002Fms-sql-server-start\u002Fdata-types","06.databases\u002F02.ms-sql-server-start\u002F01.data-types",{"title":2909,"path":2910,"stem":2911,"children":2912},"Індекси у MS SQL Server","\u002Fdatabases\u002Fms-sql-server-start\u002Fsql-indexes","06.databases\u002F02.ms-sql-server-start\u002F02.sql-indexes",[2913],{"title":2909,"path":2910,"stem":2911},{"title":2915,"path":2916,"stem":2917},"Системні бази даних MS SQL Server","\u002Fdatabases\u002Fms-sql-server-start\u002Fsystem-databases","06.databases\u002F02.ms-sql-server-start\u002F03.system-databases",{"title":2919,"path":2920,"stem":2921},"Огляд мови SQL та запитів","\u002Fdatabases\u002Fms-sql-server-start\u002Fsql-queries-overview","06.databases\u002F02.ms-sql-server-start\u002F04.sql-queries-overview",{"title":2923,"icon":2865,"path":2924,"stem":2925,"children":2926,"page":59},"SQL","\u002Fdatabases\u002Fsql","06.databases\u002F03.sql",[2927,2931,2935,2939,2943,2947,2951,2955],{"title":2928,"path":2929,"stem":2930},"Налаштування демонстраційної бази даних","\u002Fdatabases\u002Fsql\u002Fsample-database-setup","06.databases\u002F03.sql\u002F00.sample-database-setup",{"title":2932,"path":2933,"stem":2934},"DDL - Створення таблиць (CREATE TABLE)","\u002Fdatabases\u002Fsql\u002Fddl-create-table","06.databases\u002F03.sql\u002F01.ddl-create-table",{"title":2936,"path":2937,"stem":2938},"DDL - Зміна та видалення таблиць (ALTER, DROP)","\u002Fdatabases\u002Fsql\u002Fddl-alter-drop-table","06.databases\u002F03.sql\u002F02.ddl-alter-drop-table",{"title":2940,"path":2941,"stem":2942},"SELECT запити - Основи","\u002Fdatabases\u002Fsql\u002Fselect-queries-fundamentals","06.databases\u002F03.sql\u002F03.select-queries-fundamentals",{"title":2944,"path":2945,"stem":2946},"SELECT запити - Розширені можливості","\u002Fdatabases\u002Fsql\u002Fselect-queries-advanced","06.databases\u002F03.sql\u002F04.select-queries-advanced",{"title":2948,"path":2949,"stem":2950},"INSERT запити - Додавання даних","\u002Fdatabases\u002Fsql\u002Finsert-queries","06.databases\u002F03.sql\u002F05.insert-queries",{"title":2952,"path":2953,"stem":2954},"UPDATE та DELETE запити","\u002Fdatabases\u002Fsql\u002Fupdate-delete-queries","06.databases\u002F03.sql\u002F06.update-delete-queries",{"title":2956,"path":2957,"stem":2958},"Транзакції в SQL","\u002Fdatabases\u002Fsql\u002Ftransactions","06.databases\u002F03.sql\u002F07.transactions",{"title":2960,"icon":2865,"path":2961,"stem":2962,"children":2963,"page":59},"Multi Table Databases","\u002Fdatabases\u002Fmulti-table-databases","06.databases\u002F04.multi-table-databases",[2964,2968,2972,2976,2980,2984],{"title":2965,"path":2966,"stem":2967},"Зв'язки та нормалізація БД","\u002Fdatabases\u002Fmulti-table-databases\u002Frelationships-and-normalization","06.databases\u002F04.multi-table-databases\u002F00.relationships-and-normalization",{"title":2969,"path":2970,"stem":2971},"INNER JOIN - З'єднання таблиць","\u002Fdatabases\u002Fmulti-table-databases\u002Finner-join","06.databases\u002F04.multi-table-databases\u002F01.inner-join",{"title":2973,"path":2974,"stem":2975},"OUTER JOINs - LEFT, RIGHT, FULL","\u002Fdatabases\u002Fmulti-table-databases\u002Fouter-joins","06.databases\u002F04.multi-table-databases\u002F02.outer-joins",{"title":2977,"path":2978,"stem":2979},"CROSS та SELF JOINs","\u002Fdatabases\u002Fmulti-table-databases\u002Fcross-self-joins","06.databases\u002F04.multi-table-databases\u002F03.cross-self-joins",{"title":2981,"path":2982,"stem":2983},"Підзапити (Subqueries)","\u002Fdatabases\u002Fmulti-table-databases\u002Fsubqueries","06.databases\u002F04.multi-table-databases\u002F04.subqueries",{"title":2985,"path":2986,"stem":2987},"Агрегації з JOIN","\u002Fdatabases\u002Fmulti-table-databases\u002Faggregations-with-joins","06.databases\u002F04.multi-table-databases\u002F05.aggregations-with-joins",{"title":2989,"icon":2990,"path":2991,"stem":2992,"children":2993,"page":59},"Aggregate Functions","i-lucide-calculator","\u002Fdatabases\u002Faggregate-functions","06.databases\u002F05.aggregate-functions",[2994,2998,3002],{"title":2995,"path":2996,"stem":2997},"Функції агрегування в MS SQL Server","\u002Fdatabases\u002Faggregate-functions\u002Fintroduction-aggregate-functions","06.databases\u002F05.aggregate-functions\u002F01.introduction-aggregate-functions",{"title":2999,"path":3000,"stem":3001},"Групування даних в MS SQL Server","\u002Fdatabases\u002Faggregate-functions\u002Fgrouping-data","06.databases\u002F05.aggregate-functions\u002F02.grouping-data",{"title":3003,"path":3004,"stem":3005},"Підзапити з агрегатними функціями","\u002Fdatabases\u002Faggregate-functions\u002Fsubqueries-aggregates","06.databases\u002F05.aggregate-functions\u002F03.subqueries-aggregates",{"title":3007,"icon":3008,"path":3009,"stem":3010,"children":3011,"page":59},"Тригери та зберігаємі процедури","i-lucide-database-zap","\u002Fdatabases\u002Ftriggers-stored-procedures","06.databases\u002F07.triggers-stored-procedures",[3012,3016,3020,3024,3028,3032,3036],{"title":3013,"path":3014,"stem":3015},"DML-тригери","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fdml-triggers","06.databases\u002F07.triggers-stored-procedures\u002F01.dml-triggers",{"title":3017,"path":3018,"stem":3019},"DDL-тригери","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fddl-triggers","06.databases\u002F07.triggers-stored-procedures\u002F02.ddl-triggers",{"title":3021,"path":3022,"stem":3023},"Transact-SQL розширення","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Ftransact-sql-extensions","06.databases\u002F07.triggers-stored-procedures\u002F03.transact-sql-extensions",{"title":3025,"path":3026,"stem":3027},"Транзакції","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Ftransactions","06.databases\u002F07.triggers-stored-procedures\u002F04.transactions",{"title":3029,"path":3030,"stem":3031},"Зберігаємі процедури","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fstored-procedures","06.databases\u002F07.triggers-stored-procedures\u002F05.stored-procedures",{"title":3033,"path":3034,"stem":3035},"Користувацькі функції","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fuser-defined-functions","06.databases\u002F07.triggers-stored-procedures\u002F06.user-defined-functions",{"title":3037,"path":3038,"stem":3039},"Безпека баз даних","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fsecurity","06.databases\u002F07.triggers-stored-procedures\u002F08.security",{"title":3037,"icon":793,"path":3041,"stem":3042,"children":3043,"page":59},"\u002Fdatabases\u002Fsecurity","06.databases\u002F08.security",[3044,3048],{"title":3045,"path":3046,"stem":3047},"Вступ до безпеки баз даних","\u002Fdatabases\u002Fsecurity\u002Fintroduction","06.databases\u002F08.security\u002F01.introduction",{"title":3049,"path":3050,"stem":3051},"Системні представлення та метадані","\u002Fdatabases\u002Fsecurity\u002Fsystem-views","06.databases\u002F08.security\u002F02.system-views",{"title":3053,"icon":3054,"path":3055,"stem":3056,"children":3057,"page":59},"Резервне копіювання та відновлення","i-lucide-database-backup","\u002Fdatabases\u002Fbackup-recovery","06.databases\u002F09.backup-recovery",[3058],{"title":3053,"path":3059,"stem":3060},"\u002Fdatabases\u002Fbackup-recovery\u002Fbackup-restore","06.databases\u002F09.backup-recovery\u002F01.backup-restore",{"title":3062,"icon":3063,"path":3064,"stem":3065,"children":3066,"page":59},"Повнотекстовий пошук","i-lucide-search","\u002Fdatabases\u002Ffull-text-search","06.databases\u002F10.full-text-search",[3067],{"title":3062,"path":3068,"stem":3069},"\u002Fdatabases\u002Ffull-text-search\u002Ffull-text-search","06.databases\u002F10.full-text-search\u002F01.full-text-search",{"title":3071,"icon":3072,"path":3073,"stem":3074,"children":3075,"page":59},"Tools","i-lucide-wrench","\u002Ftools","07.tools",[3076,3152],{"title":3077,"icon":3078,"path":3079,"stem":3080,"children":3081},"Docker","i-simple-icons-docker","\u002Ftools\u002Fdocker","07.tools\u002F01.docker\u002Findex",[3082,3084,3088,3092,3096,3100,3104,3108,3112,3116,3120,3124,3128,3132,3136,3140,3144,3148],{"title":3083,"path":3079,"stem":3080},"Docker: від нуля до production",{"title":3085,"path":3086,"stem":3087},"Контейнеризація — від проблеми до рішення","\u002Ftools\u002Fdocker\u002Fcontainerization-concept","07.tools\u002F01.docker\u002F01.containerization-concept",{"title":3089,"path":3090,"stem":3091},"Docker — що це і навіщо?","\u002Ftools\u002Fdocker\u002Fdocker-what-and-why","07.tools\u002F01.docker\u002F02.docker-what-and-why",{"title":3093,"path":3094,"stem":3095},"Архітектура Docker Engine","\u002Ftools\u002Fdocker\u002Fdocker-architecture","07.tools\u002F01.docker\u002F03.docker-architecture",{"title":3097,"path":3098,"stem":3099},"Встановлення Docker","\u002Ftools\u002Fdocker\u002Finstallation","07.tools\u002F01.docker\u002F04.installation",{"title":3101,"path":3102,"stem":3103},"Перший контейнер — docker run","\u002Ftools\u002Fdocker\u002Ffirst-container","07.tools\u002F01.docker\u002F05.first-container",{"title":3105,"path":3106,"stem":3107},"Життєвий цикл контейнера","\u002Ftools\u002Fdocker\u002Fcontainer-lifecycle","07.tools\u002F01.docker\u002F06.container-lifecycle",{"title":3109,"path":3110,"stem":3111},"Docker Images — фундаментальні концепції","\u002Ftools\u002Fdocker\u002Fdocker-images-fundamentals","07.tools\u002F01.docker\u002F07.docker-images-fundamentals",{"title":3113,"path":3114,"stem":3115},"Dockerfile — основи","\u002Ftools\u002Fdocker\u002Fdockerfile-basics","07.tools\u002F01.docker\u002F08.dockerfile-basics",{"title":3117,"path":3118,"stem":3119},"Dockerfile — просунуті техніки","\u002Ftools\u002Fdocker\u002Fdockerfile-advanced","07.tools\u002F01.docker\u002F09.dockerfile-advanced",{"title":3121,"path":3122,"stem":3123},"Build Context та кешування шарів","\u002Ftools\u002Fdocker\u002Fbuild-context-and-cache","07.tools\u002F01.docker\u002F10.build-context-and-cache",{"title":3125,"path":3126,"stem":3127},"Реєстри Docker-образів","\u002Ftools\u002Fdocker\u002Fimage-registries","07.tools\u002F01.docker\u002F11.image-registries",{"title":3129,"path":3130,"stem":3131},"Контейнеризація .NET додатків","\u002Ftools\u002Fdocker\u002Fdotnet-containerization","07.tools\u002F01.docker\u002F12.dotnet-containerization",{"title":3133,"path":3134,"stem":3135},"Томи та збереження даних","\u002Ftools\u002Fdocker\u002Fvolumes-and-data","07.tools\u002F01.docker\u002F13.volumes-and-data",{"title":3137,"path":3138,"stem":3139},"Основи мережі в Docker","\u002Ftools\u002Fdocker\u002Fnetworking-basics","07.tools\u002F01.docker\u002F14.networking-basics",{"title":3141,"path":3142,"stem":3143},"Змінні оточення та конфігурація","\u002Ftools\u002Fdocker\u002Fenvironment-and-configuration","07.tools\u002F01.docker\u002F15.environment-and-configuration",{"title":3145,"path":3146,"stem":3147},"Docker Compose — оркестрація контейнерів","\u002Ftools\u002Fdocker\u002Fdocker-compose-basics","07.tools\u002F01.docker\u002F16.docker-compose-basics",{"title":3149,"path":3150,"stem":3151},"Docker Compose — Multi-Service застосунки","\u002Ftools\u002Fdocker\u002Fcompose-multi-service","07.tools\u002F01.docker\u002F17.compose-multi-service",{"title":3153,"icon":3154,"path":3155,"stem":3156,"children":3157},"Kubernetes","simple-icons:kubernetes","\u002Ftools\u002Fkubernetes","07.tools\u002F02.kubernetes\u002Findex",[3158,3160,3164,3168,3172,3176,3180,3184,3188],{"title":3159,"path":3155,"stem":3156},"Kubernetes: від розробки до production",{"title":3161,"path":3162,"stem":3163},"Kubernetes — коли Docker Compose більше не вистачає","\u002Ftools\u002Fkubernetes\u002Fwhy-kubernetes","07.tools\u002F02.kubernetes\u002F01.why-kubernetes",{"title":3165,"path":3166,"stem":3167},"Архітектура Kubernetes — анатомія кластера","\u002Ftools\u002Fkubernetes\u002Fkubernetes-architecture","07.tools\u002F02.kubernetes\u002F02.kubernetes-architecture",{"title":3169,"path":3170,"stem":3171},"Локальне середовище — minikube, kind та k3s","\u002Ftools\u002Fkubernetes\u002Flocal-environment","07.tools\u002F02.kubernetes\u002F03.local-environment",{"title":3173,"path":3174,"stem":3175},"Pod — атомарна одиниця Kubernetes","\u002Ftools\u002Fkubernetes\u002Fpods-and-containers","07.tools\u002F02.kubernetes\u002F04.pods-and-containers",{"title":3177,"path":3178,"stem":3179},"Патерни використання Pod","\u002Ftools\u002Fkubernetes\u002Fpod-patterns","07.tools\u002F02.kubernetes\u002F05.pod-patterns",{"title":3181,"path":3182,"stem":3183},"Deployment — декларативне управління Pod","\u002Ftools\u002Fkubernetes\u002Fdeployment-basics","07.tools\u002F02.kubernetes\u002F06.deployment-basics",{"title":3185,"path":3186,"stem":3187},"Rolling Updates та управління життєвим циклом Deployment","\u002Ftools\u002Fkubernetes\u002Fdeployment-rolling-updates","07.tools\u002F02.kubernetes\u002F07.deployment-rolling-updates",{"title":3189,"path":3190,"stem":3191},"Service — мережева абстракція для Pod","\u002Ftools\u002Fkubernetes\u002Fservices-networking","07.tools\u002F02.kubernetes\u002F08.services-networking",{"title":3193,"icon":3194,"path":3195,"stem":3196,"children":3197,"page":59},"Software Engineering","i-lucide-code-2","\u002Fsoftware-engineering","09.software-engineering",[3198,3202,3206,3210,3214,3218,3222,3226,3230,3234,3238],{"title":3199,"path":3200,"stem":3201},"1. Аналіз предметної області. Експертні знання та складність","\u002Fsoftware-engineering\u002Fintro-subdomains","09.software-engineering\u002F01.intro-subdomains",{"title":3203,"path":3204,"stem":3205},"2. Обмежені контексти. Інтеграція обмежених контекстів","\u002Fsoftware-engineering\u002Fintegrating-limited-contexts","09.software-engineering\u002F02.integrating-limited-contexts",{"title":3207,"path":3208,"stem":3209},"3. Реалізація простої бізнес-логіки","\u002Fsoftware-engineering\u002Fsimple","09.software-engineering\u002F03.simple",{"title":3211,"path":3212,"stem":3213},"4. Опрацювання складної бізнес-логіки","\u002Fsoftware-engineering\u002Fcomplex-business-logic","09.software-engineering\u002F04.complex-business-logic",{"title":3215,"path":3216,"stem":3217},"5. Моделювання фактора часу. Подієво-орієнтована архітектура.","\u002Fsoftware-engineering\u002Fmodelling-the-time-factor","09.software-engineering\u002F05.modelling-the-time-factor",{"title":3219,"path":3220,"stem":3221},"6. Архітектурні патерни","\u002Fsoftware-engineering\u002Farchitectural-patterns","09.software-engineering\u002F06.architectural-patterns",{"title":3223,"path":3224,"stem":3225},"Паттерни взаємодії","\u002Fsoftware-engineering\u002Fpatterns-of-interaction","09.software-engineering\u002F07.patterns-of-interaction",{"title":3227,"path":3228,"stem":3229},"Евристика проєктування","\u002Fsoftware-engineering\u002Fdesign-heuristics","09.software-engineering\u002F08.design-heuristics",{"title":3231,"path":3232,"stem":3233},"Еволюція проєктних рішень","\u002Fsoftware-engineering\u002Fevolution-of-design-solutions","09.software-engineering\u002F09.evolution-of-design-solutions",{"title":3235,"path":3236,"stem":3237},"EventStorming","\u002Fsoftware-engineering\u002Feventstorming","09.software-engineering\u002F10.eventstorming",{"title":3239,"path":3240,"stem":3241},"DDD на практиці","\u002Fsoftware-engineering\u002Fddd-in-practice","09.software-engineering\u002F11.ddd-in-practice",{"title":3243,"icon":943,"path":3244,"stem":3245,"children":3246,"page":59},"DDD","\u002Fddd","10.ddd",[3247,3251,3255,3259,3263,3267,3271,3275,3279,3283,3287,3291,3295],{"title":3248,"path":3249,"stem":3250},"Аналіз предметної області","\u002Fddd\u002Fdomain-analysis","10.ddd\u002F01.domain-analysis",{"title":3252,"path":3253,"stem":3254},"Експертні знання про предметну область","\u002Fddd\u002Fdomain-expert-knowledge","10.ddd\u002F02.domain-expert-knowledge",{"title":3256,"path":3257,"stem":3258},"Як осмислити складність предметної області","\u002Fddd\u002Fmanaging-domain-complexity","10.ddd\u002F03.managing-domain-complexity",{"title":3260,"path":3261,"stem":3262},"Інтеграція обмежених контекстів","\u002Fddd\u002Fbounded-context-integration","10.ddd\u002F04.bounded-context-integration",{"title":3264,"path":3265,"stem":3266},"Реалізація простої бізнес-логіки","\u002Fddd\u002Fsimple-business-logic","10.ddd\u002F05.simple-business-logic",{"title":3268,"path":3269,"stem":3270},"Обробка складної бізнес-логіки","\u002Fddd\u002Fcomplex-business-logic","10.ddd\u002F06.complex-business-logic",{"title":3272,"path":3273,"stem":3274},"Моделювання фактора часу","\u002Fddd\u002Ftime-modeling","10.ddd\u002F07.time-modeling",{"title":3276,"path":3277,"stem":3278},"Глава 8. Архітектурні Патерни","\u002Fddd\u002Farchitectural-patterns","10.ddd\u002F08.architectural-patterns",{"title":3280,"path":3281,"stem":3282},"Глава 9. Патерни Взаємодії","\u002Fddd\u002Finteraction-patterns","10.ddd\u002F09.interaction-patterns",{"title":3284,"path":3285,"stem":3286},"Глава 10. Проектні Евристики","\u002Fddd\u002Fdesign-heuristics","10.ddd\u002F10.design-heuristics",{"title":3288,"path":3289,"stem":3290},"Глава 11. Еволюція Проектних Рішень","\u002Fddd\u002Fevolution-of-design-decisions","10.ddd\u002F11.evolution-of-design-decisions",{"title":3292,"path":3293,"stem":3294},"Глава 12. EventStorming","\u002Fddd\u002Fevent-storming","10.ddd\u002F12.event-storming",{"title":3296,"path":3297,"stem":3298},"Глава 13. DDD на Практиці","\u002Fddd\u002Fddd-in-practice","10.ddd\u002F13.ddd-in-practice",{"title":3300,"icon":3301,"path":3302,"stem":3303,"children":3304,"page":59},"Media Streaming","i-lucide-video","\u002Fmedia-streaming","11.media-streaming",[3305,3309,3313,3317,3321,3325,3329],{"title":3306,"path":3307,"stem":3308},"01. Магія Стрімінгу: Що відбувається, коли ви натискаєте \"Play\"","\u002Fmedia-streaming\u002Fintroduction","11.media-streaming\u002F01.introduction",{"title":3310,"path":3311,"stem":3312},"02. Анатомія Медіа: Кодеки, Контейнери та Стиснення","\u002Fmedia-streaming\u002Faudio-video-anatomy","11.media-streaming\u002F02.audio-video-anatomy",{"title":3314,"path":3315,"stem":3316},"03. The Gym: FFmpeg Deep Dive","\u002Fmedia-streaming\u002Fffmpeg-gym","11.media-streaming\u002F03.ffmpeg-gym",{"title":3318,"path":3319,"stem":3320},"04. HLS Protocol: HTTP Live Streaming у Деталях","\u002Fmedia-streaming\u002Fhls-protocol","11.media-streaming\u002F04.hls-protocol",{"title":3322,"path":3323,"stem":3324},"05. DASH Protocol: Відкритий Стандарт","\u002Fmedia-streaming\u002Fdash-protocol","11.media-streaming\u002F05.dash-protocol",{"title":3326,"path":3327,"stem":3328},"06. Масштабування: CDN та Adaptive Bitrate","\u002Fmedia-streaming\u002Fcdn-and-adaptive-bitrate","11.media-streaming\u002F06.cdn-and-adaptive-bitrate",{"title":3330,"path":3331,"stem":3332},"07. Війна із Затримкою (Latency)","\u002Fmedia-streaming\u002Frealtime-latency","11.media-streaming\u002F07.realtime-latency",{"title":3334,"icon":3335,"path":3336,"stem":3337,"children":3338,"page":59},"HTML & CSS","i-devicon-html5","\u002Fhtml-css","12.html-css",[3339,3343,3347,3351,3355,3359,3363,3367,3371,3375,3379,3383,3387,3391,3395,3399,3403,3407,3411,3415,3419,3423,3427,3431,3435,3439,3443,3447,3451,3455],{"title":3340,"path":3341,"stem":3342},"Вступ до HTML. Структура документа","\u002Fhtml-css\u002Fintro-html-structure","12.html-css\u002F01.intro-html-structure",{"title":3344,"path":3345,"stem":3346},"Форматування тексту в HTML","\u002Fhtml-css\u002Fhtml-text-formatting","12.html-css\u002F02.html-text-formatting",{"title":3348,"path":3349,"stem":3350},"Посилання та зображення в HTML","\u002Fhtml-css\u002Fhtml-links-images","12.html-css\u002F03.html-links-images",{"title":3352,"path":3353,"stem":3354},"Списки та таблиці в HTML","\u002Fhtml-css\u002Fhtml-lists-tables","12.html-css\u002F04.html-lists-tables",{"title":3356,"path":3357,"stem":3358},"Форми в HTML","\u002Fhtml-css\u002Fhtml-forms","12.html-css\u002F05.html-forms",{"title":3360,"path":3361,"stem":3362},"Семантичні елементи HTML5","\u002Fhtml-css\u002Fhtml-semantic-elements","12.html-css\u002F06.html-semantic-elements",{"title":3364,"path":3365,"stem":3366},"Мультимедіа та розширені елементи HTML","\u002Fhtml-css\u002Fhtml-multimedia-advanced","12.html-css\u002F07.html-multimedia-advanced",{"title":3368,"path":3369,"stem":3370},"Мікророзмітка та SEO в HTML","\u002Fhtml-css\u002Fhtml-microdata-seo","12.html-css\u002F08.html-microdata-seo",{"title":3372,"path":3373,"stem":3374},"Вступ до CSS. Селектори та специфічність","\u002Fhtml-css\u002Fcss-intro-selectors","12.html-css\u002F09.css-intro-selectors",{"title":3376,"path":3377,"stem":3378},"Блокова модель CSS. Відступи. Box Sizing","\u002Fhtml-css\u002Fcss-box-model","12.html-css\u002F10.css-box-model",{"title":3380,"path":3381,"stem":3382},"Розміри у CSS: повний довідник одиниць і ключових слів","\u002Fhtml-css\u002F10a.css-sizing","12.html-css\u002F10a.css-sizing",{"title":3384,"path":3385,"stem":3386},"Типографіка в CSS. Шрифти та текст","\u002Fhtml-css\u002Fcss-typography","12.html-css\u002F11.css-typography",{"title":3388,"path":3389,"stem":3390},"Кольори та фони в CSS","\u002Fhtml-css\u002Fcss-colors-backgrounds","12.html-css\u002F12.css-colors-backgrounds",{"title":3392,"path":3393,"stem":3394},"Тіні та фільтри в CSS","\u002Fhtml-css\u002F12b.css-shadows-filters","12.html-css\u002F12b.css-shadows-filters",{"title":3396,"path":3397,"stem":3398},"CSS Flexbox: Фундамент гнучких макетів","\u002Fhtml-css\u002Fcss-flexbox-fundamentals","12.html-css\u002F13.css-flexbox-fundamentals",{"title":3400,"path":3401,"stem":3402},"CSS Flexbox: Вирівнювання та Позиціонування","\u002Fhtml-css\u002Fcss-flexbox-alignment-sizing-and-patterns","12.html-css\u002F14.css-flexbox-alignment-sizing-and-patterns",{"title":3404,"path":3405,"stem":3406},"CSS Grid. Двовимірний макет. Частина 1","\u002Fhtml-css\u002Fcss-layout-grid","12.html-css\u002F15.css-layout-grid",{"title":3408,"path":3409,"stem":3410},"CSS Grid. Двовимірний макет. Частина 2","\u002Fhtml-css\u002Fcss-layout-grid-advanced","12.html-css\u002F16.css-layout-grid-advanced",{"title":3412,"path":3413,"stem":3414},"Позиціонування в CSS. Z-index. Stacking Context","\u002Fhtml-css\u002Fcss-positioning","12.html-css\u002F17.css-positioning",{"title":3416,"path":3417,"stem":3418},"CSS Анімації та Переходи","\u002Fhtml-css\u002Fcss-animations-transitions","12.html-css\u002F18.css-animations-transitions",{"title":3420,"path":3421,"stem":3422},"Адаптивний дизайн. Media Queries. Частина 1","\u002Fhtml-css\u002Fcss-responsive-media-queries","12.html-css\u002F19.css-responsive-media-queries",{"title":3424,"path":3425,"stem":3426},"Адаптивний дизайн. Частина 2: clamp(), Container Queries, @layer","\u002Fhtml-css\u002Fcss-responsive-advanced","12.html-css\u002F20.css-responsive-advanced",{"title":3428,"path":3429,"stem":3430},"CSS Custom Properties. Методології. Сучасний CSS","\u002Fhtml-css\u002Fcss-variables-methodologies","12.html-css\u002F21.css-variables-methodologies",{"title":3432,"path":3433,"stem":3434},"Сучасний CSS 2023–2025: Нові можливості","\u002Fhtml-css\u002Fcss-modern-features","12.html-css\u002F22.css-modern-features",{"title":3436,"path":3437,"stem":3438},"CSS Nesting, @layer, @scope та @property: нативний препроцесор","\u002Fhtml-css\u002F22a.css-nesting-modern-syntax","12.html-css\u002F22a.css-nesting-modern-syntax",{"title":3440,"path":3441,"stem":3442},"CSS для форм та інтерактивних станів","\u002Fhtml-css\u002Fcss-forms-interactive-states","12.html-css\u002F23.css-forms-interactive-states",{"title":3444,"path":3445,"stem":3446},"Доступність у CSS (CSS Accessibility)","\u002Fhtml-css\u002Fcss-accessibility","12.html-css\u002F24.css-accessibility",{"title":3448,"path":3449,"stem":3450},"CSS-функції та сучасні sizing primitives","\u002Fhtml-css\u002Fcss-functions-sizing","12.html-css\u002F25.css-functions-sizing",{"title":3452,"path":3453,"stem":3454},"Rendering Pipeline і CSS Performance","\u002Fhtml-css\u002Fcss-rendering-performance","12.html-css\u002F26.css-rendering-performance",{"title":3456,"path":3457,"stem":3458},"CSS Best Practices: типові ситуації та правильні рішення","\u002Fhtml-css\u002Fcss-best-practices","12.html-css\u002F27.css-best-practices",{"title":3460,"path":3461,"stem":3462,"children":3463,"page":59},"AWS","\u002Faws","13.aws",[3464,3468,3472,3476,3480,3484,3488,3492,3496,3500,3504,3508,3512,3516,3520,3524,3528,3532],{"title":3465,"path":3466,"stem":3467},"Реєстрація AWS акаунту та студентські програми","\u002Faws\u002Faccount-registration","13.aws\u002F00.account-registration",{"title":3469,"path":3470,"stem":3471},"Вступ до хмарних обчислень та AWS","\u002Faws\u002Fintroduction-to-cloud","13.aws\u002F01.introduction-to-cloud",{"title":3473,"path":3474,"stem":3475},"AWS IAM — Identity and Access Management","\u002Faws\u002Fiam","13.aws\u002F02.iam",{"title":3477,"path":3478,"stem":3479},"AWS IAM CLI — Довідник команд","\u002Faws\u002F02a.iam-doc","13.aws\u002F02a.iam-doc",{"title":3481,"path":3482,"stem":3483},"Docker та контейнеризація в AWS — ECR, ECS та Fargate","\u002Faws\u002Fdocker-ecs","13.aws\u002F03.docker-ecs",{"title":3485,"path":3486,"stem":3487},"AWS ECR \u002F ECS CLI — Довідник команд","\u002Faws\u002F03a.docker-ecs-doc","13.aws\u002F03a.docker-ecs-doc",{"title":3489,"path":3490,"stem":3491},"Amazon EC2 — Elastic Compute Cloud","\u002Faws\u002Fec2","13.aws\u002F04.ec2",{"title":3493,"path":3494,"stem":3495},"AWS EC2 CLI — Довідник команд","\u002Faws\u002F04a.ec2-doc","13.aws\u002F04a.ec2-doc",{"title":3497,"path":3498,"stem":3499},"Elastic Load Balancing та Auto Scaling","\u002Faws\u002Falb-asg","13.aws\u002F05.alb-asg",{"title":3501,"path":3502,"stem":3503},"Amazon S3 — Simple Storage Service","\u002Faws\u002Fs3","13.aws\u002F06.s3",{"title":3505,"path":3506,"stem":3507},"Amazon CloudFront — Content Delivery Network","\u002Faws\u002Fcloudfront","13.aws\u002F07.cloudfront",{"title":3509,"path":3510,"stem":3511},"Amazon RDS — Relational Database Service","\u002Faws\u002Frds","13.aws\u002F08.rds",{"title":3513,"path":3514,"stem":3515},"Amazon DynamoDB — NoSQL Database","\u002Faws\u002Fdynamodb","13.aws\u002F09.dynamodb",{"title":3517,"path":3518,"stem":3519},"AWS Lambda та Serverless Compute","\u002Faws\u002Flambda","13.aws\u002F10.lambda",{"title":3521,"path":3522,"stem":3523},"Amazon Bedrock - Foundation Models, RAG та Agents","\u002Faws\u002Fbedrock","13.aws\u002F22.bedrock",{"title":3525,"path":3526,"stem":3527},"Amazon Rekognition - Комп'ютерний зір","\u002Faws\u002Frekognition","13.aws\u002F23.rekognition",{"title":3529,"path":3530,"stem":3531},"Amazon Textract - Інтелектуальний аналіз документів","\u002Faws\u002Ftextract","13.aws\u002F24.textract",{"title":3533,"path":3534,"stem":3535},"Amazon Polly, Transcribe, Comprehend та Translate","\u002Faws\u002Faudio-nlp-services","13.aws\u002F25.audio-nlp-services",{"title":3537,"path":3538,"stem":3539,"children":3540,"page":59},"Ai Development","\u002Fai-development","14.ai-development",[3541],{"title":3542,"path":3543,"stem":3544,"children":3545,"page":59},"Foundations","\u002Fai-development\u002Ffoundations","14.ai-development\u002F00.foundations",[3546],{"title":3547,"path":3548,"stem":3549},"Модуль 0.1. Що таке Large Language Model (LLM)","\u002Fai-development\u002Ffoundations\u002Fwhat-is-llm","14.ai-development\u002F00.foundations\u002F01.what-is-llm",{"title":3551,"path":3552,"stem":3553,"children":3554,"page":59},"React Native","\u002Freact-native","15.react-native",[3555,3576],{"title":3556,"path":3557,"stem":3558,"children":3559,"page":59},"Version1","\u002Freact-native\u002Fversion1","15.react-native\u002Fversion1",[3560,3564,3568,3572],{"title":3561,"path":3562,"stem":3563},"Що таке React Native","\u002Freact-native\u002Fversion1\u002Fwhat-is-react-native","15.react-native\u002Fversion1\u002F01.what-is-react-native",{"title":3565,"path":3566,"stem":3567},"Як влаштований React Native «під капотом»","\u002Freact-native\u002Fversion1\u002Freact-native-architecture","15.react-native\u002Fversion1\u002F02.react-native-architecture",{"title":3569,"path":3570,"stem":3571},"Від React до React Native: ключові відмінності","\u002Freact-native\u002Fversion1\u002Freact-native-vs-react","15.react-native\u002Fversion1\u002F03.react-native-vs-react",{"title":3573,"path":3574,"stem":3575},"View та Text — фундаментальні будівельні блоки","\u002Freact-native\u002Fversion1\u002Fview-and-text","15.react-native\u002Fversion1\u002F04.view-and-text",{"title":3577,"path":3578,"stem":3579,"children":3580,"page":59},"Version2","\u002Freact-native\u002Fversion2","15.react-native\u002Fversion2",[3581,3585,3589,3593,3597,3601,3605,3609,3613,3617,3621,3625,3629,3633,3637,3641,3645,3649,3653,3657,3661,3665,3669,3673,3677,3681,3685],{"title":3582,"path":3583,"stem":3584},"React Native — навіщо він потрібен","\u002Freact-native\u002Fversion2\u002Fwhy-react-native","15.react-native\u002Fversion2\u002F01.why-react-native",{"title":3586,"path":3587,"stem":3588},"Налаштування середовища розробки","\u002Freact-native\u002Fversion2\u002Fenvironment-setup","15.react-native\u002Fversion2\u002F02.environment-setup",{"title":3590,"path":3591,"stem":3592},"Expo і класичний React Native — два шляхи одного фреймворку","\u002Freact-native\u002Fversion2\u002Fexpo-vs-cli-landscape","15.react-native\u002Fversion2\u002F03.expo-vs-cli-landscape",{"title":3594,"path":3595,"stem":3596},"Середовище Expo — перший запуск","\u002Freact-native\u002Fversion2\u002Fexpo-setup-and-tooling","15.react-native\u002Fversion2\u002F04.expo-setup-and-tooling",{"title":3598,"path":3599,"stem":3600},"Структура проєкту та перші UI-примітиви","\u002Freact-native\u002Fversion2\u002Fproject-structure-and-conventions","15.react-native\u002Fversion2\u002F05.project-structure-and-conventions",{"title":3602,"path":3603,"stem":3604},"Базові компоненти React Native","\u002Freact-native\u002Fversion2\u002Fcore-components","15.react-native\u002Fversion2\u002F06.core-components",{"title":3606,"path":3607,"stem":3608},"Flexbox і layout у React Native","\u002Freact-native\u002Fversion2\u002Fflexbox-and-layout","15.react-native\u002Fversion2\u002F07.flexbox-and-layout",{"title":3610,"path":3611,"stem":3612},"StyleSheet і теми (light \u002F dark)","\u002Freact-native\u002Fversion2\u002Fstylesheet-and-theming","15.react-native\u002Fversion2\u002F08.stylesheet-and-theming",{"title":3614,"path":3615,"stem":3616},"Списки та віртуалізація","\u002Freact-native\u002Fversion2\u002Flists-and-virtualization","15.react-native\u002Fversion2\u002F09.lists-and-virtualization",{"title":3618,"path":3619,"stem":3620},"Форми, ввід і валідація","\u002Freact-native\u002Fversion2\u002Fforms-input-validation","15.react-native\u002Fversion2\u002F10.forms-input-validation",{"title":3622,"path":3623,"stem":3624},"Основи Expo Router","\u002Freact-native\u002Fversion2\u002Fexpo-router-basics","15.react-native\u002Fversion2\u002F11.expo-router-basics",{"title":3626,"path":3627,"stem":3628},"Вкладені навігатори та модалки","\u002Freact-native\u002Fversion2\u002Fnested-navigators-and-modals","15.react-native\u002Fversion2\u002F12.nested-navigators-and-modals",{"title":3630,"path":3631,"stem":3632},"Deep linking і параметри маршрутів","\u002Freact-native\u002Fversion2\u002Fdeep-linking-and-params","15.react-native\u002Fversion2\u002F13.deep-linking-and-params",{"title":3634,"path":3635,"stem":3636},"Робота з мережею та життєвий цикл застосунку","\u002Freact-native\u002Fversion2\u002Fnetworking-and-app-lifecycle","15.react-native\u002Fversion2\u002F14.networking-and-app-lifecycle",{"title":3638,"path":3639,"stem":3640},"Redux Toolkit на мобільних платформах","\u002Freact-native\u002Fversion2\u002Fredux-toolkit-on-mobile","15.react-native\u002Fversion2\u002F15.redux-toolkit-on-mobile",{"title":3642,"path":3643,"stem":3644},"RTK Query на мобільних платформах","\u002Freact-native\u002Fversion2\u002Frtk-query-mobile","15.react-native\u002Fversion2\u002F16.rtk-query-mobile",{"title":3646,"path":3647,"stem":3648},"Автентифікація та Безпечне Зберігання","\u002Freact-native\u002Fversion2\u002Fauth-secure-storage","15.react-native\u002Fversion2\u002F18.auth-secure-storage",{"title":3650,"path":3651,"stem":3652},"Локальне сховище — AsyncStorage, MMKV, SQLite","\u002Freact-native\u002Fversion2\u002Flocal-storage-mmkv-sqlite","15.react-native\u002Fversion2\u002F19.local-storage-mmkv-sqlite",{"title":3654,"path":3655,"stem":3656},"Офлайн-First і синхронізація","\u002Freact-native\u002Fversion2\u002Foffline-first-sync","15.react-native\u002Fversion2\u002F20.offline-first-sync",{"title":3658,"path":3659,"stem":3660},"Камера, медіа та файлова система","\u002Freact-native\u002Fversion2\u002Fcamera-media-filesystem","15.react-native\u002Fversion2\u002F21.camera-media-filesystem",{"title":3662,"path":3663,"stem":3664},"Карти та геолокація","\u002Freact-native\u002Fversion2\u002Fmaps-and-location","15.react-native\u002Fversion2\u002F22.maps-and-location",{"title":3666,"path":3667,"stem":3668},"Жести та дотики","\u002Freact-native\u002Fversion2\u002Fgestures-and-touch","15.react-native\u002Fversion2\u002F23.gestures-and-touch",{"title":3670,"path":3671,"stem":3672},"Анімації з Reanimated","\u002Freact-native\u002Fversion2\u002Freanimated-animations","15.react-native\u002Fversion2\u002F24.reanimated-animations",{"title":3674,"path":3675,"stem":3676},"Push і локальні сповіщення","\u002Freact-native\u002Fversion2\u002Fpush-and-local-notifications","15.react-native\u002Fversion2\u002F25.push-and-local-notifications",{"title":3678,"path":3679,"stem":3680},"Інтернаціоналізація та доступність","\u002Freact-native\u002Fversion2\u002Faccessibility-and-i18n","15.react-native\u002Fversion2\u002F26.accessibility-and-i18n",{"title":3682,"path":3683,"stem":3684},"EAS Build та профілі збірки","\u002Freact-native\u002Fversion2\u002Feas-build-and-profiles","15.react-native\u002Fversion2\u002F29.eas-build-and-profiles",{"title":3686,"path":3687,"stem":3688},"Публікація в App Store та Google Play","\u002Freact-native\u002Fversion2\u002Fapp-store-play-release","15.react-native\u002Fversion2\u002F30.app-store-play-release",{"title":3690,"path":3691,"stem":3692,"children":3693,"page":59},"Ai Python","\u002Fai-python","16.ai-python",[3694,3703,3712,3721,3750,3776,3801,3834,3851,3864,3873,3886,3895,3916,3929,3950],{"title":3695,"path":3696,"stem":3697,"children":3698,"page":59},"Intro To Ai","\u002Fai-python\u002Fintro-to-ai","16.ai-python\u002F01.intro-to-ai",[3699],{"title":3700,"path":3701,"stem":3702},"Вступ до штучного інтелекту та машинного навчання","\u002Fai-python\u002Fintro-to-ai\u002Fintro-to-ai","16.ai-python\u002F01.intro-to-ai\u002F01.intro-to-ai",{"title":3704,"path":3705,"stem":3706,"children":3707,"page":59},"Jupyter Notebook","\u002Fai-python\u002Fjupyter-notebook","16.ai-python\u002F02.jupyter-notebook",[3708],{"title":3709,"path":3710,"stem":3711},"Знайомство з Jupyter Notebook та JupyterLab","\u002Fai-python\u002Fjupyter-notebook\u002Fjupyter-notebook","16.ai-python\u002F02.jupyter-notebook\u002F02.jupyter-notebook",{"title":3713,"path":3714,"stem":3715,"children":3716,"page":59},"Numpy Pandas","\u002Fai-python\u002Fnumpy-pandas","16.ai-python\u002F03.numpy-pandas",[3717],{"title":3718,"path":3719,"stem":3720},"Робота з даними з використанням NumPy і pandas","\u002Fai-python\u002Fnumpy-pandas\u002Fnumpy-pandas","16.ai-python\u002F03.numpy-pandas\u002F03.numpy-pandas",{"title":3722,"path":3723,"stem":3724,"children":3725,"page":59},"Statistics Basics","\u002Fai-python\u002Fstatistics-basics","16.ai-python\u002F04.statistics-basics",[3726,3730,3734,3738,3742,3746],{"title":3727,"path":3728,"stem":3729},"Випадкові величини та їх типи","\u002Fai-python\u002Fstatistics-basics\u002Frandom-variables","16.ai-python\u002F04.statistics-basics\u002F01.random-variables",{"title":3731,"path":3732,"stem":3733},"Міри центральної тенденції","\u002Fai-python\u002Fstatistics-basics\u002Fcentral-tendency","16.ai-python\u002F04.statistics-basics\u002F02.central-tendency",{"title":3735,"path":3736,"stem":3737},"Міри варіації (розсіювання)","\u002Fai-python\u002Fstatistics-basics\u002Fvariability","16.ai-python\u002F04.statistics-basics\u002F03.variability",{"title":3739,"path":3740,"stem":3741},"Розподіли випадкових величин","\u002Fai-python\u002Fstatistics-basics\u002Fdistributions","16.ai-python\u002F04.statistics-basics\u002F04.distributions",{"title":3743,"path":3744,"stem":3745},"Кореляція та взаємозв'язки","\u002Fai-python\u002Fstatistics-basics\u002Fcorrelation","16.ai-python\u002F04.statistics-basics\u002F05.correlation",{"title":3747,"path":3748,"stem":3749},"Викиди та аномалії","\u002Fai-python\u002Fstatistics-basics\u002Foutliers","16.ai-python\u002F04.statistics-basics\u002F06.outliers",{"title":3751,"path":3752,"stem":3753,"children":3754},"Візуалізація даних за допомогою matplotlib","\u002Fai-python\u002Fdata-visualization","16.ai-python\u002F05.data-visualization\u002Findex",[3755,3756,3760,3764,3768,3772],{"title":3751,"path":3752,"stem":3753},{"title":3757,"path":3758,"stem":3759},"Основи matplotlib — Figure, Axes та перший графік","\u002Fai-python\u002Fdata-visualization\u002Fmatplotlib-basics","16.ai-python\u002F05.data-visualization\u002F01.matplotlib-basics",{"title":3761,"path":3762,"stem":3763},"Візуалізація розподілів — гістограми та box plots","\u002Fai-python\u002Fdata-visualization\u002Fdistributions","16.ai-python\u002F05.data-visualization\u002F02.distributions",{"title":3765,"path":3766,"stem":3767},"Візуалізація залежностей — scatter plots та кореляція","\u002Fai-python\u002Fdata-visualization\u002Frelationships","16.ai-python\u002F05.data-visualization\u002F03.relationships",{"title":3769,"path":3770,"stem":3771},"Візуалізація категоріальних даних — bar charts та pie charts","\u002Fai-python\u002Fdata-visualization\u002Fcategorical","16.ai-python\u002F05.data-visualization\u002F04.categorical",{"title":3773,"path":3774,"stem":3775},"Композиції та стилізація — subplots та багатопанельні дашборди","\u002Fai-python\u002Fdata-visualization\u002Fsubplots-styling","16.ai-python\u002F05.data-visualization\u002F05.subplots-styling",{"title":3777,"path":3778,"stem":3779,"children":3780,"page":59},"Linear Regression","\u002Fai-python\u002Flinear-regression","16.ai-python\u002F06.linear-regression",[3781,3785,3789,3793,3797],{"title":3782,"path":3783,"stem":3784},"Регресійна задача та лінійна регресія з однією змінною","\u002Fai-python\u002Flinear-regression\u002Fregression-task","16.ai-python\u002F06.linear-regression\u002F01.regression-task",{"title":3786,"path":3787,"stem":3788},"Метрики якості регресії — як оцінити модель","\u002Fai-python\u002Flinear-regression\u002Fquality-metrics","16.ai-python\u002F06.linear-regression\u002F02.quality-metrics",{"title":3790,"path":3791,"stem":3792},"Градієнтний спуск — як модель навчається","\u002Fai-python\u002Flinear-regression\u002Fgradient-descent","16.ai-python\u002F06.linear-regression\u002F03.gradient-descent",{"title":3794,"path":3795,"stem":3796},"Множинна лінійна регресія — модель з багатьма ознаками","\u002Fai-python\u002Flinear-regression\u002Fmultiple-regression","16.ai-python\u002F06.linear-regression\u002F04.multiple-regression",{"title":3798,"path":3799,"stem":3800},"Практичні завдання та резюме модуля","\u002Fai-python\u002Flinear-regression\u002Fpractice","16.ai-python\u002F06.linear-regression\u002F05.practice",{"title":3802,"path":3803,"stem":3804,"children":3805,"page":59},"Practical Regression","\u002Fai-python\u002Fpractical-regression","16.ai-python\u002F07.practical-regression",[3806,3810,3814,3818,3822,3826,3830],{"title":3807,"path":3808,"stem":3809},"Знайомство з scikit-learn","\u002Fai-python\u002Fpractical-regression\u002Fintro-scikit-learn","16.ai-python\u002F07.practical-regression\u002F01.intro-scikit-learn",{"title":3811,"path":3812,"stem":3813},"Exploratory Data Analysis датасету Housing Prices","\u002Fai-python\u002Fpractical-regression\u002Fhousing-dataset-eda","16.ai-python\u002F07.practical-regression\u002F02.housing-dataset-eda",{"title":3815,"path":3816,"stem":3817},"Попередня обробка даних (Data Preprocessing)","\u002Fai-python\u002Fpractical-regression\u002Fdata-preprocessing","16.ai-python\u002F07.practical-regression\u002F03.data-preprocessing",{"title":3819,"path":3820,"stem":3821},"Train\u002FTest Split та перша повноцінна модель","\u002Fai-python\u002Fpractical-regression\u002Ftrain-test-split","16.ai-python\u002F07.practical-regression\u002F04.train-test-split",{"title":3823,"path":3824,"stem":3825},"Перенавчання та недонавчання","\u002Fai-python\u002Fpractical-regression\u002Foverfitting-underfitting","16.ai-python\u002F07.practical-regression\u002F05.overfitting-underfitting",{"title":3827,"path":3828,"stem":3829},"Крос-валідація (Cross-Validation)","\u002Fai-python\u002Fpractical-regression\u002Fcross-validation","16.ai-python\u002F07.practical-regression\u002F06.cross-validation",{"title":3831,"path":3832,"stem":3833},"Гіперпараметри та їх оптимізація","\u002Fai-python\u002Fpractical-regression\u002Fhyperparameter-tuning","16.ai-python\u002F07.practical-regression\u002F07.hyperparameter-tuning",{"title":3835,"path":3836,"stem":3837,"children":3838,"page":59},"Polynomial Regression","\u002Fai-python\u002Fpolynomial-regression","16.ai-python\u002F08.polynomial-regression",[3839,3843,3847],{"title":3840,"path":3841,"stem":3842},"Нелінійні залежності та поліноміальна регресія","\u002Fai-python\u002Fpolynomial-regression\u002Fnonlinear-patterns","16.ai-python\u002F08.polynomial-regression\u002F01.nonlinear-patterns",{"title":3844,"path":3845,"stem":3846},"Регуляризація в регресії — Ridge та Lasso","\u002Fai-python\u002Fpolynomial-regression\u002Fregularization-methods","16.ai-python\u002F08.polynomial-regression\u002F02.regularization-methods",{"title":3848,"path":3849,"stem":3850},"Практика — поліноміальна регресія та регуляризація на Housing Prices","\u002Fai-python\u002Fpolynomial-regression\u002Fhousing-prices-practice","16.ai-python\u002F08.polynomial-regression\u002F03.housing-prices-practice",{"title":3852,"path":3853,"stem":3854,"children":3855,"page":59},"Decision Trees Random Forest","\u002Fai-python\u002Fdecision-trees-random-forest","16.ai-python\u002F09.decision-trees-random-forest",[3856,3860],{"title":3857,"path":3858,"stem":3859},"Дерева рішень — моделі з прозорою та зрозумілою логікою","\u002Fai-python\u002Fdecision-trees-random-forest\u002Fdecision-trees","16.ai-python\u002F09.decision-trees-random-forest\u002F01.decision-trees",{"title":3861,"path":3862,"stem":3863},"Random Forest — ансамблі дерев рішень","\u002Fai-python\u002Fdecision-trees-random-forest\u002Frandom-forest","16.ai-python\u002F09.decision-trees-random-forest\u002F02.random-forest",{"title":3865,"path":3866,"stem":3867,"children":3868,"page":59},"Gradient Boosting","\u002Fai-python\u002Fgradient-boosting","16.ai-python\u002F10.gradient-boosting",[3869],{"title":3870,"path":3871,"stem":3872},"Градієнтний бустинг та XGBoost — послідовне виправлення помилок","\u002Fai-python\u002Fgradient-boosting\u002Fgradient-boosting-xgboost","16.ai-python\u002F10.gradient-boosting\u002F01.gradient-boosting-xgboost",{"title":3874,"path":3875,"stem":3876,"children":3877,"page":59},"Logistic Regression Classification","\u002Fai-python\u002Flogistic-regression-classification","16.ai-python\u002F11.logistic-regression-classification",[3878,3882],{"title":3879,"path":3880,"stem":3881},"Основи класифікації та логістична регресія","\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-basics","16.ai-python\u002F11.logistic-regression-classification\u002F01.classification-basics",{"title":3883,"path":3884,"stem":3885},"Метрики якості класифікації","\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-metrics","16.ai-python\u002F11.logistic-regression-classification\u002F02.classification-metrics",{"title":3887,"path":3888,"stem":3889,"children":3890,"page":59},"Neural Networks Basics","\u002Fai-python\u002Fneural-networks-basics","16.ai-python\u002F12.neural-networks-basics",[3891],{"title":3892,"path":3893,"stem":3894},"Вступ до нейронних мереж — від персептрона до багатошарових мереж","\u002Fai-python\u002Fneural-networks-basics\u002Fperceptron-to-mlp","16.ai-python\u002F12.neural-networks-basics\u002F01.perceptron-to-mlp",{"title":3896,"path":3897,"stem":3898,"children":3899,"page":59},"Pytorch Intro","\u002Fai-python\u002Fpytorch-intro","16.ai-python\u002F13.pytorch-intro",[3900,3904,3908,3912],{"title":3901,"path":3902,"stem":3903},"Тензори та автоматичне диференціювання в PyTorch","\u002Fai-python\u002Fpytorch-intro\u002Ftensors-and-autograd","16.ai-python\u002F13.pytorch-intro\u002F01.tensors-and-autograd",{"title":3905,"path":3906,"stem":3907},"Побудова та тренування нейронних мереж у PyTorch","\u002Fai-python\u002Fpytorch-intro\u002Fbuilding-and-training","16.ai-python\u002F13.pytorch-intro\u002F02.building-and-training",{"title":3909,"path":3910,"stem":3911},"Робота з даними та регуляризація в PyTorch","\u002Fai-python\u002Fpytorch-intro\u002Fdata-and-regularization","16.ai-python\u002F13.pytorch-intro\u002F03.data-and-regularization",{"title":3913,"path":3914,"stem":3915},"Просунуті теми PyTorch — GPU, оптимізація та deployment","\u002Fai-python\u002Fpytorch-intro\u002Fadvanced-topics","16.ai-python\u002F13.pytorch-intro\u002F04.advanced-topics",{"title":3917,"path":3918,"stem":3919,"children":3920,"page":59},"Activation Functions Heart Disease","\u002Fai-python\u002Factivation-functions-heart-disease","16.ai-python\u002F14.activation-functions-heart-disease",[3921,3925],{"title":3922,"path":3923,"stem":3924},"Функції активації та побудова нейронної мережі для передбачення вад серця","\u002Fai-python\u002Factivation-functions-heart-disease\u002Fheart-disease-prediction","16.ai-python\u002F14.activation-functions-heart-disease\u002F01.heart-disease-prediction",{"title":3926,"path":3927,"stem":3928},"Бонус — Повний приклад Student Performance Prediction","\u002Fai-python\u002Factivation-functions-heart-disease\u002Fstudent-performance-bonus","16.ai-python\u002F14.activation-functions-heart-disease\u002F02.student-performance-bonus",{"title":3930,"path":3931,"stem":3932,"children":3933,"page":59},"Cnn Image Classification","\u002Fai-python\u002Fcnn-image-classification","16.ai-python\u002F15.cnn-image-classification",[3934,3938,3942,3946],{"title":3935,"path":3936,"stem":3937},"Основи згорткових нейронних мереж — чому не MLP?","\u002Fai-python\u002Fcnn-image-classification\u002Fcnn-fundamentals","16.ai-python\u002F15.cnn-image-classification\u002F01.cnn-fundamentals",{"title":3939,"path":3940,"stem":3941},"Практична імплементація CNN для класифікації MNIST","\u002Fai-python\u002Fcnn-image-classification\u002Fmnist-classification","16.ai-python\u002F15.cnn-image-classification\u002F02.mnist-classification",{"title":3943,"path":3944,"stem":3945},"Глибші CNN та аугментація даних для CIFAR-10","\u002Fai-python\u002Fcnn-image-classification\u002Fcifar10-and-data-augmentation","16.ai-python\u002F15.cnn-image-classification\u002F03.cifar10-and-data-augmentation",{"title":3947,"path":3948,"stem":3949},"Transfer Learning та візуалізація внутрішніх представлень CNN","\u002Fai-python\u002Fcnn-image-classification\u002Ftransfer-learning-and-visualization","16.ai-python\u002F15.cnn-image-classification\u002F04.transfer-learning-and-visualization",{"title":3951,"path":3952,"stem":3953,"children":3954,"page":59},"Batching Normalization Deep Networks","\u002Fai-python\u002Fbatching-normalization-deep-networks","16.ai-python\u002F16.batching-normalization-deep-networks",[3955,3959,3963,3967,3971,3975,3979],{"title":3956,"path":3957,"stem":3958},"Mini-batch Gradient Descent та ефективна обробка даних","\u002Fai-python\u002Fbatching-normalization-deep-networks\u002Fmini-batch-gradient-descent","16.ai-python\u002F16.batching-normalization-deep-networks\u002F01.mini-batch-gradient-descent",{"title":3960,"path":3961,"stem":3962},"Ініціалізація ваг — фундамент стабільного навчання","\u002Fai-python\u002Fbatching-normalization-deep-networks\u002Fweight-initialization","16.ai-python\u002F16.batching-normalization-deep-networks\u002F02.weight-initialization",{"title":3964,"path":3965,"stem":3966},"Batch Normalization — прорив у глибокому навчанні","\u002Fai-python\u002Fbatching-normalization-deep-networks\u002Fbatch-normalization","16.ai-python\u002F16.batching-normalization-deep-networks\u002F03.batch-normalization",{"title":3968,"path":3969,"stem":3970},"Dropout та комбіновані стратегії регуляризації","\u002Fai-python\u002Fbatching-normalization-deep-networks\u002Fdropout-and-regularization","16.ai-python\u002F16.batching-normalization-deep-networks\u002F04.dropout-and-regularization",{"title":3972,"path":3973,"stem":3974},"Проєктування глибоких мереж — від теорії до практики","\u002Fai-python\u002Fbatching-normalization-deep-networks\u002Fdeep-networks-architectures","16.ai-python\u002F16.batching-normalization-deep-networks\u002F05.deep-networks-architectures",{"title":3976,"path":3977,"stem":3978},"Планування learning rate — коли та як зменшувати крок навчання","\u002Fai-python\u002Fbatching-normalization-deep-networks\u002Flearning-rate-scheduling","16.ai-python\u002F16.batching-normalization-deep-networks\u002F06.learning-rate-scheduling",{"title":3980,"path":3981,"stem":3982},"Підсумковий проєкт — побудова сучасного класифікатора зображень","\u002Fai-python\u002Fbatching-normalization-deep-networks\u002Ffinal-project-deep-classifier","16.ai-python\u002F16.batching-normalization-deep-networks\u002F07.final-project-deep-classifier",{"title":3984,"icon":658,"path":3985,"stem":3986,"children":3987,"page":59},"Клієнт-серверна архітектура","\u002Fclient-server-architecture","17.client-server-architecture",[3988,3992,3996,4000,4004,4008,4012,4016,4020,4024,4028,4032,4036,4040,4044,4048,4052,4056],{"title":3989,"path":3990,"stem":3991},"Архітектура клієнт-серверних систем та основи Go","\u002Fclient-server-architecture\u002Fclient-server-architecture-and-go","17.client-server-architecture\u002F01.client-server-architecture-and-go",{"title":3993,"path":3994,"stem":3995},"Система типів та модель пам’яті мови Go","\u002Fclient-server-architecture\u002Ftype-system-and-memory-model","17.client-server-architecture\u002F02.type-system-and-memory-model",{"title":3997,"path":3998,"stem":3999},"Інтерфейси та модель конкурентності мови Go","\u002Fclient-server-architecture\u002Finterfaces-and-concurrency-model","17.client-server-architecture\u002F03.interfaces-and-concurrency-model",{"title":4001,"path":4002,"stem":4003},"Сокетне програмування та протокол TCP у Go","\u002Fclient-server-architecture\u002Ftcp-socket-programming","17.client-server-architecture\u002F04.tcp-socket-programming",{"title":4005,"path":4006,"stem":4007},"Протокол UDP та датаграмна передача даних","\u002Fclient-server-architecture\u002Fudp-datagram-transmission","17.client-server-architecture\u002F05.udp-datagram-transmission",{"title":4009,"path":4010,"stem":4011},"Криптографічний захист каналів зв","\u002Fclient-server-architecture\u002Ftls-cryptographic-channel-protection","17.client-server-architecture\u002F06.tls-cryptographic-channel-protection",{"title":4013,"path":4014,"stem":4015},"Прикладні мережеві протоколи DNS та SMTP","\u002Fclient-server-architecture\u002Fdns-smtp-application-protocols","17.client-server-architecture\u002F07.dns-smtp-application-protocols",{"title":4017,"path":4018,"stem":4019},"Протокол HTTP та стандартний вебсервер Go","\u002Fclient-server-architecture\u002Fhttp-protocol-and-web-server","17.client-server-architecture\u002F08.http-protocol-and-web-server",{"title":4021,"path":4022,"stem":4023},"Проєктування REST API та маршрутизація засобами Chi","\u002Fclient-server-architecture\u002Frest-api-design-and-chi-routing","17.client-server-architecture\u002F09.rest-api-design-and-chi-routing",{"title":4025,"path":4026,"stem":4027},"Лекція 10. Шарувата архітектура та конвеєри обробки запитів","\u002Fclient-server-architecture\u002Flayered-architecture-and-middleware-pipelines","17.client-server-architecture\u002F10.layered-architecture-and-middleware-pipelines",{"title":4029,"path":4030,"stem":4031},"Лекція 11. Архітектура та маршрутизація фреймворку Gin","\u002Fclient-server-architecture\u002Fgin-framework-architecture-and-routing","17.client-server-architecture\u002F11.gin-framework-architecture-and-routing",{"title":4033,"path":4034,"stem":4035},"Лекція 12. Валідація даних, безпека та документування у Gin","\u002Fclient-server-architecture\u002Fdata-validation-security-and-documentation-in-gin","17.client-server-architecture\u002F12.data-validation-security-and-documentation-in-gin",{"title":4037,"path":4038,"stem":4039},"Лекція 13. Взаємодія з реляційними СУБД та технології ORM","\u002Fclient-server-architecture\u002Frelational-databases-and-orm","17.client-server-architecture\u002F13.relational-databases-and-orm",{"title":4041,"path":4042,"stem":4043},"Потокова передача даних та протокол WebSocket","\u002Fclient-server-architecture\u002Fstreaming-data-and-websockets","17.client-server-architecture\u002F14.streaming-data-and-websockets",{"title":4045,"path":4046,"stem":4047},"Міжсервісна взаємодія на основі протоколу gRPC","\u002Fclient-server-architecture\u002Fgrpc-inter-service-communication","17.client-server-architecture\u002F15.grpc-inter-service-communication",{"title":4049,"path":4050,"stem":4051},"Асинхронний обмін повідомленнями та протоколи черг","\u002Fclient-server-architecture\u002Fasynchronous-message-exchange-and-queue-protocols","17.client-server-architecture\u002F16.asynchronous-message-exchange-and-queue-protocols",{"title":4053,"path":4054,"stem":4055},"Протоколи потокового медіа та технологія WebRTC","\u002Fclient-server-architecture\u002Fstreaming-media-protocols-and-webrtc","17.client-server-architecture\u002F17.streaming-media-protocols-and-webrtc",{"title":4057,"path":4058,"stem":4059},"Моніторинг, безпека та контейнеризація застосунків","\u002Fclient-server-architecture\u002Fmonitoring-security-and-containerization","17.client-server-architecture\u002F18.monitoring-security-and-containerization",{"title":4061,"icon":2118,"path":4062,"stem":4063,"children":4064,"page":59},"Розробка WEB-застосувань","\u002Fweb-development","18.web-development",[4065,4110,4148,4177,4206,4263,4313,4407,4473,4555,4588,4616,4658,4704,4747],{"title":4066,"icon":658,"path":4067,"stem":4068,"children":4069,"page":59},"Архітектура комп'ютерних мереж та мережеві протоколи","\u002Fweb-development\u002Fnetwork-architecture-and-protocols","18.web-development\u002F01.network-architecture-and-protocols",[4070,4074,4078,4082,4086,4090,4094,4098,4102,4106],{"title":4071,"path":4072,"stem":4073},"Еволюція веброзробки та модель клієнт-сервер","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Fweb-evolution-client-server","18.web-development\u002F01.network-architecture-and-protocols\u002F01.web-evolution-client-server",{"title":4075,"path":4076,"stem":4077},"Еталонна модель OSI","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Fosi-model","18.web-development\u002F01.network-architecture-and-protocols\u002F02.osi-model",{"title":4079,"path":4080,"stem":4081},"Стек протоколів TCP\u002FIP","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Ftcp-ip-stack","18.web-development\u002F01.network-architecture-and-protocols\u002F03.tcp-ip-stack",{"title":4083,"path":4084,"stem":4085},"IP-адресація, порти та сокети","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Fip-addressing-ports-sockets","18.web-development\u002F01.network-architecture-and-protocols\u002F04.ip-addressing-ports-sockets",{"title":4087,"path":4088,"stem":4089},"Протоколи TCP та UDP","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Ftcp-udp-protocols","18.web-development\u002F01.network-architecture-and-protocols\u002F05.tcp-udp-protocols",{"title":4091,"path":4092,"stem":4093},"Система доменних імен DNS","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Fdns-system","18.web-development\u002F01.network-architecture-and-protocols\u002F06.dns-system",{"title":4095,"path":4096,"stem":4097},"Протокол SMTP та поштові протоколи","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Fsmtp-email-protocols","18.web-development\u002F01.network-architecture-and-protocols\u002F07.smtp-email-protocols",{"title":4099,"path":4100,"stem":4101},"Протокол WebSocket","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Fwebsocket-protocol","18.web-development\u002F01.network-architecture-and-protocols\u002F08.websocket-protocol",{"title":4103,"path":4104,"stem":4105},"Протокол SSH","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Fssh-protocol","18.web-development\u002F01.network-architecture-and-protocols\u002F09.ssh-protocol",{"title":4107,"path":4108,"stem":4109},"Огляд сучасних серверних технологій","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Fmodern-backend-technologies","18.web-development\u002F01.network-architecture-and-protocols\u002F10.modern-backend-technologies",{"title":4111,"icon":4112,"path":4113,"stem":4114,"children":4115,"page":59},"Протокол HTTP та захищена передача даних HTTPS","i-lucide-lock","\u002Fweb-development\u002Fhttp-and-https","18.web-development\u002F02.http-and-https",[4116,4120,4124,4128,4132,4136,4140,4144],{"title":4117,"path":4118,"stem":4119},"Вступ до протоколу HTTP та еволюція веб-технологій","\u002Fweb-development\u002Fhttp-and-https\u002Fintroduction-and-evolution","18.web-development\u002F02.http-and-https\u002F01.introduction-and-evolution",{"title":4121,"path":4122,"stem":4123},"Анатомія HTTP-запиту","\u002Fweb-development\u002Fhttp-and-https\u002Fhttp-request-structure","18.web-development\u002F02.http-and-https\u002F02.http-request-structure",{"title":4125,"path":4126,"stem":4127},"Анатомія HTTP-відповіді","\u002Fweb-development\u002Fhttp-and-https\u002Fhttp-response-structure","18.web-development\u002F02.http-and-https\u002F03.http-response-structure",{"title":4129,"path":4130,"stem":4131},"Методи HTTP та їхня семантика","\u002Fweb-development\u002Fhttp-and-https\u002Fhttp-methods","18.web-development\u002F02.http-and-https\u002F04.http-methods",{"title":4133,"path":4134,"stem":4135},"Коди статусу HTTP та їхнє призначення","\u002Fweb-development\u002Fhttp-and-https\u002Fhttp-status-codes","18.web-development\u002F02.http-and-https\u002F05.http-status-codes",{"title":4137,"path":4138,"stem":4139},"HTTP-заголовки та їхнє призначення","\u002Fweb-development\u002Fhttp-and-https\u002Fhttp-headers","18.web-development\u002F02.http-and-https\u002F06.http-headers",{"title":4141,"path":4142,"stem":4143},"CORS та механізми безпеки HTTP","\u002Fweb-development\u002Fhttp-and-https\u002Fcors-and-security","18.web-development\u002F02.http-and-https\u002F07.cors-and-security",{"title":4145,"path":4146,"stem":4147},"HTTPS та криптографічні основи TLS","\u002Fweb-development\u002Fhttp-and-https\u002Fhttps-and-tls","18.web-development\u002F02.http-and-https\u002F08.https-and-tls",{"title":4149,"icon":2498,"path":4150,"stem":4151,"children":4152,"page":59},"Система типів мови TypeScript","\u002Fweb-development\u002Ftypescript-type-system","18.web-development\u002F03.typescript-type-system",[4153,4157,4161,4165,4169,4173],{"title":4154,"path":4155,"stem":4156},"Знайомство з TypeScript Compiler","\u002Fweb-development\u002Ftypescript-type-system\u002Fintroduction-compiler-config","18.web-development\u002F03.typescript-type-system\u002F01.introduction-compiler-config",{"title":4158,"path":4159,"stem":4160},"Примітивні типи даних: string, number, boolean","\u002Fweb-development\u002Ftypescript-type-system\u002Fprimitive-special-types","18.web-development\u002F03.typescript-type-system\u002F02.primitive-special-types",{"title":4162,"path":4163,"stem":4164},"Масиви, кортежі та об","\u002Fweb-development\u002Ftypescript-type-system\u002Farrays-tuples-objects","18.web-development\u002F03.typescript-type-system\u002F03.arrays-tuples-objects",{"title":4166,"path":4167,"stem":4168},"Псевдоніми типів, Union типи, Intersection типи та літеральні типи","\u002Fweb-development\u002Ftypescript-type-system\u002Funion-intersection-literals","18.web-development\u002F03.typescript-type-system\u002F04.union-intersection-literals",{"title":4170,"path":4171,"stem":4172},"Type Narrowing (звуження типів)","\u002Fweb-development\u002Ftypescript-type-system\u002Ftype-narrowing","18.web-development\u002F03.typescript-type-system\u002F05.type-narrowing",{"title":4174,"path":4175,"stem":4176},"Типізація функцій","\u002Fweb-development\u002Ftypescript-type-system\u002Ffunctions-typing","18.web-development\u002F03.typescript-type-system\u002F06.functions-typing",{"title":4178,"icon":2498,"path":4179,"stem":4180,"children":4181,"page":59},"Розширені засоби мови TypeScript","\u002Fweb-development\u002Ftypescript-advanced","18.web-development\u002F04.typescript-advanced",[4182,4186,4190,4194,4198,4202],{"title":4183,"path":4184,"stem":4185},"Interfaces та Classes","\u002Fweb-development\u002Ftypescript-advanced\u002Finterfaces-classes","18.web-development\u002F04.typescript-advanced\u002F01.interfaces-classes",{"title":4187,"path":4188,"stem":4189},"Основи Generic типів","\u002Fweb-development\u002Ftypescript-advanced\u002Fgenerics-fundamentals","18.web-development\u002F04.typescript-advanced\u002F02.generics-fundamentals",{"title":4191,"path":4192,"stem":4193},"Enums та Decorators","\u002Fweb-development\u002Ftypescript-advanced\u002Fenums-decorators","18.web-development\u002F04.typescript-advanced\u002F03.enums-decorators",{"title":4195,"path":4196,"stem":4197},"Utility Types","\u002Fweb-development\u002Ftypescript-advanced\u002Futility-types","18.web-development\u002F04.typescript-advanced\u002F04.utility-types",{"title":4199,"path":4200,"stem":4201},"Mapped та Conditional Types","\u002Fweb-development\u002Ftypescript-advanced\u002Fmapped-conditional-types","18.web-development\u002F04.typescript-advanced\u002F05.mapped-conditional-types",{"title":4203,"path":4204,"stem":4205},"Модулі та Strict Mode","\u002Fweb-development\u002Ftypescript-advanced\u002Fmodules-strict-mode","18.web-development\u002F04.typescript-advanced\u002F06.modules-strict-mode",{"title":4207,"icon":4208,"path":4209,"stem":4210,"children":4211,"page":59},"Платформа Node.js як середовище виконання","i-devicon-nodejs","\u002Fweb-development\u002Fnodejs-platform","18.web-development\u002F05.nodejs-platform",[4212,4216,4220,4224,4228,4232,4236,4240,4244,4248,4252,4255,4259],{"title":4213,"path":4214,"stem":4215},"Що таке Node.js та його архітектура","\u002Fweb-development\u002Fnodejs-platform\u002Fwhat-is-nodejs","18.web-development\u002F05.nodejs-platform\u002F01.what-is-nodejs",{"title":4217,"path":4218,"stem":4219},"Event Loop — серце Node.js","\u002Fweb-development\u002Fnodejs-platform\u002Fevent-loop","18.web-development\u002F05.nodejs-platform\u002F02.event-loop",{"title":4221,"path":4222,"stem":4223},"Модульні системи: CommonJS vs ES Modules","\u002Fweb-development\u002Fnodejs-platform\u002Fmodule-systems","18.web-development\u002F05.nodejs-platform\u002F03.module-systems",{"title":4225,"path":4226,"stem":4227},"npm та package.json","\u002Fweb-development\u002Fnodejs-platform\u002Fnpm-package-json","18.web-development\u002F05.nodejs-platform\u002F04.npm-package-json",{"title":4229,"path":4230,"stem":4231},"Глобальні об\\","\u002Fweb-development\u002Fnodejs-platform\u002Fglobal-objects","18.web-development\u002F05.nodejs-platform\u002F05.global-objects",{"title":4233,"path":4234,"stem":4235},"Вбудований модуль fs (File System)","\u002Fweb-development\u002Fnodejs-platform\u002Fbuilt-in-modules-fs","18.web-development\u002F05.nodejs-platform\u002F06.built-in-modules-fs",{"title":4237,"path":4238,"stem":4239},"Вбудований модуль path","\u002Fweb-development\u002Fnodejs-platform\u002Fbuilt-in-modules-path","18.web-development\u002F05.nodejs-platform\u002F07.built-in-modules-path",{"title":4241,"path":4242,"stem":4243},"Вбудований модуль http","\u002Fweb-development\u002Fnodejs-platform\u002Fbuilt-in-modules-http","18.web-development\u002F05.nodejs-platform\u002F08.built-in-modules-http",{"title":4245,"path":4246,"stem":4247},"Streams — потоки даних у Node.js","\u002Fweb-development\u002Fnodejs-platform\u002Fstreams","18.web-development\u002F05.nodejs-platform\u002F09.streams",{"title":4249,"path":4250,"stem":4251},"Вбудований модуль util (Utilities)","\u002Fweb-development\u002Fnodejs-platform\u002Fbuilt-in-modules-util","18.web-development\u002F05.nodejs-platform\u002F10.built-in-modules-util",{"title":3141,"path":4253,"stem":4254},"\u002Fweb-development\u002Fnodejs-platform\u002Fenvironment-variables","18.web-development\u002F05.nodejs-platform\u002F11.environment-variables",{"title":4256,"path":4257,"stem":4258},"Інструменти налагодження та розробки","\u002Fweb-development\u002Fnodejs-platform\u002Fdebugging-tools","18.web-development\u002F05.nodejs-platform\u002F12.debugging-tools",{"title":4260,"path":4261,"stem":4262},"Продуктивність та Best Practices","\u002Fweb-development\u002Fnodejs-platform\u002Fperformance-best-practices","18.web-development\u002F05.nodejs-platform\u002F13.performance-best-practices",{"title":4264,"icon":4265,"path":4266,"stem":4267,"children":4268,"page":59},"Асинхронне програмування у Node.js","i-lucide-clock","\u002Fweb-development\u002Fasync-programming-nodejs","18.web-development\u002F06.async-programming-nodejs",[4269,4273,4277,4281,4285,4289,4293,4297,4301,4305,4309],{"title":4270,"path":4271,"stem":4272},"Синхронний vs асинхронний код","\u002Fweb-development\u002Fasync-programming-nodejs\u002Fsync-vs-async","18.web-development\u002F06.async-programming-nodejs\u002F01.sync-vs-async",{"title":4274,"path":4275,"stem":4276},"Callbacks — перша парадигма асинхронності","\u002Fweb-development\u002Fasync-programming-nodejs\u002Fcallbacks","18.web-development\u002F06.async-programming-nodejs\u002F02.callbacks",{"title":4278,"path":4279,"stem":4280},"Promises — стандарт асинхронності","\u002Fweb-development\u002Fasync-programming-nodejs\u002Fpromises","18.web-development\u002F06.async-programming-nodejs\u002F03.promises",{"title":4282,"path":4283,"stem":4284},"Promise комбінатори","\u002Fweb-development\u002Fasync-programming-nodejs\u002Fpromise-combinators","18.web-development\u002F06.async-programming-nodejs\u002F04.promise-combinators",{"title":4286,"path":4287,"stem":4288},"Async\u002FAwait — синтаксичний цукор над Promises","\u002Fweb-development\u002Fasync-programming-nodejs\u002Fasync-await","18.web-development\u002F06.async-programming-nodejs\u002F05.async-await",{"title":4290,"path":4291,"stem":4292},"Паралельне vs послідовне виконання","\u002Fweb-development\u002Fasync-programming-nodejs\u002Fparallel-vs-sequential","18.web-development\u002F06.async-programming-nodejs\u002F06.parallel-vs-sequential",{"title":4294,"path":4295,"stem":4296},"EventEmitter — подієва модель Node.js","\u002Fweb-development\u002Fasync-programming-nodejs\u002Fevent-emitter","18.web-development\u002F06.async-programming-nodejs\u002F07.event-emitter",{"title":4298,"path":4299,"stem":4300},"Worker Threads — багатопотоковість у Node.js","\u002Fweb-development\u002Fasync-programming-nodejs\u002Fworker-threads","18.web-development\u002F06.async-programming-nodejs\u002F08.worker-threads",{"title":4302,"path":4303,"stem":4304},"Child Processes — запуск зовнішніх процесів","\u002Fweb-development\u002Fasync-programming-nodejs\u002Fchild-processes","18.web-development\u002F06.async-programming-nodejs\u002F09.child-processes",{"title":4306,"path":4307,"stem":4308},"Обробка помилок у асинхронному коді","\u002Fweb-development\u002Fasync-programming-nodejs\u002Ferror-handling","18.web-development\u002F06.async-programming-nodejs\u002F10.error-handling",{"title":4310,"path":4311,"stem":4312},"Порівняння Node.js фреймворків","\u002Fweb-development\u002Fasync-programming-nodejs\u002Fnodejs-frameworks","18.web-development\u002F06.async-programming-nodejs\u002F11.nodejs-frameworks",{"title":4314,"icon":4315,"path":4316,"stem":4317,"children":4318,"page":59},"Тема 7. Фреймворк NestJS. Контролери та маршрутизація","i-lucide-route","\u002Fweb-development\u002Fnestjs-controllers-routing","18.web-development\u002F07.nestjs-controllers-routing",[4319,4323,4327,4331,4335,4339,4343,4347,4351,4355,4359,4363,4367,4371,4375,4379,4383,4387,4391,4395,4399,4403],{"title":4320,"path":4321,"stem":4322},"Філософія та архітектура NestJS","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Fnestjs-philosophy","18.web-development\u002F07.nestjs-controllers-routing\u002F01.nestjs-philosophy",{"title":4324,"path":4325,"stem":4326},"Три стовпи архітектури: модулі, контролери, провайдери","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Fthree-pillars","18.web-development\u002F07.nestjs-controllers-routing\u002F02.three-pillars",{"title":4328,"path":4329,"stem":4330},"Інверсія керування (IoC) та ін","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Fioc-and-di","18.web-development\u002F07.nestjs-controllers-routing\u002F03.ioc-and-di",{"title":4332,"path":4333,"stem":4334},"Встановлення NestJS CLI та створення проєкту","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Fnestjs-cli-setup","18.web-development\u002F07.nestjs-controllers-routing\u002F04.nestjs-cli-setup",{"title":4336,"path":4337,"stem":4338},"Структура проєкту NestJS та конвенції","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Fproject-structure","18.web-development\u002F07.nestjs-controllers-routing\u002F05.project-structure",{"title":4340,"path":4341,"stem":4342},"Контролери: основи маршрутизації","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Fcontrollers-basics","18.web-development\u002F07.nestjs-controllers-routing\u002F06.controllers-basics",{"title":4344,"path":4345,"stem":4346},"Декоратори маршрутизації HTTP-методів","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Froute-decorators","18.web-development\u002F07.nestjs-controllers-routing\u002F07.route-decorators",{"title":4348,"path":4349,"stem":4350},"Параметри маршруту та декоратор @Param","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Froute-parameters","18.web-development\u002F07.nestjs-controllers-routing\u002F08.route-parameters",{"title":4352,"path":4353,"stem":4354},"Query-параметри та декоратор @Query","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Fquery-parameters","18.web-development\u002F07.nestjs-controllers-routing\u002F09.query-parameters",{"title":4356,"path":4357,"stem":4358},"Тіло запиту та декоратор @Body","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Frequest-body","18.web-development\u002F07.nestjs-controllers-routing\u002F10.request-body",{"title":4360,"path":4361,"stem":4362},"Робота з заголовками запиту та відповіді","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Fheaders-decorators","18.web-development\u002F07.nestjs-controllers-routing\u002F11.headers-decorators",{"title":4364,"path":4365,"stem":4366},"Data Transfer Objects (DTO): визначення та призначення","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Fdto-introduction","18.web-development\u002F07.nestjs-controllers-routing\u002F12.dto-introduction",{"title":4368,"path":4369,"stem":4370},"Об'єкти Request та Response","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Frequest-response-objects","18.web-development\u002F07.nestjs-controllers-routing\u002F13.request-response-objects",{"title":4372,"path":4373,"stem":4374},"HTTP-статус коди та декоратор @HttpCode","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Fhttp-status-codes","18.web-development\u002F07.nestjs-controllers-routing\u002F14.http-status-codes",{"title":4376,"path":4377,"stem":4378},"Перенаправлення (Redirects) та декоратор @Redirect","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Fredirects","18.web-development\u002F07.nestjs-controllers-routing\u002F15.redirects",{"title":4380,"path":4381,"stem":4382},"Асинхронні обробники та Observables","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Fasync-handlers","18.web-development\u002F07.nestjs-controllers-routing\u002F16.async-handlers",{"title":4384,"path":4385,"stem":4386},"Маршрутизація за піддоменами та версіонування API","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Fsub-domain-routing","18.web-development\u002F07.nestjs-controllers-routing\u002F17.sub-domain-routing",{"title":4388,"path":4389,"stem":4390},"Області видимості контролерів (Scopes)","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Fcontroller-scopes","18.web-development\u002F07.nestjs-controllers-routing\u002F18.controller-scopes",{"title":4392,"path":4393,"stem":4394},"Основні команди NestJS CLI","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Fnestjs-cli-commands","18.web-development\u002F07.nestjs-controllers-routing\u002F19.nestjs-cli-commands",{"title":4396,"path":4397,"stem":4398},"Практичний приклад: створення CRUD-контролера","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Fcrud-example","18.web-development\u002F07.nestjs-controllers-routing\u002F20.crud-example",{"title":4400,"path":4401,"stem":4402},"Тестування контролерів","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Ftesting-controllers","18.web-development\u002F07.nestjs-controllers-routing\u002F21.testing-controllers",{"title":4404,"path":4405,"stem":4406},"Best Practices для контролерів та маршрутизації","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Fbest-practices","18.web-development\u002F07.nestjs-controllers-routing\u002F22.best-practices",{"title":4408,"icon":4409,"path":4410,"stem":4411,"children":4412,"page":59},"Тема 8. Провайдери, сервіси та модульна система NestJS","i-lucide-package","\u002Fweb-development\u002Fnestjs-providers-modules","18.web-development\u002F08.nestjs-providers-modules",[4413,4417,4421,4425,4429,4433,4437,4441,4445,4449,4453,4457,4461,4465,4469],{"title":4414,"path":4415,"stem":4416},"Концепція провайдерів у NestJS","\u002Fweb-development\u002Fnestjs-providers-modules\u002Fproviders-concept","18.web-development\u002F08.nestjs-providers-modules\u002F01.providers-concept",{"title":4418,"path":4419,"stem":4420},"Сервіси: інкапсуляція бізнес-логіки","\u002Fweb-development\u002Fnestjs-providers-modules\u002Fservices-business-logic","18.web-development\u002F08.nestjs-providers-modules\u002F02.services-business-logic",{"title":4422,"path":4423,"stem":4424},"Практика ін","\u002Fweb-development\u002Fnestjs-providers-modules\u002Fdependency-injection-practice","18.web-development\u002F08.nestjs-providers-modules\u002F03.dependency-injection-practice",{"title":4426,"path":4427,"stem":4428},"Custom Providers: useValue, useClass, useFactory, useExisting","\u002Fweb-development\u002Fnestjs-providers-modules\u002Fcustom-providers","18.web-development\u002F08.nestjs-providers-modules\u002F04.custom-providers",{"title":4430,"path":4431,"stem":4432},"Injection Tokens: рядкові та символьні токени","\u002Fweb-development\u002Fnestjs-providers-modules\u002Finjection-tokens","18.web-development\u002F08.nestjs-providers-modules\u002F05.injection-tokens",{"title":4434,"path":4435,"stem":4436},"Опціональні провайдери та декоратор @Optional","\u002Fweb-development\u002Fnestjs-providers-modules\u002Foptional-providers","18.web-development\u002F08.nestjs-providers-modules\u002F07.optional-providers",{"title":4438,"path":4439,"stem":4440},"Структура модулів: imports, controllers, providers, exports","\u002Fweb-development\u002Fnestjs-providers-modules\u002Fmodules-structure","18.web-development\u002F08.nestjs-providers-modules\u002F08.modules-structure",{"title":4442,"path":4443,"stem":4444},"Feature Modules: ізоляція функціональності","\u002Fweb-development\u002Fnestjs-providers-modules\u002Ffeature-modules","18.web-development\u002F08.nestjs-providers-modules\u002F09.feature-modules",{"title":4446,"path":4447,"stem":4448},"Shared Modules: перевикористання провайдерів","\u002Fweb-development\u002Fnestjs-providers-modules\u002Fshared-modules","18.web-development\u002F08.nestjs-providers-modules\u002F10.shared-modules",{"title":4450,"path":4451,"stem":4452},"Global Modules та декоратор @Global","\u002Fweb-development\u002Fnestjs-providers-modules\u002Fglobal-modules","18.web-development\u002F08.nestjs-providers-modules\u002F11.global-modules",{"title":4454,"path":4455,"stem":4456},"Dynamic Modules: конфігурація під час виконання","\u002Fweb-development\u002Fnestjs-providers-modules\u002Fdynamic-modules","18.web-development\u002F08.nestjs-providers-modules\u002F12.dynamic-modules",{"title":4458,"path":4459,"stem":4460},"Циклічні залежності та forwardRef","\u002Fweb-development\u002Fnestjs-providers-modules\u002Fcircular-dependencies","18.web-development\u002F08.nestjs-providers-modules\u002F13.circular-dependencies",{"title":4462,"path":4463,"stem":4464},"Lifecycle Hooks: хуки життєвого циклу","\u002Fweb-development\u002Fnestjs-providers-modules\u002Flifecycle-hooks","18.web-development\u002F08.nestjs-providers-modules\u002F14.lifecycle-hooks",{"title":4466,"path":4467,"stem":4468},"ModuleRef: динамічний доступ до провайдерів","\u002Fweb-development\u002Fnestjs-providers-modules\u002Fmodule-reference","18.web-development\u002F08.nestjs-providers-modules\u002F15.module-reference",{"title":4470,"path":4471,"stem":4472},"Тестування сервісів та провайдерів","\u002Fweb-development\u002Fnestjs-providers-modules\u002Ftesting-services","18.web-development\u002F08.nestjs-providers-modules\u002F16.testing-services",{"title":4474,"icon":4475,"path":4476,"stem":4477,"children":4478,"page":59},"Тема 9. Валідація даних та конвеєр обробки запитів у NestJS","i-lucide-filter","\u002Fweb-development\u002Fnestjs-validation-pipeline","18.web-development\u002F09.nestjs-validation-pipeline",[4479,4483,4487,4491,4495,4499,4503,4507,4511,4515,4519,4523,4527,4531,4535,4539,4543,4547,4551],{"title":4480,"path":4481,"stem":4482},"Request Pipeline: конвеєр обробки запитів","\u002Fweb-development\u002Fnestjs-validation-pipeline\u002Frequest-pipeline","18.web-development\u002F09.nestjs-validation-pipeline\u002F01.request-pipeline",{"title":4484,"path":4485,"stem":4486},"Pipes: концепція трансформації та валідації","\u002Fweb-development\u002Fnestjs-validation-pipeline\u002Fpipes-concept","18.web-development\u002F09.nestjs-validation-pipeline\u002F02.pipes-concept",{"title":4488,"path":4489,"stem":4490},"Вбудовані pipes: ParseIntPipe, ParseBoolPipe, ParseUUIDPipe","\u002Fweb-development\u002Fnestjs-validation-pipeline\u002Fbuilt-in-pipes","18.web-development\u002F09.nestjs-validation-pipeline\u002F03.built-in-pipes",{"title":4492,"path":4493,"stem":4494},"ValidationPipe: автоматична валідація DTO","\u002Fweb-development\u002Fnestjs-validation-pipeline\u002Fvalidation-pipe","18.web-development\u002F09.nestjs-validation-pipeline\u002F04.validation-pipe",{"title":4496,"path":4497,"stem":4498},"Декоратори class-validator для DTO","\u002Fweb-development\u002Fnestjs-validation-pipeline\u002Fclass-validator-decorators","18.web-development\u002F09.nestjs-validation-pipeline\u002F05.class-validator-decorators",{"title":4500,"path":4501,"stem":4502},"Створення кастомних валідаторів","\u002Fweb-development\u002Fnestjs-validation-pipeline\u002Fcustom-validators","18.web-development\u002F09.nestjs-validation-pipeline\u002F06.custom-validators",{"title":4504,"path":4505,"stem":4506},"Створення власних Pipes","\u002Fweb-development\u002Fnestjs-validation-pipeline\u002Fcustom-pipes","18.web-development\u002F09.nestjs-validation-pipeline\u002F07.custom-pipes",{"title":4508,"path":4509,"stem":4510},"Основи Middleware","\u002Fweb-development\u002Fnestjs-validation-pipeline\u002Fmiddleware-basics","18.web-development\u002F09.nestjs-validation-pipeline\u002F08.middleware-basics",{"title":4512,"path":4513,"stem":4514},"Практичні приклади Middleware","\u002Fweb-development\u002Fnestjs-validation-pipeline\u002Fmiddleware-examples","18.web-development\u002F09.nestjs-validation-pipeline\u002F09.middleware-examples",{"title":4516,"path":4517,"stem":4518},"Guards: захисні перехоплювачі доступу","\u002Fweb-development\u002Fnestjs-validation-pipeline\u002Fguards-concept","18.web-development\u002F09.nestjs-validation-pipeline\u002F10.guards-concept",{"title":4520,"path":4521,"stem":4522},"Створення кастомних Guards","\u002Fweb-development\u002Fnestjs-validation-pipeline\u002Fcustom-guards","18.web-development\u002F09.nestjs-validation-pipeline\u002F11.custom-guards",{"title":4524,"path":4525,"stem":4526},"Interceptors: перехоплення та трансформація відповідей","\u002Fweb-development\u002Fnestjs-validation-pipeline\u002Finterceptors-concept","18.web-development\u002F09.nestjs-validation-pipeline\u002F12.interceptors-concept",{"title":4528,"path":4529,"stem":4530},"Практичні приклади Interceptors","\u002Fweb-development\u002Fnestjs-validation-pipeline\u002Finterceptor-examples","18.web-development\u002F09.nestjs-validation-pipeline\u002F13.interceptor-examples",{"title":4532,"path":4533,"stem":4534},"Exception Filters: обробка виключень","\u002Fweb-development\u002Fnestjs-validation-pipeline\u002Fexception-filters","18.web-development\u002F09.nestjs-validation-pipeline\u002F14.exception-filters",{"title":4536,"path":4537,"stem":4538},"Custom Exception Filters: спеціалізовані фільтри","\u002Fweb-development\u002Fnestjs-validation-pipeline\u002Fcustom-exception-filters","18.web-development\u002F09.nestjs-validation-pipeline\u002F15.custom-exception-filters",{"title":4540,"path":4541,"stem":4542},"Execution Context: контекст виконання","\u002Fweb-development\u002Fnestjs-validation-pipeline\u002Fexecution-context","18.web-development\u002F09.nestjs-validation-pipeline\u002F16.execution-context",{"title":4544,"path":4545,"stem":4546},"Custom Decorators: власні декоратори","\u002Fweb-development\u002Fnestjs-validation-pipeline\u002Fcustom-decorators","18.web-development\u002F09.nestjs-validation-pipeline\u002F17.custom-decorators",{"title":4548,"path":4549,"stem":4550},"Global Components: глобальні компоненти","\u002Fweb-development\u002Fnestjs-validation-pipeline\u002Fglobal-components","18.web-development\u002F09.nestjs-validation-pipeline\u002F18.global-components",{"title":4552,"path":4553,"stem":4554},"Pipeline Best Practices: найкращі практики","\u002Fweb-development\u002Fnestjs-validation-pipeline\u002Fpipeline-best-practices","18.web-development\u002F09.nestjs-validation-pipeline\u002F19.pipeline-best-practices",{"title":4556,"icon":2865,"path":4557,"stem":4558,"children":4559,"page":59},"Інтеграція реляційних баз даних засобами TypeORM","\u002Fweb-development\u002Ftypeorm-integration","18.web-development\u002F10.typeorm-integration",[4560,4564,4568,4572,4576,4580,4584],{"title":4561,"path":4562,"stem":4563},"Робота з базами даних у Node.js через нативні драйвери","\u002Fweb-development\u002Ftypeorm-integration\u002F01-nodejs-database-drivers","18.web-development\u002F10.typeorm-integration\u002F01-nodejs-database-drivers",{"title":4565,"path":4566,"stem":4567},"ORM та знайомство з TypeORM","\u002Fweb-development\u002Ftypeorm-integration\u002F02-orm-and-typeorm-intro","18.web-development\u002F10.typeorm-integration\u002F02-orm-and-typeorm-intro",{"title":4569,"path":4570,"stem":4571},"Налаштування TypeORM у NestJS проєкті","\u002Fweb-development\u002Ftypeorm-integration\u002F03-typeorm-setup-nestjs","18.web-development\u002F10.typeorm-integration\u002F03-typeorm-setup-nestjs",{"title":4573,"path":4574,"stem":4575},"Entity класи та декоратори TypeORM","\u002Fweb-development\u002Ftypeorm-integration\u002F04-entities-and-decorators","18.web-development\u002F10.typeorm-integration\u002F04-entities-and-decorators",{"title":4577,"path":4578,"stem":4579},"Repository Pattern та CRUD операції","\u002Fweb-development\u002Ftypeorm-integration\u002F05-repository-pattern-crud","18.web-development\u002F10.typeorm-integration\u002F05-repository-pattern-crud",{"title":4581,"path":4582,"stem":4583},"Пагінація та фільтрація даних","\u002Fweb-development\u002Ftypeorm-integration\u002F06-pagination-filtering","18.web-development\u002F10.typeorm-integration\u002F06-pagination-filtering",{"title":4585,"path":4586,"stem":4587},"QueryBuilder для складних запитів","\u002Fweb-development\u002Ftypeorm-integration\u002F07-query-builder","18.web-development\u002F10.typeorm-integration\u002F07-query-builder",{"title":4589,"icon":4590,"path":4591,"stem":4592,"children":4593,"page":59},"Зв'язки між сутностями, міграції та оптимізація запитів","i-lucide-git-branch","\u002Fweb-development\u002Fentity-relations-migrations","18.web-development\u002F11.entity-relations-migrations",[4594,4598,4602,4606,4610],{"title":4595,"path":4596,"stem":4597},"Зв'язки One-to-Many та Many-to-One","\u002Fweb-development\u002Fentity-relations-migrations\u002F01-one-to-many-many-to-one","18.web-development\u002F11.entity-relations-migrations\u002F01-one-to-many-many-to-one",{"title":4599,"path":4600,"stem":4601},"Зв'язки One-to-One та Many-to-Many","\u002Fweb-development\u002Fentity-relations-migrations\u002F02-one-to-one-many-to-many","18.web-development\u002F11.entity-relations-migrations\u002F02-one-to-one-many-to-many",{"title":4603,"path":4604,"stem":4605},"Керування міграціями бази даних","\u002Fweb-development\u002Fentity-relations-migrations\u002F03-migrations-management","18.web-development\u002F11.entity-relations-migrations\u002F03-migrations-management",{"title":4607,"path":4608,"stem":4609},"Транзакції у TypeORM","\u002Fweb-development\u002Fentity-relations-migrations\u002F04-transactions","18.web-development\u002F11.entity-relations-migrations\u002F04-transactions",{"title":4611,"path":4612,"stem":4613,"children":4614},"Індекси та оптимізація запитів","\u002Fweb-development\u002Fentity-relations-migrations\u002F05-indexes-optimization","18.web-development\u002F11.entity-relations-migrations\u002F05-indexes-optimization",[4615],{"title":4611,"path":4612,"stem":4613},{"title":4617,"icon":4618,"path":4619,"stem":4620,"children":4621,"page":59},"Механізми автентифікації у вебзастосунках","i-lucide-key","\u002Fweb-development\u002Fauthentication","18.web-development\u002F12.authentication",[4622,4626,4630,4634,4638,4642,4646,4650,4654],{"title":4623,"path":4624,"stem":4625},"Автентифікація vs Авторизація","\u002Fweb-development\u002Fauthentication\u002F01-authentication-vs-authorization","18.web-development\u002F12.authentication\u002F01-authentication-vs-authorization",{"title":4627,"path":4628,"stem":4629},"Стратегії автентифікації","\u002Fweb-development\u002Fauthentication\u002F02-authentication-strategies","18.web-development\u002F12.authentication\u002F02-authentication-strategies",{"title":4631,"path":4632,"stem":4633},"Автентифікація на основі сесій","\u002Fweb-development\u002Fauthentication\u002F03-session-based-authentication","18.web-development\u002F12.authentication\u002F03-session-based-authentication",{"title":4635,"path":4636,"stem":4637},"Структура JSON Web Token (JWT)","\u002Fweb-development\u002Fauthentication\u002F04-jwt-structure","18.web-development\u002F12.authentication\u002F04-jwt-structure",{"title":4639,"path":4640,"stem":4641},"Інтеграція JWT у NestJS","\u002Fweb-development\u002Fauthentication\u002F05-nestjs-jwt-integration","18.web-development\u002F12.authentication\u002F05-nestjs-jwt-integration",{"title":4643,"path":4644,"stem":4645},"Passport.js стратегії у NestJS","\u002Fweb-development\u002Fauthentication\u002F06-passport-strategies","18.web-development\u002F12.authentication\u002F06-passport-strategies",{"title":4647,"path":4648,"stem":4649},"Безпечне зберігання паролів: хешування та криптографічний захист","\u002Fweb-development\u002Fauthentication\u002F07-password-hashing","18.web-development\u002F12.authentication\u002F07-password-hashing",{"title":4651,"path":4652,"stem":4653},"Refresh Token та безпечне оновлення доступу","\u002Fweb-development\u002Fauthentication\u002F08-refresh-tokens","18.web-development\u002F12.authentication\u002F08-refresh-tokens",{"title":4655,"path":4656,"stem":4657},"OAuth 2.0 та OpenID Connect: делегована автентифікація","\u002Fweb-development\u002Fauthentication\u002F09-oauth2-openid","18.web-development\u002F12.authentication\u002F09-oauth2-openid",{"title":4659,"icon":4660,"path":4661,"stem":4662,"children":4663,"page":59},"Авторизація та безпека серверних застосунків","i-lucide-shield","\u002Fweb-development\u002Fauthorization-security","18.web-development\u002F13.authorization-security",[4664,4668,4672,4676,4680,4684,4688,4692,4696,4700],{"title":4665,"path":4666,"stem":4667},"Моделі авторизації","\u002Fweb-development\u002Fauthorization-security\u002F01-authorization-models","18.web-development\u002F13.authorization-security\u002F01-authorization-models",{"title":4669,"path":4670,"stem":4671},"Реалізація RBAC у NestJS","\u002Fweb-development\u002Fauthorization-security\u002F02-rbac-implementation","18.web-development\u002F13.authorization-security\u002F02-rbac-implementation",{"title":4673,"path":4674,"stem":4675},"Permission-Based Access Control","\u002Fweb-development\u002Fauthorization-security\u002F03-permission-based-access","18.web-development\u002F13.authorization-security\u002F03-permission-based-access",{"title":4677,"path":4678,"stem":4679},"ABAC та бібліотека CASL","\u002Fweb-development\u002Fauthorization-security\u002F04-abac-casl","18.web-development\u002F13.authorization-security\u002F04-abac-casl",{"title":4681,"path":4682,"stem":4683},"Кастомні декоратори та метадані","\u002Fweb-development\u002Fauthorization-security\u002F05-custom-decorators-metadata","18.web-development\u002F13.authorization-security\u002F05-custom-decorators-metadata",{"title":4685,"path":4686,"stem":4687},"Конфігурація CORS","\u002Fweb-development\u002Fauthorization-security\u002F06-cors-configuration","18.web-development\u002F13.authorization-security\u002F06-cors-configuration",{"title":4689,"path":4690,"stem":4691},"Захист через HTTP Security Headers (Helmet)","\u002Fweb-development\u002Fauthorization-security\u002F07-helmet-security-headers","18.web-development\u002F13.authorization-security\u002F07-helmet-security-headers",{"title":4693,"path":4694,"stem":4695},"Rate Limiting та Throttling","\u002Fweb-development\u002Fauthorization-security\u002F08-rate-limiting-throttling","18.web-development\u002F13.authorization-security\u002F08-rate-limiting-throttling",{"title":4697,"path":4698,"stem":4699},"Захист від поширених атак","\u002Fweb-development\u002Fauthorization-security\u002F09-common-attacks-protection","18.web-development\u002F13.authorization-security\u002F09-common-attacks-protection",{"title":4701,"path":4702,"stem":4703},"HTTPS у продакшені","\u002Fweb-development\u002Fauthorization-security\u002F10-https-production","18.web-development\u002F13.authorization-security\u002F10-https-production",{"title":4705,"icon":871,"path":4706,"stem":4707,"children":4708,"page":59},"Комунікація у реальному часі, нотифікації та фонові задачі","\u002Fweb-development\u002Frealtime-notifications-jobs","18.web-development\u002F14.realtime-notifications-jobs",[4709,4713,4717,4721,4725,4729,4732,4735,4739,4743],{"title":4710,"path":4711,"stem":4712},"Методи комунікації у реальному часі","\u002Fweb-development\u002Frealtime-notifications-jobs\u002F01-realtime-communication-methods","18.web-development\u002F14.realtime-notifications-jobs\u002F01-realtime-communication-methods",{"title":4714,"path":4715,"stem":4716},"WebSocket Gateway у NestJS","\u002Fweb-development\u002Frealtime-notifications-jobs\u002F02-websocket-gateway","18.web-development\u002F14.realtime-notifications-jobs\u002F02-websocket-gateway",{"title":4718,"path":4719,"stem":4720},"Lifecycle та Rooms у WebSocket","\u002Fweb-development\u002Frealtime-notifications-jobs\u002F03-websocket-lifecycle-rooms","18.web-development\u002F14.realtime-notifications-jobs\u002F03-websocket-lifecycle-rooms",{"title":4722,"path":4723,"stem":4724},"Server-Sent Events (SSE)","\u002Fweb-development\u002Frealtime-notifications-jobs\u002F04-server-sent-events","18.web-development\u002F14.realtime-notifications-jobs\u002F04-server-sent-events",{"title":4726,"path":4727,"stem":4728},"Архітектура системи нотифікацій","\u002Fweb-development\u002Frealtime-notifications-jobs\u002F05-notification-system","18.web-development\u002F14.realtime-notifications-jobs\u002F05-notification-system",{"title":904,"path":4730,"stem":4731},"\u002Fweb-development\u002Frealtime-notifications-jobs\u002F06-email-notifications","18.web-development\u002F14.realtime-notifications-jobs\u002F06-email-notifications",{"title":900,"path":4733,"stem":4734},"\u002Fweb-development\u002Frealtime-notifications-jobs\u002F07-web-push-notifications","18.web-development\u002F14.realtime-notifications-jobs\u002F07-web-push-notifications",{"title":4736,"path":4737,"stem":4738},"Фонові задачі та черги","\u002Fweb-development\u002Frealtime-notifications-jobs\u002F08-background-jobs-queues","18.web-development\u002F14.realtime-notifications-jobs\u002F08-background-jobs-queues",{"title":4740,"path":4741,"stem":4742},"Планувальники та Cron jobs","\u002Fweb-development\u002Frealtime-notifications-jobs\u002F09-schedulers-cron","18.web-development\u002F14.realtime-notifications-jobs\u002F09-schedulers-cron",{"title":4744,"path":4745,"stem":4746},"Практичні сценарії застосування","\u002Fweb-development\u002Frealtime-notifications-jobs\u002F10-practical-scenarios","18.web-development\u002F14.realtime-notifications-jobs\u002F10-practical-scenarios",{"title":4748,"icon":4749,"path":4750,"stem":4751,"children":4752,"page":59},"Тестування, документування та розгортання застосунків","i-lucide-rocket","\u002Fweb-development\u002Ftesting-documentation-deployment","18.web-development\u002F15.testing-documentation-deployment",[4753,4757,4761,4765,4769,4773,4777,4781,4785,4789],{"title":4754,"path":4755,"stem":4756},"Піраміда тестування та стратегія","\u002Fweb-development\u002Ftesting-documentation-deployment\u002F01-testing-pyramid-strategy","18.web-development\u002F15.testing-documentation-deployment\u002F01-testing-pyramid-strategy",{"title":4758,"path":4759,"stem":4760},"Основи Jest у NestJS","\u002Fweb-development\u002Ftesting-documentation-deployment\u002F02-jest-nestjs-basics","18.web-development\u002F15.testing-documentation-deployment\u002F02-jest-nestjs-basics",{"title":4762,"path":4763,"stem":4764},"Unit-тестування сервісів","\u002Fweb-development\u002Ftesting-documentation-deployment\u002F03-unit-testing-services","18.web-development\u002F15.testing-documentation-deployment\u002F03-unit-testing-services",{"title":4766,"path":4767,"stem":4768},"E2E тестування та покриття коду","\u002Fweb-development\u002Ftesting-documentation-deployment\u002F04-e2e-testing-coverage","18.web-development\u002F15.testing-documentation-deployment\u002F04-e2e-testing-coverage",{"title":4770,"path":4771,"stem":4772},"Swagger, OpenAPI, Scalar та Arazzo","\u002Fweb-development\u002Ftesting-documentation-deployment\u002F05-swagger-openapi","18.web-development\u002F15.testing-documentation-deployment\u002F05-swagger-openapi",{"title":4774,"path":4775,"stem":4776},"Керування конфігурацією","\u002Fweb-development\u002Ftesting-documentation-deployment\u002F06-configuration-management","18.web-development\u002F15.testing-documentation-deployment\u002F06-configuration-management",{"title":4778,"path":4779,"stem":4780},"Docker та контейнеризація","\u002Fweb-development\u002Ftesting-documentation-deployment\u002F07-docker-containerization","18.web-development\u002F15.testing-documentation-deployment\u002F07-docker-containerization",{"title":4782,"path":4783,"stem":4784},"CI\u002FCD Pipelines","\u002Fweb-development\u002Ftesting-documentation-deployment\u002F08-cicd-pipelines","18.web-development\u002F15.testing-documentation-deployment\u002F08-cicd-pipelines",{"title":4786,"path":4787,"stem":4788},"Логування та моніторинг","\u002Fweb-development\u002Ftesting-documentation-deployment\u002F09-logging-monitoring","18.web-development\u002F15.testing-documentation-deployment\u002F09-logging-monitoring",{"title":4790,"path":4791,"stem":4792},"Серіалізація та компресія","\u002Fweb-development\u002Ftesting-documentation-deployment\u002F10-serialization-compression","18.web-development\u002F15.testing-documentation-deployment\u002F10-serialization-compression",{"title":4794,"icon":4795,"path":4796,"stem":4797,"children":4798,"page":59},"AI Core: мислення AI","i-lucide-brain","\u002Fai-core","19.ai-core",[4799,4840,4889,4927],{"title":4800,"icon":4749,"path":4801,"stem":4802,"children":4803,"page":59},"Вхід у професію AI Native Developer","\u002Fai-core\u002Fai-native-developer","19.ai-core\u002F01.ai-native-developer",[4804,4808,4812,4816,4820,4824,4828,4832,4836],{"title":4805,"path":4806,"stem":4807},"Вступ до професії розробника цифрових продуктів","\u002Fai-core\u002Fai-native-developer\u002Fdigital-products","19.ai-core\u002F01.ai-native-developer\u002F01.digital-products",{"title":4809,"path":4810,"stem":4811},"Професія розробника програмного забезпечення","\u002Fai-core\u002Fai-native-developer\u002Fsoftware-developer","19.ai-core\u002F01.ai-native-developer\u002F02.software-developer",{"title":4813,"path":4814,"stem":4815},"Професія AI Native Developer","\u002Fai-core\u002Fai-native-developer\u002Fai-native-developer","19.ai-core\u002F01.ai-native-developer\u002F03.ai-native-developer",{"title":4817,"path":4818,"stem":4819},"Вплив AI на розробку програмного забезпечення","\u002Fai-core\u002Fai-native-developer\u002Fai-impact-on-development","19.ai-core\u002F01.ai-native-developer\u002F04.ai-impact-on-development",{"title":4821,"path":4822,"stem":4823},"Життєвий цикл цифрового продукту","\u002Fai-core\u002Fai-native-developer\u002Fproduct-lifecycle","19.ai-core\u002F01.ai-native-developer\u002F05.product-lifecycle",{"title":4825,"path":4826,"stem":4827},"Застосування AI на етапах створення цифрового продукту","\u002Fai-core\u002Fai-native-developer\u002Fai-in-product-creation","19.ai-core\u002F01.ai-native-developer\u002F06.ai-in-product-creation",{"title":4829,"path":4830,"stem":4831},"Розподіл завдань між людиною та AI","\u002Fai-core\u002Fai-native-developer\u002Fhuman-vs-ai-tasks","19.ai-core\u002F01.ai-native-developer\u002F07.human-vs-ai-tasks",{"title":4833,"path":4834,"stem":4835},"Компетенції AI Native Developer","\u002Fai-core\u002Fai-native-developer\u002Fcompetencies","19.ai-core\u002F01.ai-native-developer\u002F08.competencies",{"title":4837,"path":4838,"stem":4839},"Карта професійного розвитку AI Native Developer","\u002Fai-core\u002Fai-native-developer\u002Fcareer-roadmap","19.ai-core\u002F01.ai-native-developer\u002F09.career-roadmap",{"title":4841,"icon":255,"path":4842,"stem":4843,"children":4844,"page":59},"Штучний інтелект і машинне навчання","\u002Fai-core\u002Fai-and-machine-learning","19.ai-core\u002F02.ai-and-machine-learning",[4845,4849,4853,4857,4861,4865,4869,4873,4877,4881,4885],{"title":4846,"path":4847,"stem":4848},"Штучний інтелект","\u002Fai-core\u002Fai-and-machine-learning\u002Fwhat-is-ai","19.ai-core\u002F02.ai-and-machine-learning\u002F01.what-is-ai",{"title":4850,"path":4851,"stem":4852},"Відмінність AI від інших програмних систем","\u002Fai-core\u002Fai-and-machine-learning\u002Fai-vs-automation","19.ai-core\u002F02.ai-and-machine-learning\u002F02.ai-vs-automation",{"title":4854,"path":4855,"stem":4856},"Завдання штучного інтелекту","\u002Fai-core\u002Fai-and-machine-learning\u002Fai-tasks","19.ai-core\u002F02.ai-and-machine-learning\u002F03.ai-tasks",{"title":4858,"path":4859,"stem":4860},"Machine Learning","\u002Fai-core\u002Fai-and-machine-learning\u002Fmachine-learning","19.ai-core\u002F02.ai-and-machine-learning\u002F04.machine-learning",{"title":4862,"path":4863,"stem":4864},"Machine Learning Workflow","\u002Fai-core\u002Fai-and-machine-learning\u002Fml-workflow","19.ai-core\u002F02.ai-and-machine-learning\u002F05.ml-workflow",{"title":4866,"path":4867,"stem":4868},"Типи машинного навчання","\u002Fai-core\u002Fai-and-machine-learning\u002Fml-types","19.ai-core\u002F02.ai-and-machine-learning\u002F06.ml-types",{"title":4870,"path":4871,"stem":4872},"Generative AI","\u002Fai-core\u002Fai-and-machine-learning\u002Fgenerative-ai","19.ai-core\u002F02.ai-and-machine-learning\u002F07.generative-ai",{"title":4874,"path":4875,"stem":4876},"Типи контенту, створюваного AI","\u002Fai-core\u002Fai-and-machine-learning\u002Fai-content-types","19.ai-core\u002F02.ai-and-machine-learning\u002F08.ai-content-types",{"title":4878,"path":4879,"stem":4880},"Великі мовні моделі","\u002Fai-core\u002Fai-and-machine-learning\u002Flarge-language-models","19.ai-core\u002F02.ai-and-machine-learning\u002F09.large-language-models",{"title":4882,"path":4883,"stem":4884},"Можливості та обмеження Generative AI","\u002Fai-core\u002Fai-and-machine-learning\u002Fcapabilities-and-limitations","19.ai-core\u002F02.ai-and-machine-learning\u002F10.capabilities-and-limitations",{"title":4886,"path":4887,"stem":4888},"Сучасні AI-асистенти","\u002Fai-core\u002Fai-and-machine-learning\u002Fmodern-ai-assistants","19.ai-core\u002F02.ai-and-machine-learning\u002F11.modern-ai-assistants",{"title":4890,"icon":4891,"path":4892,"stem":4893,"children":4894,"page":59},"Постановка завдань для AI: принципи створення промптів","i-lucide-message-square-text","\u002Fai-core\u002Fprompt-engineering","19.ai-core\u002F03.prompt-engineering",[4895,4899,4903,4907,4911,4915,4919,4923],{"title":4896,"path":4897,"stem":4898},"Промпт як інструмент","\u002Fai-core\u002Fprompt-engineering\u002Fprompt-as-tool","19.ai-core\u002F03.prompt-engineering\u002F01.prompt-as-tool",{"title":4900,"path":4901,"stem":4902},"Принципи створення промптів","\u002Fai-core\u002Fprompt-engineering\u002Fprompt-principles","19.ai-core\u002F03.prompt-engineering\u002F02.prompt-principles",{"title":4904,"path":4905,"stem":4906},"Структура промпта","\u002Fai-core\u002Fprompt-engineering\u002Fprompt-structure","19.ai-core\u002F03.prompt-engineering\u002F03.prompt-structure",{"title":4908,"path":4909,"stem":4910},"Види промптів за типом задачі","\u002Fai-core\u002Fprompt-engineering\u002Fprompt-types","19.ai-core\u002F03.prompt-engineering\u002F04.prompt-types",{"title":4912,"path":4913,"stem":4914},"Прийоми посилення промпта","\u002Fai-core\u002Fprompt-engineering\u002Fprompt-enhancement","19.ai-core\u002F03.prompt-engineering\u002F05.prompt-enhancement",{"title":4916,"path":4917,"stem":4918},"Розбір і покращення промпта","\u002Fai-core\u002Fprompt-engineering\u002Fprompt-analysis","19.ai-core\u002F03.prompt-engineering\u002F06.prompt-analysis",{"title":4920,"path":4921,"stem":4922},"Типові помилки під час створення промптів","\u002Fai-core\u002Fprompt-engineering\u002Fcommon-mistakes","19.ai-core\u002F03.prompt-engineering\u002F07.common-mistakes",{"title":4924,"path":4925,"stem":4926},"Практикум: особиста бібліотека промптів","\u002Fai-core\u002Fprompt-engineering\u002Fprompt-library","19.ai-core\u002F03.prompt-engineering\u002F08.prompt-library",{"title":4928,"icon":793,"path":4929,"stem":4930,"children":4931,"page":59},"Перевірка результатів, безпека та AI Native Workflow","\u002Fai-core\u002Fverification-security-workflow","19.ai-core\u002F04.verification-security-workflow",[4932,4936,4940,4944,4948,4952,4956,4960,4964],{"title":4933,"path":4934,"stem":4935},"Межі можливостей AI","\u002Fai-core\u002Fverification-security-workflow\u002Fai-limitations","19.ai-core\u002F04.verification-security-workflow\u002F01.ai-limitations",{"title":4937,"path":4938,"stem":4939},"Галюцинації AI","\u002Fai-core\u002Fverification-security-workflow\u002Fai-hallucinations","19.ai-core\u002F04.verification-security-workflow\u002F02.ai-hallucinations",{"title":4941,"path":4942,"stem":4943},"Критичне мислення під час роботи з AI","\u002Fai-core\u002Fverification-security-workflow\u002Fcritical-thinking","19.ai-core\u002F04.verification-security-workflow\u002F03.critical-thinking",{"title":4945,"path":4946,"stem":4947},"Перевірка результатів роботи AI","\u002Fai-core\u002Fverification-security-workflow\u002Fresult-verification","19.ai-core\u002F04.verification-security-workflow\u002F04.result-verification",{"title":4949,"path":4950,"stem":4951},"Захист даних під час роботи з AI","\u002Fai-core\u002Fverification-security-workflow\u002Fdata-protection","19.ai-core\u002F04.verification-security-workflow\u002F05.data-protection",{"title":4953,"path":4954,"stem":4955},"Авторське право та навчальна доброчесність","\u002Fai-core\u002Fverification-security-workflow\u002Fcopyright-integrity","19.ai-core\u002F04.verification-security-workflow\u002F06.copyright-integrity",{"title":4957,"path":4958,"stem":4959},"Відповідальне використання AI","\u002Fai-core\u002Fverification-security-workflow\u002Fresponsible-use","19.ai-core\u002F04.verification-security-workflow\u002F07.responsible-use",{"title":4961,"path":4962,"stem":4963},"AI Native Workflow","\u002Fai-core\u002Fverification-security-workflow\u002Fai-native-workflow","19.ai-core\u002F04.verification-security-workflow\u002F08.ai-native-workflow",{"title":4965,"path":4966,"stem":4967},"Застосування AI Native Workflow під час створення цифрового продукту","\u002Fai-core\u002Fverification-security-workflow\u002Fworkflow-in-practice","19.ai-core\u002F04.verification-security-workflow\u002F09.workflow-in-practice",{"title":4969,"icon":4970,"path":4971,"stem":4972,"children":4973,"page":59},"AI Developer: Vibe Coding Sprint","i-lucide-code-xml","\u002Fai-developer","20.ai-developer",[4974,5000,5022,5043],{"title":4975,"icon":4976,"path":4977,"stem":4978,"children":4979,"page":59},"Проєктування і чорнова версія","i-lucide-pencil-ruler","\u002Fai-developer\u002Fdraft-creation","20.ai-developer\u002F01.draft-creation",[4980,4984,4988,4992,4996],{"title":4981,"path":4982,"stem":4983},"Парадигма Vibe Coding Workflow","\u002Fai-developer\u002Fdraft-creation\u002Fvibe-coding-workflow","20.ai-developer\u002F01.draft-creation\u002F01.vibe-coding-workflow",{"title":4985,"path":4986,"stem":4987},"AI-середовище швидкої розробки","\u002Fai-developer\u002Fdraft-creation\u002Fai-ide-environment","20.ai-developer\u002F01.draft-creation\u002F02.ai-ide-environment",{"title":4989,"path":4990,"stem":4991},"Користувацьке завдання та межі першої версії","\u002Fai-developer\u002Fdraft-creation\u002Fproduct-scope-and-mvp","20.ai-developer\u002F01.draft-creation\u002F03.product-scope-and-mvp",{"title":4993,"path":4994,"stem":4995},"Архітектура інтерфейсу та стани застосунку","\u002Fai-developer\u002Fdraft-creation\u002Fapplication-architecture-and-states","20.ai-developer\u002F01.draft-creation\u002F04.application-architecture-and-states",{"title":4997,"path":4998,"stem":4999},"Генерація та фіксація чорнової версії","\u002Fai-developer\u002Fdraft-creation\u002Fgenerating-draft-version","20.ai-developer\u002F01.draft-creation\u002F05.generating-draft-version",{"title":5001,"icon":5002,"path":5003,"stem":5004,"children":5005,"page":59},"Перша робоча версія","i-lucide-play-circle","\u002Fai-developer\u002Ffirst-working-version","20.ai-developer\u002F02.first-working-version",[5006,5010,5014,5018],{"title":5007,"path":5008,"stem":5009},"Уточнення контексту проєкту для AI","\u002Fai-developer\u002Ffirst-working-version\u002Frefining-project-context","20.ai-developer\u002F02.first-working-version\u002F01.refining-project-context",{"title":5011,"path":5012,"stem":5013},"Стратегія завдань для AI-розробки","\u002Fai-developer\u002Ffirst-working-version\u002Fai-prompting-strategy","20.ai-developer\u002F02.first-working-version\u002F02.ai-prompting-strategy",{"title":5015,"path":5016,"stem":5017},"Доопрацювання до першої робочої версії","\u002Fai-developer\u002Ffirst-working-version\u002Frefining-to-working-version","20.ai-developer\u002F02.first-working-version\u002F03.refining-to-working-version",{"title":5019,"path":5020,"stem":5021},"Перевірка першої робочої версії","\u002Fai-developer\u002Ffirst-working-version\u002Ftesting-first-working-version","20.ai-developer\u002F02.first-working-version\u002F04.testing-first-working-version",{"title":5023,"icon":3072,"path":5024,"stem":5025,"children":5026,"page":59},"Ітерації, дебагінг та відновлення","\u002Fai-developer\u002Fiteration-debugging-recovery","20.ai-developer\u002F03.iteration-debugging-recovery",[5027,5031,5035,5039],{"title":5028,"path":5029,"stem":5030},"Управління точковими змінами продукту","\u002Fai-developer\u002Fiteration-debugging-recovery\u002Fchange-management","20.ai-developer\u002F03.iteration-debugging-recovery\u002F01.change-management",{"title":5032,"path":5033,"stem":5034},"Надійність інтерфейсу та обробка помилок","\u002Fai-developer\u002Fiteration-debugging-recovery\u002Fscenario-reliability-and-errors","20.ai-developer\u002F03.iteration-debugging-recovery\u002F02.scenario-reliability-and-errors",{"title":5036,"path":5037,"stem":5038},"Керування контекстом і збереження версій","\u002Fai-developer\u002Fiteration-debugging-recovery\u002Fproject-context-and-versions","20.ai-developer\u002F03.iteration-debugging-recovery\u002F03.project-context-and-versions",{"title":5040,"path":5041,"stem":5042},"Збої AI-розробки, ліміти та аварійне відновлення","\u002Fai-developer\u002Fiteration-debugging-recovery\u002Fai-breakdowns-and-recovery","20.ai-developer\u002F03.iteration-debugging-recovery\u002F04.ai-breakdowns-and-recovery",{"title":5044,"icon":5045,"path":5046,"stem":5047,"children":5048,"page":59},"Перевірка та завершення продукту","i-lucide-check-check","\u002Fai-developer\u002Fverification-and-completion","20.ai-developer\u002F04.verification-and-completion",[5049,5053,5057],{"title":5050,"path":5051,"stem":5052},"Комплексний аудит та підсумкове тестування","\u002Fai-developer\u002Fverification-and-completion\u002Ffinal-product-testing","20.ai-developer\u002F04.verification-and-completion\u002F01.final-product-testing",{"title":5054,"path":5055,"stem":5056},"Підготовка підсумкової версії коду","\u002Fai-developer\u002Fverification-and-completion\u002Fpreparing-release-version","20.ai-developer\u002F04.verification-and-completion\u002F02.preparing-release-version",{"title":5058,"path":5059,"stem":5060},"Демонстрація, публікація та критерії оцінювання","\u002Fai-developer\u002Fverification-and-completion\u002Fproduct-showcase-and-publishing","20.ai-developer\u002F04.verification-and-completion\u002F03.product-showcase-and-publishing",{"title":5062,"path":5063,"stem":5064,"children":5065,"page":59},"Tailwind","\u002Ftailwind","21.tailwind",[5066,5070,5074,5078,5082,5086,5090,5094,5098,5102,5106,5110],{"title":5067,"path":5068,"stem":5069},"Що таке Tailwind CSS і навіщо він потрібен","\u002Ftailwind\u002Ftailwind-intro-philosophy","21.tailwind\u002F01.tailwind-intro-philosophy",{"title":5071,"path":5072,"stem":5073},"Встановлення та налаштування Tailwind CSS v4","\u002Ftailwind\u002Ftailwind-installation-setup","21.tailwind\u002F02.tailwind-installation-setup",{"title":5075,"path":5076,"stem":5077},"Utility-класи: основи та система Tailwind","\u002Ftailwind\u002Ftailwind-utility-classes-core","21.tailwind\u002F03.tailwind-utility-classes-core",{"title":5079,"path":5080,"stem":5081},"Layout: Flexbox та Grid через Tailwind","\u002Ftailwind\u002Ftailwind-flexbox-grid","21.tailwind\u002F04.tailwind-flexbox-grid",{"title":5083,"path":5084,"stem":5085},"Кастомізація теми через @theme у Tailwind v4","\u002Ftailwind\u002Ftailwind-theme-customization","21.tailwind\u002F05.tailwind-theme-customization",{"title":5087,"path":5088,"stem":5089},"Варіанти: hover, focus, responsive, dark mode та нові v4","\u002Ftailwind\u002Ftailwind-variants-states","21.tailwind\u002F06.tailwind-variants-states",{"title":5091,"path":5092,"stem":5093},"Типографіка та система кольорів у Tailwind v4","\u002Ftailwind\u002Ftailwind-typography-colors","21.tailwind\u002F07.tailwind-typography-colors",{"title":5095,"path":5096,"stem":5097},"Компоненти та повторюваність: @apply, @utility та патерни","\u002Ftailwind\u002Ftailwind-components-patterns","21.tailwind\u002F08.tailwind-components-patterns",{"title":5099,"path":5100,"stem":5101},"Темна тема та система дизайн-токенів у Tailwind v4","\u002Ftailwind\u002Ftailwind-dark-mode-theming","21.tailwind\u002F09.tailwind-dark-mode-theming",{"title":5103,"path":5104,"stem":5105},"Довільні значення та контейнерні запити у Tailwind v4","\u002Ftailwind\u002Ftailwind-arbitrary-container-queries","21.tailwind\u002F10.tailwind-arbitrary-container-queries",{"title":5107,"path":5108,"stem":5109},"Анімації, трансформації та 3D у Tailwind v4","\u002Ftailwind\u002Ftailwind-animations-transforms","21.tailwind\u002F11.tailwind-animations-transforms",{"title":5111,"path":5112,"stem":5113},"Tailwind CLI, PostCSS та інтеграція з фреймворками","\u002Ftailwind\u002Ftailwind-cli-tooling","21.tailwind\u002F12.tailwind-cli-tooling",{"title":5115,"path":5116,"stem":5117,"children":5118,"page":59},"React Typescript","\u002Freact-typescript","22.react-typescript",[5119,5144,5148,5152,5156,5160,5164,5168,5172],{"title":5120,"path":5121,"stem":5122,"children":5123,"page":59},"From Html To Project","\u002Freact-typescript\u002Ffrom-html-to-project","22.react-typescript\u002F01.from-html-to-project",[5124,5128,5132,5136,5140],{"title":5125,"path":5126,"stem":5127},"Від одного HTML-файлу до повноцінного проєкту","\u002Freact-typescript\u002Ffrom-html-to-project\u002Fevolution","22.react-typescript\u002F01.from-html-to-project\u002F01.evolution",{"title":5129,"path":5130,"stem":5131},"Що таке React","\u002Freact-typescript\u002Ffrom-html-to-project\u002Fwhat-is-react","22.react-typescript\u002F01.from-html-to-project\u002F02.what-is-react",{"title":5133,"path":5134,"stem":5135},"JSX та TSX — синтаксичний цукор, а не магія","\u002Freact-typescript\u002Ffrom-html-to-project\u002Fjsx-tsx-syntax","22.react-typescript\u002F01.from-html-to-project\u002F03.jsx-tsx-syntax",{"title":5137,"path":5138,"stem":5139},"Компоненти — будівельні блоки інтерфейсу","\u002Freact-typescript\u002Ffrom-html-to-project\u002Fcomponents","22.react-typescript\u002F01.from-html-to-project\u002F04.components",{"title":5141,"path":5142,"stem":5143},"JSX — розмітка всередині TypeScript","\u002Freact-typescript\u002Ffrom-html-to-project\u002Fjsx-expressions","22.react-typescript\u002F01.from-html-to-project\u002F05.jsx-expressions",{"title":5145,"path":5146,"stem":5147},"Хук useReducer: структуроване управління складним станом","\u002Freact-typescript\u002Fuse-reducer","22.react-typescript\u002F23.use-reducer",{"title":5149,"path":5150,"stem":5151},"Context API: передавання даних без «пропс-дрілінгу»","\u002Freact-typescript\u002Fcontext-api","22.react-typescript\u002F24.context-api",{"title":5153,"path":5154,"stem":5155},"Синхронізація з ефектами: хук useEffect та функції очищення","\u002Freact-typescript\u002Fuse-effect","22.react-typescript\u002F27.use-effect",{"title":5157,"path":5158,"stem":5159},"Можливо, вам не потрібен ефект: антипатерни та альтернативи","\u002Freact-typescript\u002Fyou-might-not-need-effect","22.react-typescript\u002F28.you-might-not-need-effect",{"title":5161,"path":5162,"stem":5163},"Життєвий цикл реактивних ефектів: мислення процесами синхронізації","\u002Freact-typescript\u002Flifecycle-of-reactive-effects","22.react-typescript\u002F29.lifecycle-of-reactive-effects",{"title":5165,"path":5166,"stem":5167},"Розділення подій та ефектів: реактивна проти нереактивної логіки","\u002Freact-typescript\u002Fseparating-events-from-effects","22.react-typescript\u002F30.separating-events-from-effects",{"title":5169,"path":5170,"stem":5171},"Видалення зайвих залежностей ефектів та оптимізація синхронізації","\u002Freact-typescript\u002Fremoving-effect-dependencies","22.react-typescript\u002F31.removing-effect-dependencies",{"title":5173,"path":5174,"stem":5175},"Кастомні хуки: повторне використання та композиція реактивної логіки","\u002Freact-typescript\u002Fcustom-hooks","22.react-typescript\u002F32.custom-hooks",{"title":5177,"path":5178,"stem":5179},"Тестування компонентів діаграм та пісочниць","\u002Ftest-components","98.test-components",{"id":5181,"title":3922,"body":5182,"description":25282,"extension":25283,"links":25284,"meta":25285,"navigation":5473,"path":3923,"seo":25286,"stem":3924,"__hash__":25287},"docs\u002F16.ai-python\u002F14.activation-functions-heart-disease\u002F01.heart-disease-prediction.md",{"type":5183,"value":5184,"toc":25220},"minimark",[5185,5190,5199,5206,5213,5216,5235,5296,5299,5303,5310,5315,5322,5326,5334,5337,5344,5372,5374,5378,5383,5386,5391,5394,5397,5400,5403,5408,5411,5416,6540,6545,6556,6559,6562,6569,6584,6586,6590,6594,6597,6602,6605,6609,6612,6617,6620,6623,6630,6632,6637,6659,6673,6675,6679,6683,6686,6690,6693,6700,6705,7586,7591,7626,7631,7634,7651,7654,7665,7707,7709,7713,7717,7720,7723,7726,7730,7733,7747,8454,8482,8484,8488,8633,8663,8665,8669,8672,8676,8857,8907,8909,8913,8920,8924,8937,8943,8957,8963,8976,8978,8982,9197,9235,9237,9241,9244,10630,10650,10652,10656,11912,11959,11961,11965,11972,11976,11983,11988,12410,12415,12551,12553,12557,12561,12568,12571,12574,12597,12607,12635,12640,12647,12650,12652,12677,12682,12702,12735,12737,12741,12744,12748,13983,14027,14029,14033,14373,14394,14396,14400,15100,15163,15165,15169,15386,15388,15392,16750,16792,16794,16798,17602,17651,17653,17657,17668,17672,18734,18786,18788,18792,19746,19830,19832,19836,19839,20659,20662,20664,20847,20849,20853,20864,20868,20879,20884,20901,20903,20907,21131,21167,21169,21173,23735,23836,23838,23842,24402,24404,24406,24486,24488,24492,24496,24514,24516,24520,24525,24605,24610,24687,24720,24722,24726,25021,25023,25027,25163,25165,25172,25186,25189,25206,25217],[5186,5187,5189],"h2",{"id":5188},"від-теорії-до-практики-нейромережа-як-інструмент-діагностики","Від теорії до практики — нейромережа як інструмент діагностики",[5191,5192,5193,5194,5198],"p",{},"У попередніх статтях ми розібрали базову архітектуру нейронних мереж, функції активації та процес навчання. Настав час застосувати ці знання для розв'язання реальної медичної задачі: ",[5195,5196,5197],"strong",{},"передбачення ризику серцево-судинних захворювань"," на основі клінічних показників пацієнта.",[5191,5200,5201,5202,5205],{},"Уявіть, що ви — дата-саєнтист у медичній клініці. Щодня надходять сотні аналізів пацієнтів: вік, рівень холестерину, артеріальний тиск, електрокардіограма. Кардіолог не встигає своєчасно проаналізувати всі дані. Ваше завдання — створити ",[5195,5203,5204],{},"систему раннього попередження",", яка автоматично виявляє пацієнтів із високим ризиком та рекомендує їх на додаткове обстеження.",[5191,5207,5208,5209,5212],{},"Це не просто академічна вправа. За даними Всесвітньої організації охорони здоров'я, серцево-судинні захворювання є причиною ",[5195,5210,5211],{},"31% усіх смертей"," у світі. Рання діагностика може врятувати життя. І саме нейронні мережі дозволяють знаходити приховані закономірності в медичних даних, які неможливо виявити «на око».",[5191,5214,5215],{},"У цій статті ми:",[5217,5218,5219,5223,5226,5229,5232],"ol",{},[5220,5221,5222],"li",{},"Детально розберемо математику функцій активації та їхніх похідних (необхідно для backpropagation)",[5220,5224,5225],{},"Завантажимо та проаналізуємо реальний медичний датасет UCI Heart Disease",[5220,5227,5228],{},"Побудуємо повноцінну нейронну мережу на PyTorch",[5220,5230,5231],{},"Навчимо модель, візуалізуємо процес навчання",[5220,5233,5234],{},"Оцінимо якість та інтерпретуємо результати",[5236,5237,5238,5261],"card-group",{},[5239,5240,5243],"card",{"icon":5241,"title":5242},"i-lucide-target","🎯 Мета статті",[5244,5245,5246,5249,5252,5255,5258],"ul",{},[5220,5247,5248],{},"Опанувати математику функцій активації та їхніх похідних для алгоритму зворотного поширення",[5220,5250,5251],{},"Навчитися працювати з реальними медичними даними та їх попередньою обробкою",[5220,5253,5254],{},"Побудувати архітектуру нейронної мережі для бінарної класифікації на PyTorch",[5220,5256,5257],{},"Імплементувати цикл навчання з моніторингом метрик та ранньою зупинкою",[5220,5259,5260],{},"Інтерпретувати результати моделі та оцінювати її клінічну корисність",[5239,5262,5264],{"icon":4618,"title":5263},"🔑 Ключові терміни",[5244,5265,5266,5272,5278,5284,5290],{},[5220,5267,5268,5271],{},[5195,5269,5270],{},"Похідна функції активації (Activation Derivative):"," градієнт функції, необхідний для backpropagation",[5220,5273,5274,5277],{},[5195,5275,5276],{},"Датасет UCI Heart Disease:"," класичний бенчмарк із 14 клінічних ознак",[5220,5279,5280,5283],{},[5195,5281,5282],{},"Binary Cross-Entropy Loss:"," функція втрат для бінарної класифікації",[5220,5285,5286,5289],{},[5195,5287,5288],{},"Early Stopping:"," техніка запобігання перенавчанню через зупинку при погіршенні валідаційної метрики",[5220,5291,5292,5295],{},[5195,5293,5294],{},"ROC-AUC:"," метрика якості класифікатора, інваріантна до порогу прийняття рішення",[5297,5298],"hr",{},[5186,5300,5302],{"id":5301},"математика-функцій-активації-чому-похідна-критична","Математика функцій активації — чому похідна критична",[5191,5304,5305,5306,5309],{},"Ми вже знаємо, що функції активації вносять нелінійність у нейронну мережу. Але для навчання мережі через градієнтний спуск нам потрібні ",[5195,5307,5308],{},"похідні"," цих функцій. Саме похідні дозволяють обчислити, в якому напрямку та наскільки змінювати ваги, щоб зменшити помилку.",[5311,5312,5314],"h3",{"id":5313},"нагадування-ланцюгове-правило-диференціювання","Нагадування: ланцюгове правило диференціювання",[5191,5316,5317,5318,5321],{},"Алгоритм зворотного поширення (backpropagation) базується на ",[5195,5319,5320],{},"ланцюговому правилі"," з математичного аналізу. Якщо маємо композицію функцій:",[5323,5324],"math-formula",{"tex":5325},"y = f(g(x))",[5191,5327,5328,5329,5333],{},"То похідна за ",[5323,5330],{"tex":5331,":inline":5332},"x","true",":",[5323,5335],{"tex":5336},"\\frac{\\partial y}{\\partial x} = \\frac{\\partial f}{\\partial g} \\cdot \\frac{\\partial g}{\\partial x}",[5191,5338,5339,5340,5343],{},"У нейронній мережі градієнт втрат по вазі ",[5323,5341],{"tex":5342,":inline":5332},"w"," обчислюється через ланцюг похідних від вихідного шару до вхідного. На кожному кроці ми множимо на похідну функції активації поточного нейрона.",[5345,5346,5347,5352,5363,5369],"note",{},[5191,5348,5349],{},[5195,5350,5351],{},"Чому похідна функції активації важлива:",[5191,5353,5354,5355,5358,5359,5362],{},"Якщо похідна близька до нуля (як у сигмоїди для великих ",[5323,5356],{"tex":5357,":inline":5332},"|z|","), то градієнт «зникає» — ваги попередніх шарів практично не оновлюються. Це проблема ",[5195,5360,5361],{},"vanishing gradients",".",[5191,5364,5365,5366,5362],{},"Якщо похідна занадто велика, градієнт «вибухає» — ваги стрибають хаотично. Це проблема ",[5195,5367,5368],{},"exploding gradients",[5191,5370,5371],{},"Ідеальна функція активації має стабільну, ненульову похідну в широкому діапазоні входів.",[5297,5373],{},[5311,5375,5377],{"id":5376},"сигмоїда-sigmoid-похідна-та-проблеми","Сигмоїда (Sigmoid) — похідна та проблеми",[5191,5379,5380],{},[5195,5381,5382],{},"Формула:",[5323,5384],{"tex":5385},"\\sigma(z) = \\frac{1}{1 + e^{-z}}",[5191,5387,5388],{},[5195,5389,5390],{},"Похідна:",[5191,5392,5393],{},"Скористаємося правилом диференціювання частки та ланцюговим правилом:",[5323,5395],{"tex":5396},"\\frac{d\\sigma}{dz} = \\frac{d}{dz} \\left( \\frac{1}{1 + e^{-z}} \\right) = \\frac{e^{-z}}{(1 + e^{-z})^2}",[5191,5398,5399],{},"Можна показати, що це рівносильно елегантній формі:",[5323,5401],{"tex":5402},"\\sigma'(z) = \\sigma(z) \\cdot (1 - \\sigma(z))",[5191,5404,5405],{},[5195,5406,5407],{},"Докази:",[5323,5409],{"tex":5410},"\\sigma'(z) = \\frac{e^{-z}}{(1 + e^{-z})^2} = \\frac{1}{1 + e^{-z}} \\cdot \\frac{e^{-z}}{1 + e^{-z}} = \\sigma(z) \\cdot \\left(1 - \\frac{1}{1 + e^{-z}}\\right) = \\sigma(z) \\cdot (1 - \\sigma(z))",[5191,5412,5413],{},[5195,5414,5415],{},"Властивості похідної:",[5417,5418,5421],"jupyter-notebook",{"kernel":5419,"title":5420},"Python 3.11 (ipykernel)","sigmoid_derivative.ipynb",[5422,5423,5426,6530],"jupyter-cell",{"execution-count":5424,"execution-time":5425},"1","0.34s",[5427,5428,5433],"pre",{"className":5429,"code":5430,"language":5431,"meta":5432,"style":5432},"language-python shiki shiki-themes light-plus dark-plus dark-plus","import numpy as np\nimport matplotlib.pyplot as plt\n\ndef sigmoid(z):\n    return 1 \u002F (1 + np.exp(-z))\n\ndef sigmoid_derivative(z):\n    s = sigmoid(z)\n    return s * (1 - s)\n\n# Діапазон значень\nz = np.linspace(-10, 10, 500)\n\n# Візуалізація\nfig, (ax1, ax2) = plt.subplots(1, 2, figsize=(16, 6))\n\n# Сигмоїда\nax1.plot(z, sigmoid(z), color='#3b82f6', linewidth=3, label='σ(z)')\nax1.axhline(0, color='gray', linestyle='--', alpha=0.3)\nax1.axhline(1, color='gray', linestyle='--', alpha=0.3)\nax1.axvline(0, color='gray', linestyle='--', alpha=0.3)\nax1.grid(alpha=0.3)\nax1.set_xlabel('z', fontsize=14)\nax1.set_ylabel('σ(z)', fontsize=14)\nax1.set_title('Функція Sigmoid', fontsize=16, fontweight='bold')\nax1.legend(fontsize=12)\n\n# Похідна сигмоїди\nax2.plot(z, sigmoid_derivative(z), color='#ef4444', linewidth=3, label=\"σ'(z) = σ(z)·(1 - σ(z))\")\nax2.axhline(0, color='gray', linestyle='--', alpha=0.3)\nax2.axvline(0, color='gray', linestyle='--', alpha=0.3)\nax2.fill_between(z, 0, sigmoid_derivative(z), alpha=0.2, color='#ef4444')\n\n# Позначимо максимум похідної\nmax_val = sigmoid_derivative(0)\nax2.plot(0, max_val, 'o', color='#dc2626', markersize=12, label=f'Максимум: σ\\'(0) = {max_val:.3f}')\nax2.annotate(f'Макс = {max_val:.3f}\\nпри z=0', xy=(0, max_val), xytext=(2, max_val),\n             arrowprops=dict(arrowstyle='->', color='#dc2626', lw=2),\n             fontsize=12, color='#dc2626', fontweight='bold')\n\n# Критичні зони\nax2.axvspan(-10, -5, alpha=0.15, color='yellow', label='Зони зникаючого градієнта')\nax2.axvspan(5, 10, alpha=0.15, color='yellow')\nax2.text(-7.5, 0.15, 'σ\\'(z) ≈ 0', fontsize=11, ha='center', style='italic')\nax2.text(7.5, 0.15, 'σ\\'(z) ≈ 0', fontsize=11, ha='center', style='italic')\n\nax2.grid(alpha=0.3)\nax2.set_xlabel('z', fontsize=14)\nax2.set_ylabel(\"σ'(z)\", fontsize=14)\nax2.set_title('Похідна Sigmoid', fontsize=16, fontweight='bold')\nax2.legend(fontsize=11, loc='upper right')\n\nplt.tight_layout()\nplt.show()\n","python","",[5434,5435,5436,5455,5468,5475,5496,5514,5519,5533,5539,5552,5557,5564,5586,5591,5597,5629,5634,5640,5678,5718,5751,5785,5799,5820,5838,5867,5882,5887,5893,5925,5959,5993,6021,6026,6032,6042,6107,6152,6194,6222,6227,6233,6276,6306,6360,6406,6411,6425,6443,6462,6489,6513,6518,6524],"code",{"__ignoreMap":5432},[5437,5438,5441,5445,5449,5452],"span",{"class":5439,"line":5440},"line",1,[5437,5442,5444],{"class":5443},"s8xlr","import",[5437,5446,5448],{"class":5447},"sHH4Y"," numpy ",[5437,5450,5451],{"class":5443},"as",[5437,5453,5454],{"class":5447}," np\n",[5437,5456,5458,5460,5463,5465],{"class":5439,"line":5457},2,[5437,5459,5444],{"class":5443},[5437,5461,5462],{"class":5447}," matplotlib.pyplot ",[5437,5464,5451],{"class":5443},[5437,5466,5467],{"class":5447}," plt\n",[5437,5469,5471],{"class":5439,"line":5470},3,[5437,5472,5474],{"emptyLinePlaceholder":5473},true,"\n",[5437,5476,5478,5482,5486,5489,5493],{"class":5439,"line":5477},4,[5437,5479,5481],{"class":5480},"su1O8","def",[5437,5483,5485],{"class":5484},"s8Opu"," sigmoid",[5437,5487,5488],{"class":5447},"(",[5437,5490,5492],{"class":5491},"siwwj","z",[5437,5494,5495],{"class":5447},"):\n",[5437,5497,5499,5502,5506,5509,5511],{"class":5439,"line":5498},5,[5437,5500,5501],{"class":5443},"    return",[5437,5503,5505],{"class":5504},"sJj4R"," 1",[5437,5507,5508],{"class":5447}," \u002F (",[5437,5510,5424],{"class":5504},[5437,5512,5513],{"class":5447}," + np.exp(-z))\n",[5437,5515,5517],{"class":5439,"line":5516},6,[5437,5518,5474],{"emptyLinePlaceholder":5473},[5437,5520,5522,5524,5527,5529,5531],{"class":5439,"line":5521},7,[5437,5523,5481],{"class":5480},[5437,5525,5526],{"class":5484}," sigmoid_derivative",[5437,5528,5488],{"class":5447},[5437,5530,5492],{"class":5491},[5437,5532,5495],{"class":5447},[5437,5534,5536],{"class":5439,"line":5535},8,[5437,5537,5538],{"class":5447},"    s = sigmoid(z)\n",[5437,5540,5542,5544,5547,5549],{"class":5439,"line":5541},9,[5437,5543,5501],{"class":5443},[5437,5545,5546],{"class":5447}," s * (",[5437,5548,5424],{"class":5504},[5437,5550,5551],{"class":5447}," - s)\n",[5437,5553,5555],{"class":5439,"line":5554},10,[5437,5556,5474],{"emptyLinePlaceholder":5473},[5437,5558,5560],{"class":5439,"line":5559},11,[5437,5561,5563],{"class":5562},"spJ8K","# Діапазон значень\n",[5437,5565,5567,5570,5573,5576,5578,5580,5583],{"class":5439,"line":5566},12,[5437,5568,5569],{"class":5447},"z = np.linspace(-",[5437,5571,5572],{"class":5504},"10",[5437,5574,5575],{"class":5447},", ",[5437,5577,5572],{"class":5504},[5437,5579,5575],{"class":5447},[5437,5581,5582],{"class":5504},"500",[5437,5584,5585],{"class":5447},")\n",[5437,5587,5589],{"class":5439,"line":5588},13,[5437,5590,5474],{"emptyLinePlaceholder":5473},[5437,5592,5594],{"class":5439,"line":5593},14,[5437,5595,5596],{"class":5562},"# Візуалізація\n",[5437,5598,5600,5603,5605,5607,5610,5612,5615,5618,5621,5623,5626],{"class":5439,"line":5599},15,[5437,5601,5602],{"class":5447},"fig, (ax1, ax2) = plt.subplots(",[5437,5604,5424],{"class":5504},[5437,5606,5575],{"class":5447},[5437,5608,5609],{"class":5504},"2",[5437,5611,5575],{"class":5447},[5437,5613,5614],{"class":5491},"figsize",[5437,5616,5617],{"class":5447},"=(",[5437,5619,5620],{"class":5504},"16",[5437,5622,5575],{"class":5447},[5437,5624,5625],{"class":5504},"6",[5437,5627,5628],{"class":5447},"))\n",[5437,5630,5632],{"class":5439,"line":5631},16,[5437,5633,5474],{"emptyLinePlaceholder":5473},[5437,5635,5637],{"class":5439,"line":5636},17,[5437,5638,5639],{"class":5562},"# Сигмоїда\n",[5437,5641,5643,5646,5649,5652,5656,5658,5661,5663,5666,5668,5671,5673,5676],{"class":5439,"line":5642},18,[5437,5644,5645],{"class":5447},"ax1.plot(z, sigmoid(z), ",[5437,5647,5648],{"class":5491},"color",[5437,5650,5651],{"class":5447},"=",[5437,5653,5655],{"class":5654},"sbdoH","'#3b82f6'",[5437,5657,5575],{"class":5447},[5437,5659,5660],{"class":5491},"linewidth",[5437,5662,5651],{"class":5447},[5437,5664,5665],{"class":5504},"3",[5437,5667,5575],{"class":5447},[5437,5669,5670],{"class":5491},"label",[5437,5672,5651],{"class":5447},[5437,5674,5675],{"class":5654},"'σ(z)'",[5437,5677,5585],{"class":5447},[5437,5679,5681,5684,5687,5689,5691,5693,5696,5698,5701,5703,5706,5708,5711,5713,5716],{"class":5439,"line":5680},19,[5437,5682,5683],{"class":5447},"ax1.axhline(",[5437,5685,5686],{"class":5504},"0",[5437,5688,5575],{"class":5447},[5437,5690,5648],{"class":5491},[5437,5692,5651],{"class":5447},[5437,5694,5695],{"class":5654},"'gray'",[5437,5697,5575],{"class":5447},[5437,5699,5700],{"class":5491},"linestyle",[5437,5702,5651],{"class":5447},[5437,5704,5705],{"class":5654},"'--'",[5437,5707,5575],{"class":5447},[5437,5709,5710],{"class":5491},"alpha",[5437,5712,5651],{"class":5447},[5437,5714,5715],{"class":5504},"0.3",[5437,5717,5585],{"class":5447},[5437,5719,5721,5723,5725,5727,5729,5731,5733,5735,5737,5739,5741,5743,5745,5747,5749],{"class":5439,"line":5720},20,[5437,5722,5683],{"class":5447},[5437,5724,5424],{"class":5504},[5437,5726,5575],{"class":5447},[5437,5728,5648],{"class":5491},[5437,5730,5651],{"class":5447},[5437,5732,5695],{"class":5654},[5437,5734,5575],{"class":5447},[5437,5736,5700],{"class":5491},[5437,5738,5651],{"class":5447},[5437,5740,5705],{"class":5654},[5437,5742,5575],{"class":5447},[5437,5744,5710],{"class":5491},[5437,5746,5651],{"class":5447},[5437,5748,5715],{"class":5504},[5437,5750,5585],{"class":5447},[5437,5752,5754,5757,5759,5761,5763,5765,5767,5769,5771,5773,5775,5777,5779,5781,5783],{"class":5439,"line":5753},21,[5437,5755,5756],{"class":5447},"ax1.axvline(",[5437,5758,5686],{"class":5504},[5437,5760,5575],{"class":5447},[5437,5762,5648],{"class":5491},[5437,5764,5651],{"class":5447},[5437,5766,5695],{"class":5654},[5437,5768,5575],{"class":5447},[5437,5770,5700],{"class":5491},[5437,5772,5651],{"class":5447},[5437,5774,5705],{"class":5654},[5437,5776,5575],{"class":5447},[5437,5778,5710],{"class":5491},[5437,5780,5651],{"class":5447},[5437,5782,5715],{"class":5504},[5437,5784,5585],{"class":5447},[5437,5786,5788,5791,5793,5795,5797],{"class":5439,"line":5787},22,[5437,5789,5790],{"class":5447},"ax1.grid(",[5437,5792,5710],{"class":5491},[5437,5794,5651],{"class":5447},[5437,5796,5715],{"class":5504},[5437,5798,5585],{"class":5447},[5437,5800,5802,5805,5808,5810,5813,5815,5818],{"class":5439,"line":5801},23,[5437,5803,5804],{"class":5447},"ax1.set_xlabel(",[5437,5806,5807],{"class":5654},"'z'",[5437,5809,5575],{"class":5447},[5437,5811,5812],{"class":5491},"fontsize",[5437,5814,5651],{"class":5447},[5437,5816,5817],{"class":5504},"14",[5437,5819,5585],{"class":5447},[5437,5821,5823,5826,5828,5830,5832,5834,5836],{"class":5439,"line":5822},24,[5437,5824,5825],{"class":5447},"ax1.set_ylabel(",[5437,5827,5675],{"class":5654},[5437,5829,5575],{"class":5447},[5437,5831,5812],{"class":5491},[5437,5833,5651],{"class":5447},[5437,5835,5817],{"class":5504},[5437,5837,5585],{"class":5447},[5437,5839,5841,5844,5847,5849,5851,5853,5855,5857,5860,5862,5865],{"class":5439,"line":5840},25,[5437,5842,5843],{"class":5447},"ax1.set_title(",[5437,5845,5846],{"class":5654},"'Функція Sigmoid'",[5437,5848,5575],{"class":5447},[5437,5850,5812],{"class":5491},[5437,5852,5651],{"class":5447},[5437,5854,5620],{"class":5504},[5437,5856,5575],{"class":5447},[5437,5858,5859],{"class":5491},"fontweight",[5437,5861,5651],{"class":5447},[5437,5863,5864],{"class":5654},"'bold'",[5437,5866,5585],{"class":5447},[5437,5868,5870,5873,5875,5877,5880],{"class":5439,"line":5869},26,[5437,5871,5872],{"class":5447},"ax1.legend(",[5437,5874,5812],{"class":5491},[5437,5876,5651],{"class":5447},[5437,5878,5879],{"class":5504},"12",[5437,5881,5585],{"class":5447},[5437,5883,5885],{"class":5439,"line":5884},27,[5437,5886,5474],{"emptyLinePlaceholder":5473},[5437,5888,5890],{"class":5439,"line":5889},28,[5437,5891,5892],{"class":5562},"# Похідна сигмоїди\n",[5437,5894,5896,5899,5901,5903,5906,5908,5910,5912,5914,5916,5918,5920,5923],{"class":5439,"line":5895},29,[5437,5897,5898],{"class":5447},"ax2.plot(z, sigmoid_derivative(z), ",[5437,5900,5648],{"class":5491},[5437,5902,5651],{"class":5447},[5437,5904,5905],{"class":5654},"'#ef4444'",[5437,5907,5575],{"class":5447},[5437,5909,5660],{"class":5491},[5437,5911,5651],{"class":5447},[5437,5913,5665],{"class":5504},[5437,5915,5575],{"class":5447},[5437,5917,5670],{"class":5491},[5437,5919,5651],{"class":5447},[5437,5921,5922],{"class":5654},"\"σ'(z) = σ(z)·(1 - σ(z))\"",[5437,5924,5585],{"class":5447},[5437,5926,5928,5931,5933,5935,5937,5939,5941,5943,5945,5947,5949,5951,5953,5955,5957],{"class":5439,"line":5927},30,[5437,5929,5930],{"class":5447},"ax2.axhline(",[5437,5932,5686],{"class":5504},[5437,5934,5575],{"class":5447},[5437,5936,5648],{"class":5491},[5437,5938,5651],{"class":5447},[5437,5940,5695],{"class":5654},[5437,5942,5575],{"class":5447},[5437,5944,5700],{"class":5491},[5437,5946,5651],{"class":5447},[5437,5948,5705],{"class":5654},[5437,5950,5575],{"class":5447},[5437,5952,5710],{"class":5491},[5437,5954,5651],{"class":5447},[5437,5956,5715],{"class":5504},[5437,5958,5585],{"class":5447},[5437,5960,5962,5965,5967,5969,5971,5973,5975,5977,5979,5981,5983,5985,5987,5989,5991],{"class":5439,"line":5961},31,[5437,5963,5964],{"class":5447},"ax2.axvline(",[5437,5966,5686],{"class":5504},[5437,5968,5575],{"class":5447},[5437,5970,5648],{"class":5491},[5437,5972,5651],{"class":5447},[5437,5974,5695],{"class":5654},[5437,5976,5575],{"class":5447},[5437,5978,5700],{"class":5491},[5437,5980,5651],{"class":5447},[5437,5982,5705],{"class":5654},[5437,5984,5575],{"class":5447},[5437,5986,5710],{"class":5491},[5437,5988,5651],{"class":5447},[5437,5990,5715],{"class":5504},[5437,5992,5585],{"class":5447},[5437,5994,5996,5999,6001,6004,6006,6008,6011,6013,6015,6017,6019],{"class":5439,"line":5995},32,[5437,5997,5998],{"class":5447},"ax2.fill_between(z, ",[5437,6000,5686],{"class":5504},[5437,6002,6003],{"class":5447},", sigmoid_derivative(z), ",[5437,6005,5710],{"class":5491},[5437,6007,5651],{"class":5447},[5437,6009,6010],{"class":5504},"0.2",[5437,6012,5575],{"class":5447},[5437,6014,5648],{"class":5491},[5437,6016,5651],{"class":5447},[5437,6018,5905],{"class":5654},[5437,6020,5585],{"class":5447},[5437,6022,6024],{"class":5439,"line":6023},33,[5437,6025,5474],{"emptyLinePlaceholder":5473},[5437,6027,6029],{"class":5439,"line":6028},34,[5437,6030,6031],{"class":5562},"# Позначимо максимум похідної\n",[5437,6033,6035,6038,6040],{"class":5439,"line":6034},35,[5437,6036,6037],{"class":5447},"max_val = sigmoid_derivative(",[5437,6039,5686],{"class":5504},[5437,6041,5585],{"class":5447},[5437,6043,6045,6048,6050,6053,6056,6058,6060,6062,6065,6067,6070,6072,6074,6076,6078,6080,6083,6086,6090,6093,6096,6099,6102,6105],{"class":5439,"line":6044},36,[5437,6046,6047],{"class":5447},"ax2.plot(",[5437,6049,5686],{"class":5504},[5437,6051,6052],{"class":5447},", max_val, ",[5437,6054,6055],{"class":5654},"'o'",[5437,6057,5575],{"class":5447},[5437,6059,5648],{"class":5491},[5437,6061,5651],{"class":5447},[5437,6063,6064],{"class":5654},"'#dc2626'",[5437,6066,5575],{"class":5447},[5437,6068,6069],{"class":5491},"markersize",[5437,6071,5651],{"class":5447},[5437,6073,5879],{"class":5504},[5437,6075,5575],{"class":5447},[5437,6077,5670],{"class":5491},[5437,6079,5651],{"class":5447},[5437,6081,6082],{"class":5480},"f",[5437,6084,6085],{"class":5654},"'Максимум: σ",[5437,6087,6089],{"class":6088},"sjcCO","\\'",[5437,6091,6092],{"class":5654},"(0) = ",[5437,6094,6095],{"class":5480},"{",[5437,6097,6098],{"class":5447},"max_val",[5437,6100,6101],{"class":5480},":.3f}",[5437,6103,6104],{"class":5654},"'",[5437,6106,5585],{"class":5447},[5437,6108,6110,6113,6115,6118,6120,6122,6124,6127,6130,6132,6135,6137,6139,6142,6145,6147,6149],{"class":5439,"line":6109},37,[5437,6111,6112],{"class":5447},"ax2.annotate(",[5437,6114,6082],{"class":5480},[5437,6116,6117],{"class":5654},"'Макс = ",[5437,6119,6095],{"class":5480},[5437,6121,6098],{"class":5447},[5437,6123,6101],{"class":5480},[5437,6125,6126],{"class":6088},"\\n",[5437,6128,6129],{"class":5654},"при z=0'",[5437,6131,5575],{"class":5447},[5437,6133,6134],{"class":5491},"xy",[5437,6136,5617],{"class":5447},[5437,6138,5686],{"class":5504},[5437,6140,6141],{"class":5447},", max_val), ",[5437,6143,6144],{"class":5491},"xytext",[5437,6146,5617],{"class":5447},[5437,6148,5609],{"class":5504},[5437,6150,6151],{"class":5447},", max_val),\n",[5437,6153,6155,6158,6160,6164,6166,6169,6171,6174,6176,6178,6180,6182,6184,6187,6189,6191],{"class":5439,"line":6154},38,[5437,6156,6157],{"class":5491},"             arrowprops",[5437,6159,5651],{"class":5447},[5437,6161,6163],{"class":6162},"sN1BT","dict",[5437,6165,5488],{"class":5447},[5437,6167,6168],{"class":5491},"arrowstyle",[5437,6170,5651],{"class":5447},[5437,6172,6173],{"class":5654},"'->'",[5437,6175,5575],{"class":5447},[5437,6177,5648],{"class":5491},[5437,6179,5651],{"class":5447},[5437,6181,6064],{"class":5654},[5437,6183,5575],{"class":5447},[5437,6185,6186],{"class":5491},"lw",[5437,6188,5651],{"class":5447},[5437,6190,5609],{"class":5504},[5437,6192,6193],{"class":5447},"),\n",[5437,6195,6197,6200,6202,6204,6206,6208,6210,6212,6214,6216,6218,6220],{"class":5439,"line":6196},39,[5437,6198,6199],{"class":5491},"             fontsize",[5437,6201,5651],{"class":5447},[5437,6203,5879],{"class":5504},[5437,6205,5575],{"class":5447},[5437,6207,5648],{"class":5491},[5437,6209,5651],{"class":5447},[5437,6211,6064],{"class":5654},[5437,6213,5575],{"class":5447},[5437,6215,5859],{"class":5491},[5437,6217,5651],{"class":5447},[5437,6219,5864],{"class":5654},[5437,6221,5585],{"class":5447},[5437,6223,6225],{"class":5439,"line":6224},40,[5437,6226,5474],{"emptyLinePlaceholder":5473},[5437,6228,6230],{"class":5439,"line":6229},41,[5437,6231,6232],{"class":5562},"# Критичні зони\n",[5437,6234,6236,6239,6241,6244,6247,6249,6251,6253,6256,6258,6260,6262,6265,6267,6269,6271,6274],{"class":5439,"line":6235},42,[5437,6237,6238],{"class":5447},"ax2.axvspan(-",[5437,6240,5572],{"class":5504},[5437,6242,6243],{"class":5447},", -",[5437,6245,6246],{"class":5504},"5",[5437,6248,5575],{"class":5447},[5437,6250,5710],{"class":5491},[5437,6252,5651],{"class":5447},[5437,6254,6255],{"class":5504},"0.15",[5437,6257,5575],{"class":5447},[5437,6259,5648],{"class":5491},[5437,6261,5651],{"class":5447},[5437,6263,6264],{"class":5654},"'yellow'",[5437,6266,5575],{"class":5447},[5437,6268,5670],{"class":5491},[5437,6270,5651],{"class":5447},[5437,6272,6273],{"class":5654},"'Зони зникаючого градієнта'",[5437,6275,5585],{"class":5447},[5437,6277,6279,6282,6284,6286,6288,6290,6292,6294,6296,6298,6300,6302,6304],{"class":5439,"line":6278},43,[5437,6280,6281],{"class":5447},"ax2.axvspan(",[5437,6283,6246],{"class":5504},[5437,6285,5575],{"class":5447},[5437,6287,5572],{"class":5504},[5437,6289,5575],{"class":5447},[5437,6291,5710],{"class":5491},[5437,6293,5651],{"class":5447},[5437,6295,6255],{"class":5504},[5437,6297,5575],{"class":5447},[5437,6299,5648],{"class":5491},[5437,6301,5651],{"class":5447},[5437,6303,6264],{"class":5654},[5437,6305,5585],{"class":5447},[5437,6307,6309,6312,6315,6317,6319,6321,6324,6326,6329,6331,6333,6335,6338,6340,6343,6345,6348,6350,6353,6355,6358],{"class":5439,"line":6308},44,[5437,6310,6311],{"class":5447},"ax2.text(-",[5437,6313,6314],{"class":5504},"7.5",[5437,6316,5575],{"class":5447},[5437,6318,6255],{"class":5504},[5437,6320,5575],{"class":5447},[5437,6322,6323],{"class":5654},"'σ",[5437,6325,6089],{"class":6088},[5437,6327,6328],{"class":5654},"(z) ≈ 0'",[5437,6330,5575],{"class":5447},[5437,6332,5812],{"class":5491},[5437,6334,5651],{"class":5447},[5437,6336,6337],{"class":5504},"11",[5437,6339,5575],{"class":5447},[5437,6341,6342],{"class":5491},"ha",[5437,6344,5651],{"class":5447},[5437,6346,6347],{"class":5654},"'center'",[5437,6349,5575],{"class":5447},[5437,6351,6352],{"class":5491},"style",[5437,6354,5651],{"class":5447},[5437,6356,6357],{"class":5654},"'italic'",[5437,6359,5585],{"class":5447},[5437,6361,6363,6366,6368,6370,6372,6374,6376,6378,6380,6382,6384,6386,6388,6390,6392,6394,6396,6398,6400,6402,6404],{"class":5439,"line":6362},45,[5437,6364,6365],{"class":5447},"ax2.text(",[5437,6367,6314],{"class":5504},[5437,6369,5575],{"class":5447},[5437,6371,6255],{"class":5504},[5437,6373,5575],{"class":5447},[5437,6375,6323],{"class":5654},[5437,6377,6089],{"class":6088},[5437,6379,6328],{"class":5654},[5437,6381,5575],{"class":5447},[5437,6383,5812],{"class":5491},[5437,6385,5651],{"class":5447},[5437,6387,6337],{"class":5504},[5437,6389,5575],{"class":5447},[5437,6391,6342],{"class":5491},[5437,6393,5651],{"class":5447},[5437,6395,6347],{"class":5654},[5437,6397,5575],{"class":5447},[5437,6399,6352],{"class":5491},[5437,6401,5651],{"class":5447},[5437,6403,6357],{"class":5654},[5437,6405,5585],{"class":5447},[5437,6407,6409],{"class":5439,"line":6408},46,[5437,6410,5474],{"emptyLinePlaceholder":5473},[5437,6412,6414,6417,6419,6421,6423],{"class":5439,"line":6413},47,[5437,6415,6416],{"class":5447},"ax2.grid(",[5437,6418,5710],{"class":5491},[5437,6420,5651],{"class":5447},[5437,6422,5715],{"class":5504},[5437,6424,5585],{"class":5447},[5437,6426,6428,6431,6433,6435,6437,6439,6441],{"class":5439,"line":6427},48,[5437,6429,6430],{"class":5447},"ax2.set_xlabel(",[5437,6432,5807],{"class":5654},[5437,6434,5575],{"class":5447},[5437,6436,5812],{"class":5491},[5437,6438,5651],{"class":5447},[5437,6440,5817],{"class":5504},[5437,6442,5585],{"class":5447},[5437,6444,6446,6449,6452,6454,6456,6458,6460],{"class":5439,"line":6445},49,[5437,6447,6448],{"class":5447},"ax2.set_ylabel(",[5437,6450,6451],{"class":5654},"\"σ'(z)\"",[5437,6453,5575],{"class":5447},[5437,6455,5812],{"class":5491},[5437,6457,5651],{"class":5447},[5437,6459,5817],{"class":5504},[5437,6461,5585],{"class":5447},[5437,6463,6465,6468,6471,6473,6475,6477,6479,6481,6483,6485,6487],{"class":5439,"line":6464},50,[5437,6466,6467],{"class":5447},"ax2.set_title(",[5437,6469,6470],{"class":5654},"'Похідна Sigmoid'",[5437,6472,5575],{"class":5447},[5437,6474,5812],{"class":5491},[5437,6476,5651],{"class":5447},[5437,6478,5620],{"class":5504},[5437,6480,5575],{"class":5447},[5437,6482,5859],{"class":5491},[5437,6484,5651],{"class":5447},[5437,6486,5864],{"class":5654},[5437,6488,5585],{"class":5447},[5437,6490,6492,6495,6497,6499,6501,6503,6506,6508,6511],{"class":5439,"line":6491},51,[5437,6493,6494],{"class":5447},"ax2.legend(",[5437,6496,5812],{"class":5491},[5437,6498,5651],{"class":5447},[5437,6500,6337],{"class":5504},[5437,6502,5575],{"class":5447},[5437,6504,6505],{"class":5491},"loc",[5437,6507,5651],{"class":5447},[5437,6509,6510],{"class":5654},"'upper right'",[5437,6512,5585],{"class":5447},[5437,6514,6516],{"class":5439,"line":6515},52,[5437,6517,5474],{"emptyLinePlaceholder":5473},[5437,6519,6521],{"class":5439,"line":6520},53,[5437,6522,6523],{"class":5447},"plt.tight_layout()\n",[5437,6525,6527],{"class":5439,"line":6526},54,[5437,6528,6529],{"class":5447},"plt.show()\n",[6531,6532,6533],"template",{"v-slot:output":5432},[6534,6535],"img",{"alt":6536,"className":6537,"src":6539},"Функція Sigmoid та її похідна: демонстрація проблеми зникаючих градієнтів при великих значеннях z",[6538],"diagram-img","\u002Fimages\u002Fai-python\u002Factivation-functions-heart-disease\u002Fheart-disease-prediction\u002F01.png",[5191,6541,6542],{},[5195,6543,6544],{},"Критична проблема:",[5191,6546,6547,6548,6551,6552,6555],{},"Максимальне значення похідної ",[5323,6549],{"tex":6550,":inline":5332},"\\sigma'(0) = 0.25",". Це означає, що навіть у ",[5195,6553,6554],{},"найкращому випадку"," градієнт зменшується вчетверо при проходженні через один шар.",[5191,6557,6558],{},"Для мережі з 10 шарами:",[5323,6560],{"tex":6561},"\\text{Градієнт на вході} \\approx (0.25)^{10} \\approx 9.5 \\times 10^{-7}",[5191,6563,6564,6565,6568],{},"Градієнт ",[5195,6566,6567],{},"фактично зникає"," — перші шари не навчаються!",[6570,6571,6572,6577],"warning",{},[5191,6573,6574],{},[5195,6575,6576],{},"Висновок для практики:",[5191,6578,6579,6580,6583],{},"Сигмоїду ",[5195,6581,6582],{},"не слід використовувати"," в прихованих шарах глибоких мереж. Її місце — виключно на вихідному шарі для бінарної класифікації, де нам потрібна інтерпретація виходу як ймовірності.",[5297,6585],{},[5311,6587,6589],{"id":6588},"гіперболічний-тангенс-tanh-центрована-альтернатива","Гіперболічний тангенс (Tanh) — центрована альтернатива",[5191,6591,6592],{},[5195,6593,5382],{},[5323,6595],{"tex":6596},"\\tanh(z) = \\frac{e^z - e^{-z}}{e^z + e^{-z}} = \\frac{e^{2z} - 1}{e^{2z} + 1}",[5191,6598,6599],{},[5195,6600,6601],{},"Зв'язок із сигмоїдою:",[5323,6603],{"tex":6604},"\\tanh(z) = 2\\sigma(2z) - 1",[5191,6606,6607],{},[5195,6608,5390],{},[5323,6610],{"tex":6611},"\\tanh'(z) = 1 - \\tanh^2(z)",[5191,6613,6614],{},[5195,6615,6616],{},"Доведення:",[5323,6618],{"tex":6619},"\\frac{d\\tanh(z)}{dz} = \\frac{d}{dz}\\left(\\frac{e^z - e^{-z}}{e^z + e^{-z}}\\right) = \\frac{(e^z + e^{-z})^2 - (e^z - e^{-z})^2}{(e^z + e^{-z})^2}",[5323,6621],{"tex":6622},"= \\frac{4e^z \\cdot e^{-z}}{(e^z + e^{-z})^2} = \\frac{4}{(e^z + e^{-z})^2}",[5191,6624,6625,6626,6629],{},"Підставляючи ",[5323,6627],{"tex":6628,":inline":5332},"\\tanh(z)",", отримуємо:",[5323,6631],{"tex":6611},[5191,6633,6634],{},[5195,6635,6636],{},"Властивості:",[5244,6638,6639,6646,6653],{},[5220,6640,6641,6642,6645],{},"Діапазон виходу: ",[5323,6643],{"tex":6644,":inline":5332},"(-1, 1)"," — центрований навколо нуля",[5220,6647,6648,6649,6652],{},"Максимум похідної: ",[5323,6650],{"tex":6651,":inline":5332},"\\tanh'(0) = 1"," — вчетверо більше, ніж у сигмоїди!",[5220,6654,6655,6656],{},"Все одно страждає від зникаючих градієнтів для ",[5323,6657],{"tex":6658,":inline":5332},"|z| > 3",[6660,6661,6662,6667,6670],"tip",{},[5191,6663,6664],{},[5195,6665,6666],{},"Коли використовувати Tanh:",[5191,6668,6669],{},"Tanh краща за сигмоїду для прихованих шарів у неглибоких мережах (2–3 шари) завдяки центруванню навколо нуля. Але для глибоких мереж ReLU все одно перемагає.",[5191,6671,6672],{},"Tanh часто використовується в рекурентних нейронних мережах (RNN, LSTM), де центроване представлення критично важливе для стабільності.",[5297,6674],{},[5311,6676,6678],{"id":6677},"relu-rectified-linear-unit-революційна-простота","ReLU (Rectified Linear Unit) — революційна простота",[5191,6680,6681],{},[5195,6682,5382],{},[5323,6684,6685],{},"\\text{ReLU}(z) = \\max(0, z) = \\begin{cases}\nz, & \\text{якщо } z > 0 \\\n0, & \\text{якщо } z \\leq 0\n\\end{cases}",[5191,6687,6688],{},[5195,6689,5390],{},[5323,6691,6692],{},"\\text{ReLU}'(z) = \\begin{cases}\n1, & \\text{якщо } z > 0 \\\n0, & \\text{якщо } z \\leq 0 \\\n\\text{не визначена}, & \\text{якщо } z = 0\n\\end{cases}",[5191,6694,6695,6696,6699],{},"На практиці в точці ",[5323,6697],{"tex":6698,":inline":5332},"z = 0"," приймають похідну рівною 0 або 1 (не має значення, бо ймовірність потрапити точно в нуль — нульова).",[5191,6701,6702],{},[5195,6703,6704],{},"Чому ReLU вирішує проблему зникаючих градієнтів:",[5417,6706,6708],{"kernel":5419,"title":6707},"relu_properties.ipynb",[5422,6709,6710,7579],{"execution-count":5609},[5427,6711,6713],{"className":5429,"code":6712,"language":5431,"meta":5432,"style":5432},"import numpy as np\nimport matplotlib.pyplot as plt\n\ndef relu(z):\n    return np.maximum(0, z)\n\ndef relu_derivative(z):\n    return np.where(z > 0, 1, 0)\n\nz = np.linspace(-5, 5, 500)\n\nfig, (ax1, ax2) = plt.subplots(1, 2, figsize=(16, 6))\n\n# ReLU функція\nax1.plot(z, relu(z), color='#10b981', linewidth=3, label='ReLU(z)')\nax1.axhline(0, color='gray', linestyle='--', alpha=0.3)\nax1.axvline(0, color='gray', linestyle='--', alpha=0.3)\nax1.grid(alpha=0.3)\nax1.set_xlabel('z', fontsize=14)\nax1.set_ylabel('ReLU(z)', fontsize=14)\nax1.set_title('Функція ReLU', fontsize=16, fontweight='bold')\nax1.legend(fontsize=12)\nax1.fill_between(z[z > 0], 0, relu(z)[z > 0], alpha=0.2, color='#10b981')\nax1.text(2, 1, 'Активна зона\\n(градієнт = 1)', fontsize=12, color='#059669', fontweight='bold')\nax1.text(-3, 1, 'Мертва зона\\n(градієнт = 0)', fontsize=12, color='#6b7280', fontweight='bold')\n\n# ReLU похідна\nax2.plot(z, relu_derivative(z), color='#f59e0b', linewidth=3, drawstyle='steps-post', label=\"ReLU'(z)\")\nax2.axhline(0, color='gray', linestyle='--', alpha=0.3)\nax2.axhline(1, color='#10b981', linestyle='--', alpha=0.3, linewidth=2)\nax2.axvline(0, color='gray', linestyle='--', alpha=0.3)\nax2.grid(alpha=0.3)\nax2.set_xlabel('z', fontsize=14)\nax2.set_ylabel(\"ReLU'(z)\", fontsize=14)\nax2.set_title('Похідна ReLU', fontsize=16, fontweight='bold')\nax2.legend(fontsize=12)\nax2.set_ylim(-0.2, 1.3)\n\n# Позначення константного градієнта\nax2.annotate('Градієнт = 1 (константа!)\\nНемає зникання', \n             xy=(3, 1), xytext=(2, 1.15),\n             arrowprops=dict(arrowstyle='->', color='#10b981', lw=2),\n             fontsize=12, color='#059669', fontweight='bold',\n             bbox=dict(boxstyle='round,pad=0.5', facecolor='#d1fae5', edgecolor='#10b981'))\n\nplt.tight_layout()\nplt.show()\n",[5434,6714,6715,6725,6735,6739,6752,6764,6768,6781,6800,6804,6820,6824,6848,6852,6857,6888,6920,6952,6964,6980,6996,7021,7033,7068,7116,7164,7168,7173,7214,7246,7286,7318,7330,7346,7362,7387,7399,7413,7417,7422,7437,7466,7500,7527,7567,7571,7575],{"__ignoreMap":5432},[5437,6716,6717,6719,6721,6723],{"class":5439,"line":5440},[5437,6718,5444],{"class":5443},[5437,6720,5448],{"class":5447},[5437,6722,5451],{"class":5443},[5437,6724,5454],{"class":5447},[5437,6726,6727,6729,6731,6733],{"class":5439,"line":5457},[5437,6728,5444],{"class":5443},[5437,6730,5462],{"class":5447},[5437,6732,5451],{"class":5443},[5437,6734,5467],{"class":5447},[5437,6736,6737],{"class":5439,"line":5470},[5437,6738,5474],{"emptyLinePlaceholder":5473},[5437,6740,6741,6743,6746,6748,6750],{"class":5439,"line":5477},[5437,6742,5481],{"class":5480},[5437,6744,6745],{"class":5484}," relu",[5437,6747,5488],{"class":5447},[5437,6749,5492],{"class":5491},[5437,6751,5495],{"class":5447},[5437,6753,6754,6756,6759,6761],{"class":5439,"line":5498},[5437,6755,5501],{"class":5443},[5437,6757,6758],{"class":5447}," np.maximum(",[5437,6760,5686],{"class":5504},[5437,6762,6763],{"class":5447},", z)\n",[5437,6765,6766],{"class":5439,"line":5516},[5437,6767,5474],{"emptyLinePlaceholder":5473},[5437,6769,6770,6772,6775,6777,6779],{"class":5439,"line":5521},[5437,6771,5481],{"class":5480},[5437,6773,6774],{"class":5484}," relu_derivative",[5437,6776,5488],{"class":5447},[5437,6778,5492],{"class":5491},[5437,6780,5495],{"class":5447},[5437,6782,6783,6785,6788,6790,6792,6794,6796,6798],{"class":5439,"line":5535},[5437,6784,5501],{"class":5443},[5437,6786,6787],{"class":5447}," np.where(z > ",[5437,6789,5686],{"class":5504},[5437,6791,5575],{"class":5447},[5437,6793,5424],{"class":5504},[5437,6795,5575],{"class":5447},[5437,6797,5686],{"class":5504},[5437,6799,5585],{"class":5447},[5437,6801,6802],{"class":5439,"line":5541},[5437,6803,5474],{"emptyLinePlaceholder":5473},[5437,6805,6806,6808,6810,6812,6814,6816,6818],{"class":5439,"line":5554},[5437,6807,5569],{"class":5447},[5437,6809,6246],{"class":5504},[5437,6811,5575],{"class":5447},[5437,6813,6246],{"class":5504},[5437,6815,5575],{"class":5447},[5437,6817,5582],{"class":5504},[5437,6819,5585],{"class":5447},[5437,6821,6822],{"class":5439,"line":5559},[5437,6823,5474],{"emptyLinePlaceholder":5473},[5437,6825,6826,6828,6830,6832,6834,6836,6838,6840,6842,6844,6846],{"class":5439,"line":5566},[5437,6827,5602],{"class":5447},[5437,6829,5424],{"class":5504},[5437,6831,5575],{"class":5447},[5437,6833,5609],{"class":5504},[5437,6835,5575],{"class":5447},[5437,6837,5614],{"class":5491},[5437,6839,5617],{"class":5447},[5437,6841,5620],{"class":5504},[5437,6843,5575],{"class":5447},[5437,6845,5625],{"class":5504},[5437,6847,5628],{"class":5447},[5437,6849,6850],{"class":5439,"line":5588},[5437,6851,5474],{"emptyLinePlaceholder":5473},[5437,6853,6854],{"class":5439,"line":5593},[5437,6855,6856],{"class":5562},"# ReLU функція\n",[5437,6858,6859,6862,6864,6866,6869,6871,6873,6875,6877,6879,6881,6883,6886],{"class":5439,"line":5599},[5437,6860,6861],{"class":5447},"ax1.plot(z, relu(z), ",[5437,6863,5648],{"class":5491},[5437,6865,5651],{"class":5447},[5437,6867,6868],{"class":5654},"'#10b981'",[5437,6870,5575],{"class":5447},[5437,6872,5660],{"class":5491},[5437,6874,5651],{"class":5447},[5437,6876,5665],{"class":5504},[5437,6878,5575],{"class":5447},[5437,6880,5670],{"class":5491},[5437,6882,5651],{"class":5447},[5437,6884,6885],{"class":5654},"'ReLU(z)'",[5437,6887,5585],{"class":5447},[5437,6889,6890,6892,6894,6896,6898,6900,6902,6904,6906,6908,6910,6912,6914,6916,6918],{"class":5439,"line":5631},[5437,6891,5683],{"class":5447},[5437,6893,5686],{"class":5504},[5437,6895,5575],{"class":5447},[5437,6897,5648],{"class":5491},[5437,6899,5651],{"class":5447},[5437,6901,5695],{"class":5654},[5437,6903,5575],{"class":5447},[5437,6905,5700],{"class":5491},[5437,6907,5651],{"class":5447},[5437,6909,5705],{"class":5654},[5437,6911,5575],{"class":5447},[5437,6913,5710],{"class":5491},[5437,6915,5651],{"class":5447},[5437,6917,5715],{"class":5504},[5437,6919,5585],{"class":5447},[5437,6921,6922,6924,6926,6928,6930,6932,6934,6936,6938,6940,6942,6944,6946,6948,6950],{"class":5439,"line":5636},[5437,6923,5756],{"class":5447},[5437,6925,5686],{"class":5504},[5437,6927,5575],{"class":5447},[5437,6929,5648],{"class":5491},[5437,6931,5651],{"class":5447},[5437,6933,5695],{"class":5654},[5437,6935,5575],{"class":5447},[5437,6937,5700],{"class":5491},[5437,6939,5651],{"class":5447},[5437,6941,5705],{"class":5654},[5437,6943,5575],{"class":5447},[5437,6945,5710],{"class":5491},[5437,6947,5651],{"class":5447},[5437,6949,5715],{"class":5504},[5437,6951,5585],{"class":5447},[5437,6953,6954,6956,6958,6960,6962],{"class":5439,"line":5642},[5437,6955,5790],{"class":5447},[5437,6957,5710],{"class":5491},[5437,6959,5651],{"class":5447},[5437,6961,5715],{"class":5504},[5437,6963,5585],{"class":5447},[5437,6965,6966,6968,6970,6972,6974,6976,6978],{"class":5439,"line":5680},[5437,6967,5804],{"class":5447},[5437,6969,5807],{"class":5654},[5437,6971,5575],{"class":5447},[5437,6973,5812],{"class":5491},[5437,6975,5651],{"class":5447},[5437,6977,5817],{"class":5504},[5437,6979,5585],{"class":5447},[5437,6981,6982,6984,6986,6988,6990,6992,6994],{"class":5439,"line":5720},[5437,6983,5825],{"class":5447},[5437,6985,6885],{"class":5654},[5437,6987,5575],{"class":5447},[5437,6989,5812],{"class":5491},[5437,6991,5651],{"class":5447},[5437,6993,5817],{"class":5504},[5437,6995,5585],{"class":5447},[5437,6997,6998,7000,7003,7005,7007,7009,7011,7013,7015,7017,7019],{"class":5439,"line":5753},[5437,6999,5843],{"class":5447},[5437,7001,7002],{"class":5654},"'Функція ReLU'",[5437,7004,5575],{"class":5447},[5437,7006,5812],{"class":5491},[5437,7008,5651],{"class":5447},[5437,7010,5620],{"class":5504},[5437,7012,5575],{"class":5447},[5437,7014,5859],{"class":5491},[5437,7016,5651],{"class":5447},[5437,7018,5864],{"class":5654},[5437,7020,5585],{"class":5447},[5437,7022,7023,7025,7027,7029,7031],{"class":5439,"line":5787},[5437,7024,5872],{"class":5447},[5437,7026,5812],{"class":5491},[5437,7028,5651],{"class":5447},[5437,7030,5879],{"class":5504},[5437,7032,5585],{"class":5447},[5437,7034,7035,7038,7040,7043,7045,7048,7050,7052,7054,7056,7058,7060,7062,7064,7066],{"class":5439,"line":5801},[5437,7036,7037],{"class":5447},"ax1.fill_between(z[z > ",[5437,7039,5686],{"class":5504},[5437,7041,7042],{"class":5447},"], ",[5437,7044,5686],{"class":5504},[5437,7046,7047],{"class":5447},", relu(z)[z > ",[5437,7049,5686],{"class":5504},[5437,7051,7042],{"class":5447},[5437,7053,5710],{"class":5491},[5437,7055,5651],{"class":5447},[5437,7057,6010],{"class":5504},[5437,7059,5575],{"class":5447},[5437,7061,5648],{"class":5491},[5437,7063,5651],{"class":5447},[5437,7065,6868],{"class":5654},[5437,7067,5585],{"class":5447},[5437,7069,7070,7073,7075,7077,7079,7081,7084,7086,7089,7091,7093,7095,7097,7099,7101,7103,7106,7108,7110,7112,7114],{"class":5439,"line":5822},[5437,7071,7072],{"class":5447},"ax1.text(",[5437,7074,5609],{"class":5504},[5437,7076,5575],{"class":5447},[5437,7078,5424],{"class":5504},[5437,7080,5575],{"class":5447},[5437,7082,7083],{"class":5654},"'Активна зона",[5437,7085,6126],{"class":6088},[5437,7087,7088],{"class":5654},"(градієнт = 1)'",[5437,7090,5575],{"class":5447},[5437,7092,5812],{"class":5491},[5437,7094,5651],{"class":5447},[5437,7096,5879],{"class":5504},[5437,7098,5575],{"class":5447},[5437,7100,5648],{"class":5491},[5437,7102,5651],{"class":5447},[5437,7104,7105],{"class":5654},"'#059669'",[5437,7107,5575],{"class":5447},[5437,7109,5859],{"class":5491},[5437,7111,5651],{"class":5447},[5437,7113,5864],{"class":5654},[5437,7115,5585],{"class":5447},[5437,7117,7118,7121,7123,7125,7127,7129,7132,7134,7137,7139,7141,7143,7145,7147,7149,7151,7154,7156,7158,7160,7162],{"class":5439,"line":5840},[5437,7119,7120],{"class":5447},"ax1.text(-",[5437,7122,5665],{"class":5504},[5437,7124,5575],{"class":5447},[5437,7126,5424],{"class":5504},[5437,7128,5575],{"class":5447},[5437,7130,7131],{"class":5654},"'Мертва зона",[5437,7133,6126],{"class":6088},[5437,7135,7136],{"class":5654},"(градієнт = 0)'",[5437,7138,5575],{"class":5447},[5437,7140,5812],{"class":5491},[5437,7142,5651],{"class":5447},[5437,7144,5879],{"class":5504},[5437,7146,5575],{"class":5447},[5437,7148,5648],{"class":5491},[5437,7150,5651],{"class":5447},[5437,7152,7153],{"class":5654},"'#6b7280'",[5437,7155,5575],{"class":5447},[5437,7157,5859],{"class":5491},[5437,7159,5651],{"class":5447},[5437,7161,5864],{"class":5654},[5437,7163,5585],{"class":5447},[5437,7165,7166],{"class":5439,"line":5869},[5437,7167,5474],{"emptyLinePlaceholder":5473},[5437,7169,7170],{"class":5439,"line":5884},[5437,7171,7172],{"class":5562},"# ReLU похідна\n",[5437,7174,7175,7178,7180,7182,7185,7187,7189,7191,7193,7195,7198,7200,7203,7205,7207,7209,7212],{"class":5439,"line":5889},[5437,7176,7177],{"class":5447},"ax2.plot(z, relu_derivative(z), ",[5437,7179,5648],{"class":5491},[5437,7181,5651],{"class":5447},[5437,7183,7184],{"class":5654},"'#f59e0b'",[5437,7186,5575],{"class":5447},[5437,7188,5660],{"class":5491},[5437,7190,5651],{"class":5447},[5437,7192,5665],{"class":5504},[5437,7194,5575],{"class":5447},[5437,7196,7197],{"class":5491},"drawstyle",[5437,7199,5651],{"class":5447},[5437,7201,7202],{"class":5654},"'steps-post'",[5437,7204,5575],{"class":5447},[5437,7206,5670],{"class":5491},[5437,7208,5651],{"class":5447},[5437,7210,7211],{"class":5654},"\"ReLU'(z)\"",[5437,7213,5585],{"class":5447},[5437,7215,7216,7218,7220,7222,7224,7226,7228,7230,7232,7234,7236,7238,7240,7242,7244],{"class":5439,"line":5895},[5437,7217,5930],{"class":5447},[5437,7219,5686],{"class":5504},[5437,7221,5575],{"class":5447},[5437,7223,5648],{"class":5491},[5437,7225,5651],{"class":5447},[5437,7227,5695],{"class":5654},[5437,7229,5575],{"class":5447},[5437,7231,5700],{"class":5491},[5437,7233,5651],{"class":5447},[5437,7235,5705],{"class":5654},[5437,7237,5575],{"class":5447},[5437,7239,5710],{"class":5491},[5437,7241,5651],{"class":5447},[5437,7243,5715],{"class":5504},[5437,7245,5585],{"class":5447},[5437,7247,7248,7250,7252,7254,7256,7258,7260,7262,7264,7266,7268,7270,7272,7274,7276,7278,7280,7282,7284],{"class":5439,"line":5927},[5437,7249,5930],{"class":5447},[5437,7251,5424],{"class":5504},[5437,7253,5575],{"class":5447},[5437,7255,5648],{"class":5491},[5437,7257,5651],{"class":5447},[5437,7259,6868],{"class":5654},[5437,7261,5575],{"class":5447},[5437,7263,5700],{"class":5491},[5437,7265,5651],{"class":5447},[5437,7267,5705],{"class":5654},[5437,7269,5575],{"class":5447},[5437,7271,5710],{"class":5491},[5437,7273,5651],{"class":5447},[5437,7275,5715],{"class":5504},[5437,7277,5575],{"class":5447},[5437,7279,5660],{"class":5491},[5437,7281,5651],{"class":5447},[5437,7283,5609],{"class":5504},[5437,7285,5585],{"class":5447},[5437,7287,7288,7290,7292,7294,7296,7298,7300,7302,7304,7306,7308,7310,7312,7314,7316],{"class":5439,"line":5961},[5437,7289,5964],{"class":5447},[5437,7291,5686],{"class":5504},[5437,7293,5575],{"class":5447},[5437,7295,5648],{"class":5491},[5437,7297,5651],{"class":5447},[5437,7299,5695],{"class":5654},[5437,7301,5575],{"class":5447},[5437,7303,5700],{"class":5491},[5437,7305,5651],{"class":5447},[5437,7307,5705],{"class":5654},[5437,7309,5575],{"class":5447},[5437,7311,5710],{"class":5491},[5437,7313,5651],{"class":5447},[5437,7315,5715],{"class":5504},[5437,7317,5585],{"class":5447},[5437,7319,7320,7322,7324,7326,7328],{"class":5439,"line":5995},[5437,7321,6416],{"class":5447},[5437,7323,5710],{"class":5491},[5437,7325,5651],{"class":5447},[5437,7327,5715],{"class":5504},[5437,7329,5585],{"class":5447},[5437,7331,7332,7334,7336,7338,7340,7342,7344],{"class":5439,"line":6023},[5437,7333,6430],{"class":5447},[5437,7335,5807],{"class":5654},[5437,7337,5575],{"class":5447},[5437,7339,5812],{"class":5491},[5437,7341,5651],{"class":5447},[5437,7343,5817],{"class":5504},[5437,7345,5585],{"class":5447},[5437,7347,7348,7350,7352,7354,7356,7358,7360],{"class":5439,"line":6028},[5437,7349,6448],{"class":5447},[5437,7351,7211],{"class":5654},[5437,7353,5575],{"class":5447},[5437,7355,5812],{"class":5491},[5437,7357,5651],{"class":5447},[5437,7359,5817],{"class":5504},[5437,7361,5585],{"class":5447},[5437,7363,7364,7366,7369,7371,7373,7375,7377,7379,7381,7383,7385],{"class":5439,"line":6034},[5437,7365,6467],{"class":5447},[5437,7367,7368],{"class":5654},"'Похідна ReLU'",[5437,7370,5575],{"class":5447},[5437,7372,5812],{"class":5491},[5437,7374,5651],{"class":5447},[5437,7376,5620],{"class":5504},[5437,7378,5575],{"class":5447},[5437,7380,5859],{"class":5491},[5437,7382,5651],{"class":5447},[5437,7384,5864],{"class":5654},[5437,7386,5585],{"class":5447},[5437,7388,7389,7391,7393,7395,7397],{"class":5439,"line":6044},[5437,7390,6494],{"class":5447},[5437,7392,5812],{"class":5491},[5437,7394,5651],{"class":5447},[5437,7396,5879],{"class":5504},[5437,7398,5585],{"class":5447},[5437,7400,7401,7404,7406,7408,7411],{"class":5439,"line":6109},[5437,7402,7403],{"class":5447},"ax2.set_ylim(-",[5437,7405,6010],{"class":5504},[5437,7407,5575],{"class":5447},[5437,7409,7410],{"class":5504},"1.3",[5437,7412,5585],{"class":5447},[5437,7414,7415],{"class":5439,"line":6154},[5437,7416,5474],{"emptyLinePlaceholder":5473},[5437,7418,7419],{"class":5439,"line":6196},[5437,7420,7421],{"class":5562},"# Позначення константного градієнта\n",[5437,7423,7424,7426,7429,7431,7434],{"class":5439,"line":6224},[5437,7425,6112],{"class":5447},[5437,7427,7428],{"class":5654},"'Градієнт = 1 (константа!)",[5437,7430,6126],{"class":6088},[5437,7432,7433],{"class":5654},"Немає зникання'",[5437,7435,7436],{"class":5447},", \n",[5437,7438,7439,7442,7444,7446,7448,7450,7453,7455,7457,7459,7461,7464],{"class":5439,"line":6229},[5437,7440,7441],{"class":5491},"             xy",[5437,7443,5617],{"class":5447},[5437,7445,5665],{"class":5504},[5437,7447,5575],{"class":5447},[5437,7449,5424],{"class":5504},[5437,7451,7452],{"class":5447},"), ",[5437,7454,6144],{"class":5491},[5437,7456,5617],{"class":5447},[5437,7458,5609],{"class":5504},[5437,7460,5575],{"class":5447},[5437,7462,7463],{"class":5504},"1.15",[5437,7465,6193],{"class":5447},[5437,7467,7468,7470,7472,7474,7476,7478,7480,7482,7484,7486,7488,7490,7492,7494,7496,7498],{"class":5439,"line":6235},[5437,7469,6157],{"class":5491},[5437,7471,5651],{"class":5447},[5437,7473,6163],{"class":6162},[5437,7475,5488],{"class":5447},[5437,7477,6168],{"class":5491},[5437,7479,5651],{"class":5447},[5437,7481,6173],{"class":5654},[5437,7483,5575],{"class":5447},[5437,7485,5648],{"class":5491},[5437,7487,5651],{"class":5447},[5437,7489,6868],{"class":5654},[5437,7491,5575],{"class":5447},[5437,7493,6186],{"class":5491},[5437,7495,5651],{"class":5447},[5437,7497,5609],{"class":5504},[5437,7499,6193],{"class":5447},[5437,7501,7502,7504,7506,7508,7510,7512,7514,7516,7518,7520,7522,7524],{"class":5439,"line":6278},[5437,7503,6199],{"class":5491},[5437,7505,5651],{"class":5447},[5437,7507,5879],{"class":5504},[5437,7509,5575],{"class":5447},[5437,7511,5648],{"class":5491},[5437,7513,5651],{"class":5447},[5437,7515,7105],{"class":5654},[5437,7517,5575],{"class":5447},[5437,7519,5859],{"class":5491},[5437,7521,5651],{"class":5447},[5437,7523,5864],{"class":5654},[5437,7525,7526],{"class":5447},",\n",[5437,7528,7529,7532,7534,7536,7538,7541,7543,7546,7548,7551,7553,7556,7558,7561,7563,7565],{"class":5439,"line":6308},[5437,7530,7531],{"class":5491},"             bbox",[5437,7533,5651],{"class":5447},[5437,7535,6163],{"class":6162},[5437,7537,5488],{"class":5447},[5437,7539,7540],{"class":5491},"boxstyle",[5437,7542,5651],{"class":5447},[5437,7544,7545],{"class":5654},"'round,pad=0.5'",[5437,7547,5575],{"class":5447},[5437,7549,7550],{"class":5491},"facecolor",[5437,7552,5651],{"class":5447},[5437,7554,7555],{"class":5654},"'#d1fae5'",[5437,7557,5575],{"class":5447},[5437,7559,7560],{"class":5491},"edgecolor",[5437,7562,5651],{"class":5447},[5437,7564,6868],{"class":5654},[5437,7566,5628],{"class":5447},[5437,7568,7569],{"class":5439,"line":6362},[5437,7570,5474],{"emptyLinePlaceholder":5473},[5437,7572,7573],{"class":5439,"line":6408},[5437,7574,6523],{"class":5447},[5437,7576,7577],{"class":5439,"line":6413},[5437,7578,6529],{"class":5447},[6531,7580,7581],{"v-slot:output":5432},[6534,7582],{"alt":7583,"className":7584,"src":7585},"Функція ReLU та її похідна: демонстрація відсутності проблеми зникаючих градієнтів",[6538],"\u002Fimages\u002Fai-python\u002Factivation-functions-heart-disease\u002Fheart-disease-prediction\u002F02.png",[5191,7587,7588],{},[5195,7589,7590],{},"Ключові переваги ReLU:",[5236,7592,7593,7606,7618],{},[5239,7594,7597,7598,7601,7602,7605],{"icon":7595,"title":7596},"i-lucide-trending-up","✅ Градієнт = 1 для активних нейронів","Для ",[5323,7599],{"tex":7600,":inline":5332},"z > 0"," похідна дорівнює 1. Це означає, що градієнт ",[5195,7603,7604],{},"проходить без зменшення"," через активовані нейрони. Немає зникаючих градієнтів!",[5239,7607,7609,7610,7613,7614,7617],{"icon":92,"title":7608},"✅ Обчислювальна ефективність","Немає експонент, тригонометрії чи ділення. Лише одна операція порівняння ",[5434,7611,7612],{},"max(0, z)",". Швидше у ",[5195,7615,7616],{},"6–10 разів"," за сигмоїду\u002Ftanh.",[5239,7619,7621,7622,7625],{"icon":943,"title":7620},"✅ Розріджена активація","Приблизно 50% нейронів виводять нуль для випадкового входу. Це створює ",[5195,7623,7624],{},"sparse representations"," — мережа стає більш інтерпретованою та стійкою до шуму.",[5191,7627,7628],{},[5195,7629,7630],{},"Проблема: \"мертві нейрони\" (Dying ReLU):",[5191,7632,7633],{},"Якщо нейрон постійно отримує від'ємні входи, то:",[5217,7635,7636,7639,7642,7645],{},[5220,7637,7638],{},"Вихід завжди 0",[5220,7640,7641],{},"Градієнт завжди 0",[5220,7643,7644],{},"Ваги не оновлюються",[5220,7646,7647,7648],{},"Нейрон ",[5195,7649,7650],{},"назавжди \"вмирає\"",[5191,7652,7653],{},"Це відбувається при:",[5244,7655,7656,7659,7662],{},[5220,7657,7658],{},"Занадто високому learning rate (ваги «перестрибують» у від'ємну зону)",[5220,7660,7661],{},"Поганій ініціалізації ваг",[5220,7663,7664],{},"Дуже великих від'ємних bias",[5345,7666,7667,7672],{},[5191,7668,7669],{},[5195,7670,7671],{},"Як запобігти \"мертвим нейронам\":",[5217,7673,7674,7695,7701],{},[5220,7675,7676,7679,7680,7683,7684,7687,7690,7691,7694],{},[5195,7677,7678],{},"Правильна ініціалізація ваг:"," використовуйте ",[5195,7681,7682],{},"He initialization"," (розроблено спеціально для ReLU):",[5323,7685,7686],{},"W \\sim \\mathcal{N}\\left(0, \\sqrt{\\frac{2}{n_{\\text{in}}}}\\right)",[7688,7689],"br",{},"де ",[5323,7692],{"tex":7693,":inline":5332},"n_{\\text{in}}"," — кількість вхідних нейронів.",[5220,7696,7697,7700],{},[5195,7698,7699],{},"Помірний learning rate:"," для Adam рекомендовано 0.001–0.01.",[5220,7702,7703,7706],{},[5195,7704,7705],{},"Leaky ReLU або ELU:"," варіанти ReLU, які не обнулюють градієнт для від'ємних значень.",[5297,7708],{},[5311,7710,7712],{"id":7711},"leaky-relu-вирішення-проблеми-мертвих-нейронів","Leaky ReLU — вирішення проблеми мертвих нейронів",[5191,7714,7715],{},[5195,7716,5382],{},[5323,7718],{"tex":7719},"\\text{Leaky ReLU}(z) = \\max(\\alpha z, z), \\quad \\text{де } \\alpha = 0.01",[5191,7721,7722],{},"Або еквівалентно:",[5323,7724,7725],{},"\\text{Leaky ReLU}(z) = \\begin{cases}\nz, & \\text{якщо } z > 0 \\\n\\alpha z, & \\text{якщо } z \\leq 0\n\\end{cases}",[5191,7727,7728],{},[5195,7729,5390],{},[5323,7731,7732],{},"\\text{Leaky ReLU}'(z) = \\begin{cases}\n1, & \\text{якщо } z > 0 \\\n\\alpha, & \\text{якщо } z \\leq 0\n\\end{cases}",[5191,7734,7735,7738,7739,7742,7743,7746],{},[5195,7736,7737],{},"Ключова відмінність:"," для від'ємних значень градієнт не нульовий, а дорівнює ",[5323,7740],{"tex":7741,":inline":5332},"\\alpha"," (зазвичай 0.01). Це дозволяє нейрону ",[5195,7744,7745],{},"продовжувати навчатися",", навіть якщо він тимчасово потрапив у від'ємну зону.",[5417,7748,7750],{"kernel":5419,"title":7749},"leaky_relu_comparison.ipynb",[5422,7751,7753,8447],{"execution-count":5665,"execution-time":7752},"0.27s",[5427,7754,7756],{"className":5429,"code":7755,"language":5431,"meta":5432,"style":5432},"import numpy as np\nimport matplotlib.pyplot as plt\n\ndef relu(z):\n    return np.maximum(0, z)\n\ndef leaky_relu(z, alpha=0.01):\n    return np.where(z > 0, z, alpha * z)\n\nz = np.linspace(-5, 5, 500)\n\nplt.figure(figsize=(12, 7))\nplt.plot(z, relu(z), color='#10b981', linewidth=3, label='ReLU', linestyle='--', alpha=0.7)\nplt.plot(z, leaky_relu(z), color='#f59e0b', linewidth=3, label='Leaky ReLU (α=0.01)')\n\nplt.axhline(0, color='gray', linestyle='--', alpha=0.3)\nplt.axvline(0, color='gray', linestyle='--', alpha=0.3)\nplt.grid(alpha=0.3)\n\n# Позначення відмінностей\nplt.fill_between(z[z \u003C 0], 0, leaky_relu(z)[z \u003C 0], alpha=0.3, color='#f59e0b', \n                 label='Зона відновлення (α·z)')\nplt.annotate('ReLU: градієнт = 0\\n(нейрон \"вмирає\")', \n             xy=(-3, 0), xytext=(-4, 1.5),\n             arrowprops=dict(arrowstyle='->', color='#6b7280', lw=2),\n             fontsize=11, color='#6b7280', fontweight='bold')\nplt.annotate('Leaky ReLU: градієнт = 0.01\\n(нейрон продовжує навчатися)', \n             xy=(-3, -0.03), xytext=(-4, -2),\n             arrowprops=dict(arrowstyle='->', color='#f59e0b', lw=2),\n             fontsize=11, color='#d97706', fontweight='bold',\n             bbox=dict(boxstyle='round,pad=0.5', facecolor='#fef3c7', edgecolor='#f59e0b'))\n\nplt.xlabel('z', fontsize=14)\nplt.ylabel('Активація', fontsize=14)\nplt.title('Порівняння ReLU та Leaky ReLU', fontsize=16, fontweight='bold')\nplt.legend(fontsize=12, loc='upper left')\nplt.ylim(-0.3, 5)\nplt.tight_layout()\nplt.show()\n",[5434,7757,7758,7768,7778,7782,7794,7804,7808,7830,7841,7845,7861,7865,7883,7930,7960,7964,7997,8030,8043,8047,8052,8086,8098,8113,8142,8176,8202,8216,8243,8277,8304,8339,8343,8360,8378,8404,8426,8439,8443],{"__ignoreMap":5432},[5437,7759,7760,7762,7764,7766],{"class":5439,"line":5440},[5437,7761,5444],{"class":5443},[5437,7763,5448],{"class":5447},[5437,7765,5451],{"class":5443},[5437,7767,5454],{"class":5447},[5437,7769,7770,7772,7774,7776],{"class":5439,"line":5457},[5437,7771,5444],{"class":5443},[5437,7773,5462],{"class":5447},[5437,7775,5451],{"class":5443},[5437,7777,5467],{"class":5447},[5437,7779,7780],{"class":5439,"line":5470},[5437,7781,5474],{"emptyLinePlaceholder":5473},[5437,7783,7784,7786,7788,7790,7792],{"class":5439,"line":5477},[5437,7785,5481],{"class":5480},[5437,7787,6745],{"class":5484},[5437,7789,5488],{"class":5447},[5437,7791,5492],{"class":5491},[5437,7793,5495],{"class":5447},[5437,7795,7796,7798,7800,7802],{"class":5439,"line":5498},[5437,7797,5501],{"class":5443},[5437,7799,6758],{"class":5447},[5437,7801,5686],{"class":5504},[5437,7803,6763],{"class":5447},[5437,7805,7806],{"class":5439,"line":5516},[5437,7807,5474],{"emptyLinePlaceholder":5473},[5437,7809,7810,7812,7815,7817,7819,7821,7823,7825,7828],{"class":5439,"line":5521},[5437,7811,5481],{"class":5480},[5437,7813,7814],{"class":5484}," leaky_relu",[5437,7816,5488],{"class":5447},[5437,7818,5492],{"class":5491},[5437,7820,5575],{"class":5447},[5437,7822,5710],{"class":5491},[5437,7824,5651],{"class":5447},[5437,7826,7827],{"class":5504},"0.01",[5437,7829,5495],{"class":5447},[5437,7831,7832,7834,7836,7838],{"class":5439,"line":5535},[5437,7833,5501],{"class":5443},[5437,7835,6787],{"class":5447},[5437,7837,5686],{"class":5504},[5437,7839,7840],{"class":5447},", z, alpha * z)\n",[5437,7842,7843],{"class":5439,"line":5541},[5437,7844,5474],{"emptyLinePlaceholder":5473},[5437,7846,7847,7849,7851,7853,7855,7857,7859],{"class":5439,"line":5554},[5437,7848,5569],{"class":5447},[5437,7850,6246],{"class":5504},[5437,7852,5575],{"class":5447},[5437,7854,6246],{"class":5504},[5437,7856,5575],{"class":5447},[5437,7858,5582],{"class":5504},[5437,7860,5585],{"class":5447},[5437,7862,7863],{"class":5439,"line":5559},[5437,7864,5474],{"emptyLinePlaceholder":5473},[5437,7866,7867,7870,7872,7874,7876,7878,7881],{"class":5439,"line":5566},[5437,7868,7869],{"class":5447},"plt.figure(",[5437,7871,5614],{"class":5491},[5437,7873,5617],{"class":5447},[5437,7875,5879],{"class":5504},[5437,7877,5575],{"class":5447},[5437,7879,7880],{"class":5504},"7",[5437,7882,5628],{"class":5447},[5437,7884,7885,7888,7890,7892,7894,7896,7898,7900,7902,7904,7906,7908,7911,7913,7915,7917,7919,7921,7923,7925,7928],{"class":5439,"line":5588},[5437,7886,7887],{"class":5447},"plt.plot(z, relu(z), ",[5437,7889,5648],{"class":5491},[5437,7891,5651],{"class":5447},[5437,7893,6868],{"class":5654},[5437,7895,5575],{"class":5447},[5437,7897,5660],{"class":5491},[5437,7899,5651],{"class":5447},[5437,7901,5665],{"class":5504},[5437,7903,5575],{"class":5447},[5437,7905,5670],{"class":5491},[5437,7907,5651],{"class":5447},[5437,7909,7910],{"class":5654},"'ReLU'",[5437,7912,5575],{"class":5447},[5437,7914,5700],{"class":5491},[5437,7916,5651],{"class":5447},[5437,7918,5705],{"class":5654},[5437,7920,5575],{"class":5447},[5437,7922,5710],{"class":5491},[5437,7924,5651],{"class":5447},[5437,7926,7927],{"class":5504},"0.7",[5437,7929,5585],{"class":5447},[5437,7931,7932,7935,7937,7939,7941,7943,7945,7947,7949,7951,7953,7955,7958],{"class":5439,"line":5593},[5437,7933,7934],{"class":5447},"plt.plot(z, leaky_relu(z), ",[5437,7936,5648],{"class":5491},[5437,7938,5651],{"class":5447},[5437,7940,7184],{"class":5654},[5437,7942,5575],{"class":5447},[5437,7944,5660],{"class":5491},[5437,7946,5651],{"class":5447},[5437,7948,5665],{"class":5504},[5437,7950,5575],{"class":5447},[5437,7952,5670],{"class":5491},[5437,7954,5651],{"class":5447},[5437,7956,7957],{"class":5654},"'Leaky ReLU (α=0.01)'",[5437,7959,5585],{"class":5447},[5437,7961,7962],{"class":5439,"line":5599},[5437,7963,5474],{"emptyLinePlaceholder":5473},[5437,7965,7966,7969,7971,7973,7975,7977,7979,7981,7983,7985,7987,7989,7991,7993,7995],{"class":5439,"line":5631},[5437,7967,7968],{"class":5447},"plt.axhline(",[5437,7970,5686],{"class":5504},[5437,7972,5575],{"class":5447},[5437,7974,5648],{"class":5491},[5437,7976,5651],{"class":5447},[5437,7978,5695],{"class":5654},[5437,7980,5575],{"class":5447},[5437,7982,5700],{"class":5491},[5437,7984,5651],{"class":5447},[5437,7986,5705],{"class":5654},[5437,7988,5575],{"class":5447},[5437,7990,5710],{"class":5491},[5437,7992,5651],{"class":5447},[5437,7994,5715],{"class":5504},[5437,7996,5585],{"class":5447},[5437,7998,7999,8002,8004,8006,8008,8010,8012,8014,8016,8018,8020,8022,8024,8026,8028],{"class":5439,"line":5636},[5437,8000,8001],{"class":5447},"plt.axvline(",[5437,8003,5686],{"class":5504},[5437,8005,5575],{"class":5447},[5437,8007,5648],{"class":5491},[5437,8009,5651],{"class":5447},[5437,8011,5695],{"class":5654},[5437,8013,5575],{"class":5447},[5437,8015,5700],{"class":5491},[5437,8017,5651],{"class":5447},[5437,8019,5705],{"class":5654},[5437,8021,5575],{"class":5447},[5437,8023,5710],{"class":5491},[5437,8025,5651],{"class":5447},[5437,8027,5715],{"class":5504},[5437,8029,5585],{"class":5447},[5437,8031,8032,8035,8037,8039,8041],{"class":5439,"line":5642},[5437,8033,8034],{"class":5447},"plt.grid(",[5437,8036,5710],{"class":5491},[5437,8038,5651],{"class":5447},[5437,8040,5715],{"class":5504},[5437,8042,5585],{"class":5447},[5437,8044,8045],{"class":5439,"line":5680},[5437,8046,5474],{"emptyLinePlaceholder":5473},[5437,8048,8049],{"class":5439,"line":5720},[5437,8050,8051],{"class":5562},"# Позначення відмінностей\n",[5437,8053,8054,8057,8059,8061,8063,8066,8068,8070,8072,8074,8076,8078,8080,8082,8084],{"class":5439,"line":5753},[5437,8055,8056],{"class":5447},"plt.fill_between(z[z \u003C ",[5437,8058,5686],{"class":5504},[5437,8060,7042],{"class":5447},[5437,8062,5686],{"class":5504},[5437,8064,8065],{"class":5447},", leaky_relu(z)[z \u003C ",[5437,8067,5686],{"class":5504},[5437,8069,7042],{"class":5447},[5437,8071,5710],{"class":5491},[5437,8073,5651],{"class":5447},[5437,8075,5715],{"class":5504},[5437,8077,5575],{"class":5447},[5437,8079,5648],{"class":5491},[5437,8081,5651],{"class":5447},[5437,8083,7184],{"class":5654},[5437,8085,7436],{"class":5447},[5437,8087,8088,8091,8093,8096],{"class":5439,"line":5787},[5437,8089,8090],{"class":5491},"                 label",[5437,8092,5651],{"class":5447},[5437,8094,8095],{"class":5654},"'Зона відновлення (α·z)'",[5437,8097,5585],{"class":5447},[5437,8099,8100,8103,8106,8108,8111],{"class":5439,"line":5801},[5437,8101,8102],{"class":5447},"plt.annotate(",[5437,8104,8105],{"class":5654},"'ReLU: градієнт = 0",[5437,8107,6126],{"class":6088},[5437,8109,8110],{"class":5654},"(нейрон \"вмирає\")'",[5437,8112,7436],{"class":5447},[5437,8114,8115,8117,8120,8122,8124,8126,8128,8130,8132,8135,8137,8140],{"class":5439,"line":5822},[5437,8116,7441],{"class":5491},[5437,8118,8119],{"class":5447},"=(-",[5437,8121,5665],{"class":5504},[5437,8123,5575],{"class":5447},[5437,8125,5686],{"class":5504},[5437,8127,7452],{"class":5447},[5437,8129,6144],{"class":5491},[5437,8131,8119],{"class":5447},[5437,8133,8134],{"class":5504},"4",[5437,8136,5575],{"class":5447},[5437,8138,8139],{"class":5504},"1.5",[5437,8141,6193],{"class":5447},[5437,8143,8144,8146,8148,8150,8152,8154,8156,8158,8160,8162,8164,8166,8168,8170,8172,8174],{"class":5439,"line":5840},[5437,8145,6157],{"class":5491},[5437,8147,5651],{"class":5447},[5437,8149,6163],{"class":6162},[5437,8151,5488],{"class":5447},[5437,8153,6168],{"class":5491},[5437,8155,5651],{"class":5447},[5437,8157,6173],{"class":5654},[5437,8159,5575],{"class":5447},[5437,8161,5648],{"class":5491},[5437,8163,5651],{"class":5447},[5437,8165,7153],{"class":5654},[5437,8167,5575],{"class":5447},[5437,8169,6186],{"class":5491},[5437,8171,5651],{"class":5447},[5437,8173,5609],{"class":5504},[5437,8175,6193],{"class":5447},[5437,8177,8178,8180,8182,8184,8186,8188,8190,8192,8194,8196,8198,8200],{"class":5439,"line":5869},[5437,8179,6199],{"class":5491},[5437,8181,5651],{"class":5447},[5437,8183,6337],{"class":5504},[5437,8185,5575],{"class":5447},[5437,8187,5648],{"class":5491},[5437,8189,5651],{"class":5447},[5437,8191,7153],{"class":5654},[5437,8193,5575],{"class":5447},[5437,8195,5859],{"class":5491},[5437,8197,5651],{"class":5447},[5437,8199,5864],{"class":5654},[5437,8201,5585],{"class":5447},[5437,8203,8204,8206,8209,8211,8214],{"class":5439,"line":5884},[5437,8205,8102],{"class":5447},[5437,8207,8208],{"class":5654},"'Leaky ReLU: градієнт = 0.01",[5437,8210,6126],{"class":6088},[5437,8212,8213],{"class":5654},"(нейрон продовжує навчатися)'",[5437,8215,7436],{"class":5447},[5437,8217,8218,8220,8222,8224,8226,8229,8231,8233,8235,8237,8239,8241],{"class":5439,"line":5889},[5437,8219,7441],{"class":5491},[5437,8221,8119],{"class":5447},[5437,8223,5665],{"class":5504},[5437,8225,6243],{"class":5447},[5437,8227,8228],{"class":5504},"0.03",[5437,8230,7452],{"class":5447},[5437,8232,6144],{"class":5491},[5437,8234,8119],{"class":5447},[5437,8236,8134],{"class":5504},[5437,8238,6243],{"class":5447},[5437,8240,5609],{"class":5504},[5437,8242,6193],{"class":5447},[5437,8244,8245,8247,8249,8251,8253,8255,8257,8259,8261,8263,8265,8267,8269,8271,8273,8275],{"class":5439,"line":5895},[5437,8246,6157],{"class":5491},[5437,8248,5651],{"class":5447},[5437,8250,6163],{"class":6162},[5437,8252,5488],{"class":5447},[5437,8254,6168],{"class":5491},[5437,8256,5651],{"class":5447},[5437,8258,6173],{"class":5654},[5437,8260,5575],{"class":5447},[5437,8262,5648],{"class":5491},[5437,8264,5651],{"class":5447},[5437,8266,7184],{"class":5654},[5437,8268,5575],{"class":5447},[5437,8270,6186],{"class":5491},[5437,8272,5651],{"class":5447},[5437,8274,5609],{"class":5504},[5437,8276,6193],{"class":5447},[5437,8278,8279,8281,8283,8285,8287,8289,8291,8294,8296,8298,8300,8302],{"class":5439,"line":5927},[5437,8280,6199],{"class":5491},[5437,8282,5651],{"class":5447},[5437,8284,6337],{"class":5504},[5437,8286,5575],{"class":5447},[5437,8288,5648],{"class":5491},[5437,8290,5651],{"class":5447},[5437,8292,8293],{"class":5654},"'#d97706'",[5437,8295,5575],{"class":5447},[5437,8297,5859],{"class":5491},[5437,8299,5651],{"class":5447},[5437,8301,5864],{"class":5654},[5437,8303,7526],{"class":5447},[5437,8305,8306,8308,8310,8312,8314,8316,8318,8320,8322,8324,8326,8329,8331,8333,8335,8337],{"class":5439,"line":5961},[5437,8307,7531],{"class":5491},[5437,8309,5651],{"class":5447},[5437,8311,6163],{"class":6162},[5437,8313,5488],{"class":5447},[5437,8315,7540],{"class":5491},[5437,8317,5651],{"class":5447},[5437,8319,7545],{"class":5654},[5437,8321,5575],{"class":5447},[5437,8323,7550],{"class":5491},[5437,8325,5651],{"class":5447},[5437,8327,8328],{"class":5654},"'#fef3c7'",[5437,8330,5575],{"class":5447},[5437,8332,7560],{"class":5491},[5437,8334,5651],{"class":5447},[5437,8336,7184],{"class":5654},[5437,8338,5628],{"class":5447},[5437,8340,8341],{"class":5439,"line":5995},[5437,8342,5474],{"emptyLinePlaceholder":5473},[5437,8344,8345,8348,8350,8352,8354,8356,8358],{"class":5439,"line":6023},[5437,8346,8347],{"class":5447},"plt.xlabel(",[5437,8349,5807],{"class":5654},[5437,8351,5575],{"class":5447},[5437,8353,5812],{"class":5491},[5437,8355,5651],{"class":5447},[5437,8357,5817],{"class":5504},[5437,8359,5585],{"class":5447},[5437,8361,8362,8365,8368,8370,8372,8374,8376],{"class":5439,"line":6028},[5437,8363,8364],{"class":5447},"plt.ylabel(",[5437,8366,8367],{"class":5654},"'Активація'",[5437,8369,5575],{"class":5447},[5437,8371,5812],{"class":5491},[5437,8373,5651],{"class":5447},[5437,8375,5817],{"class":5504},[5437,8377,5585],{"class":5447},[5437,8379,8380,8383,8386,8388,8390,8392,8394,8396,8398,8400,8402],{"class":5439,"line":6034},[5437,8381,8382],{"class":5447},"plt.title(",[5437,8384,8385],{"class":5654},"'Порівняння ReLU та Leaky ReLU'",[5437,8387,5575],{"class":5447},[5437,8389,5812],{"class":5491},[5437,8391,5651],{"class":5447},[5437,8393,5620],{"class":5504},[5437,8395,5575],{"class":5447},[5437,8397,5859],{"class":5491},[5437,8399,5651],{"class":5447},[5437,8401,5864],{"class":5654},[5437,8403,5585],{"class":5447},[5437,8405,8406,8409,8411,8413,8415,8417,8419,8421,8424],{"class":5439,"line":6044},[5437,8407,8408],{"class":5447},"plt.legend(",[5437,8410,5812],{"class":5491},[5437,8412,5651],{"class":5447},[5437,8414,5879],{"class":5504},[5437,8416,5575],{"class":5447},[5437,8418,6505],{"class":5491},[5437,8420,5651],{"class":5447},[5437,8422,8423],{"class":5654},"'upper left'",[5437,8425,5585],{"class":5447},[5437,8427,8428,8431,8433,8435,8437],{"class":5439,"line":6109},[5437,8429,8430],{"class":5447},"plt.ylim(-",[5437,8432,5715],{"class":5504},[5437,8434,5575],{"class":5447},[5437,8436,6246],{"class":5504},[5437,8438,5585],{"class":5447},[5437,8440,8441],{"class":5439,"line":6154},[5437,8442,6523],{"class":5447},[5437,8444,8445],{"class":5439,"line":6196},[5437,8446,6529],{"class":5447},[6531,8448,8449],{"v-slot:output":5432},[6534,8450],{"alt":8451,"className":8452,"src":8453},"Порівняння ReLU та Leaky ReLU: розв'язання проблеми мертвих нейронів",[6538],"\u002Fimages\u002Fai-python\u002Factivation-functions-heart-disease\u002Fheart-disease-prediction\u002F03.png",[6660,8455,8456,8461,8464,8479],{},[5191,8457,8458],{},[5195,8459,8460],{},"Коли використовувати Leaky ReLU:",[5191,8462,8463],{},"Якщо під час навчання ви спостерігаєте:",[5244,8465,8466,8469,8476],{},[5220,8467,8468],{},"Стагнацію loss після кількох епох",[5220,8470,8471,8472,8475],{},"Велику кількість нейронів із нульовою активацією (можна перевірити через ",[5434,8473,8474],{},".weight.grad",")",[5220,8477,8478],{},"Втрату якості при збільшенні кількості шарів",[5191,8480,8481],{},"Спробуйте замінити ReLU на Leaky ReLU. Емпірично це покращує збіжність у 10–15% випадків.",[5297,8483],{},[5311,8485,8487],{"id":8486},"порівняльна-таблиця-функцій-активації-та-їхніх-похідних","Порівняльна таблиця функцій активації та їхніх похідних",[8489,8490,8491,8521],"table",{},[8492,8493,8494],"thead",{},[8495,8496,8497,8502,8505,8508,8512,8515,8518],"tr",{},[8498,8499,8501],"th",{"align":8500},"left","Функція",[8498,8503,8504],{"align":8500},"Формула",[8498,8506,8507],{"align":8500},"Похідна",[8498,8509,8511],{"align":8510},"center","Максимум похідної",[8498,8513,8514],{"align":8510},"Зникаючі градієнти",[8498,8516,8517],{"align":8510},"Мертві нейрони",[8498,8519,8520],{"align":8500},"Рекомендація",[8522,8523,8524,8554,8581,8607],"tbody",{},[8495,8525,8526,8532,8537,8542,8545,8548,8551],{},[8527,8528,8529],"td",{"align":8500},[5195,8530,8531],{},"Sigmoid",[8527,8533,8534],{"align":8500},[5323,8535],{"tex":8536,":inline":5332},"\\frac{1}{1+e^{-z}}",[8527,8538,8539],{"align":8500},[5323,8540],{"tex":8541,":inline":5332},"\\sigma(1-\\sigma)",[8527,8543,8544],{"align":8510},"0.25",[8527,8546,8547],{"align":8510},"✅ Так",[8527,8549,8550],{"align":8510},"❌ Ні",[8527,8552,8553],{"align":8500},"Лише вихідний шар (бінарна)",[8495,8555,8556,8561,8566,8571,8574,8576,8578],{},[8527,8557,8558],{"align":8500},[5195,8559,8560],{},"Tanh",[8527,8562,8563],{"align":8500},[5323,8564],{"tex":8565,":inline":5332},"\\frac{e^z-e^{-z}}{e^z+e^{-z}}",[8527,8567,8568],{"align":8500},[5323,8569],{"tex":8570,":inline":5332},"1-\\tanh^2",[8527,8572,8573],{"align":8510},"1.0",[8527,8575,8547],{"align":8510},[8527,8577,8550],{"align":8510},[8527,8579,8580],{"align":8500},"RNN, неглибокі мережі",[8495,8582,8583,8588,8593,8598,8600,8602,8604],{},[8527,8584,8585],{"align":8500},[5195,8586,8587],{},"ReLU",[8527,8589,8590],{"align":8500},[5323,8591],{"tex":8592,":inline":5332},"\\max(0,z)",[8527,8594,8595],{"align":8500},[5323,8596],{"tex":8597,":inline":5332},"[z>0]",[8527,8599,8573],{"align":8510},[8527,8601,8550],{"align":8510},[8527,8603,8547],{"align":8510},[8527,8605,8606],{"align":8500},"За замовчуванням (приховані)",[8495,8608,8609,8614,8619,8624,8626,8628,8630],{},[8527,8610,8611],{"align":8500},[5195,8612,8613],{},"Leaky ReLU",[8527,8615,8616],{"align":8500},[5323,8617],{"tex":8618,":inline":5332},"\\max(0.01z, z)",[8527,8620,8621],{"align":8500},[5323,8622],{"tex":8623,":inline":5332},"[z>0] + 0.01[z\\leq0]",[8527,8625,8573],{"align":8510},[8527,8627,8550],{"align":8510},[8527,8629,8550],{"align":8510},[8527,8631,8632],{"align":8500},"Альтернатива ReLU",[6660,8634,8635,8640,8660],{},[5191,8636,8637],{},[5195,8638,8639],{},"Емпіричне правило вибору функції активації для нашої задачі серцевих захворювань:",[5217,8641,8642,8648,8654],{},[5220,8643,8644,8647],{},[5195,8645,8646],{},"Приховані шари:"," ReLU (стандарт для глибоких мереж)",[5220,8649,8650,8653],{},[5195,8651,8652],{},"Вихідний шар:"," Sigmoid (бінарна класифікація: хвороба є\u002Fнемає)",[5220,8655,8656,8659],{},[5195,8657,8658],{},"Якщо виникають проблеми з ReLU:"," спробувати Leaky ReLU з α=0.01",[5191,8661,8662],{},"Саме цю конфігурацію ми використаємо при побудові нашої моделі.",[5297,8664],{},[5186,8666,8668],{"id":8667},"вибір-датасету-для-практики-огляд-можливостей","Вибір датасету для практики — огляд можливостей",[5191,8670,8671],{},"Тепер, коли ми розуміємо математику функцій активації, перейдемо до практики. Для навчання нейронних мереж бінарної класифікації існує безліч датасетів із різних галузей. Розглянемо найпопулярніші варіанти, перш ніж зануритися у наш основний приклад.",[5311,8673,8675],{"id":8674},"популярні-датасети-для-бінарної-класифікації","Популярні датасети для бінарної класифікації",[5236,8677,8678,8734,8785,8821],{},[5239,8679,8682,8688,8699,8704,8718,8723],{"icon":8680,"title":8681},"i-lucide-heart-pulse","🏥 Медицина та охорона здоров'я",[5191,8683,8684,8687],{},[5195,8685,8686],{},"UCI Heart Disease"," (наш вибір)",[5244,8689,8690,8693,8696],{},[5220,8691,8692],{},"303 пацієнти, 13 клінічних ознак",[5220,8694,8695],{},"Передбачення серцево-судинних захворювань",[5220,8697,8698],{},"Збалансований датасет (54% \u002F 46%)",[5191,8700,8701],{},[5195,8702,8703],{},"Diabetes Dataset (Pima Indians)",[5244,8705,8706,8709,8712],{},[5220,8707,8708],{},"768 жінок, 8 ознак (вік, BMI, глюкоза, інсулін)",[5220,8710,8711],{},"Передбачення діабету 2-го типу",[5220,8713,8714,8715],{},"Є у sklearn: ",[5434,8716,8717],{},"load_diabetes()",[5191,8719,8720],{},[5195,8721,8722],{},"Breast Cancer Wisconsin",[5244,8724,8725,8728,8731],{},[5220,8726,8727],{},"569 пацієнтів, 30 ознак (радіус, текстура, периметр клітин)",[5220,8729,8730],{},"Діагностика раку грудей (доброякісна\u002Fзлоякісна пухлина)",[5220,8732,8733],{},"Висока точність досяжна (97-98%)",[5239,8735,8737,8742,8753,8758,8769,8774],{"icon":7595,"title":8736},"💰 Фінанси та бізнес",[5191,8738,8739],{},[5195,8740,8741],{},"Credit Card Fraud Detection",[5244,8743,8744,8747,8750],{},[5220,8745,8746],{},"284,807 транзакцій, 30 анонімізованих ознак",[5220,8748,8749],{},"Виявлення шахрайських операцій",[5220,8751,8752],{},"Екстремальний дисбаланс (0.17% fraud)",[5191,8754,8755],{},[5195,8756,8757],{},"Bank Customer Churn",[5244,8759,8760,8763,8766],{},[5220,8761,8762],{},"10,000 клієнтів, 14 ознак (баланс, кредитний рейтинг, кількість продуктів)",[5220,8764,8765],{},"Передбачення відтоку клієнтів банку",[5220,8767,8768],{},"Практика роботи з категоріальними змінними",[5191,8770,8771],{},[5195,8772,8773],{},"Employee Attrition (HR Analytics)",[5244,8775,8776,8779,8782],{},[5220,8777,8778],{},"1,470 працівників, 35 ознак (зарплата, задоволеність, переробки)",[5220,8780,8781],{},"Передбачення звільнення співробітників",[5220,8783,8784],{},"HR-кейс із високою бізнес-цінністю",[5239,8786,8789,8794,8805,8810],{"icon":8787,"title":8788},"i-lucide-graduation-cap","🎓 Освіта та соціальні науки",[5191,8790,8791],{},[5195,8792,8793],{},"Student Performance Prediction",[5244,8795,8796,8799,8802],{},[5220,8797,8798],{},"649 студентів, 30+ ознак (відвідуваність, попередні оцінки, освіта батьків)",[5220,8800,8801],{},"Передбачення успішності на іспиті (склав\u002Fне склав)",[5220,8803,8804],{},"Близька тема для студентів (додатковий приклад у цій статті ↓)",[5191,8806,8807],{},[5195,8808,8809],{},"Titanic Survival",[5244,8811,8812,8815,8818],{},[5220,8813,8814],{},"891 пасажир, 11 ознак (клас каюти, стать, вік, ціна квитка)",[5220,8816,8817],{},"Класичний Kaggle competition",[5220,8819,8820],{},"Історична тема, практика роботи з пропусками",[5239,8822,8825,8830,8841,8846],{"icon":8823,"title":8824},"i-lucide-leaf","🌍 Екологія та промисловість",[5191,8826,8827],{},[5195,8828,8829],{},"Water Quality Prediction",[5244,8831,8832,8835,8838],{},[5220,8833,8834],{},"3,276 зразків, 9 хімічних показників (pH, твердість, сульфати)",[5220,8836,8837],{},"Визначення придатності води для пиття",[5220,8839,8840],{},"Актуальна екологічна тема",[5191,8842,8843],{},[5195,8844,8845],{},"Predictive Maintenance (NASA Turbofan)",[5244,8847,8848,8851,8854],{},[5220,8849,8850],{},"Сенсорні дані з 21 датчика авіаційних двигунів",[5220,8852,8853],{},"Передбачення відмови двигуна",[5220,8855,8856],{},"Критична задача для безпеки польотів",[5345,8858,8859,8864,8896],{},[5191,8860,8861],{},[5195,8862,8863],{},"Чому ми обрали UCI Heart Disease як основний приклад:",[5217,8865,8866,8872,8878,8884,8890],{},[5220,8867,8868,8871],{},[5195,8869,8870],{},"Клінічна значущість:"," Серцево-судинні захворювання — причина 31% смертей у світі. Рання діагностика рятує життя.",[5220,8873,8874,8877],{},[5195,8875,8876],{},"Оптимальний розмір:"," 303 зразки — достатньо для навчання MLP, але не надто багато для навчальної демонстрації.",[5220,8879,8880,8883],{},[5195,8881,8882],{},"Збалансованість класів:"," 54% здорових vs 46% хворих — не потрібні техніки oversampling\u002FSMOTE.",[5220,8885,8886,8889],{},[5195,8887,8888],{},"Інтерпретовані ознаки:"," Всі 13 ознак мають чітке медичне значення (не анонімізовані, як у fraud detection).",[5220,8891,8892,8895],{},[5195,8893,8894],{},"Високий потенціал точності:"," AUC 0.90+ досяжна, що дає студентам \"success story\".",[5191,8897,8898,8899,8902,8903,8906],{},"Водночас наприкінці статті ми додамо ",[5195,8900,8901],{},"другий практичний приклад"," із датасетом ",[5195,8904,8905],{},"Student Performance"," — щоб показати універсальність підходу для різних галузей.",[5297,8908],{},[5186,8910,8912],{"id":8911},"датасет-uci-heart-disease-клінічні-дані-для-діагностики","Датасет UCI Heart Disease — клінічні дані для діагностики",[5191,8914,8915,8916,8919],{},"Завантажимо та проаналізуємо ",[5195,8917,8918],{},"UCI Heart Disease Dataset"," — один із найвідоміших медичних датасетів у машинному навчанні.",[5311,8921,8923],{"id":8922},"опис-датасету-та-клінічний-контекст","Опис датасету та клінічний контекст",[5191,8925,8926,8929,8930,8475],{},[5195,8927,8928],{},"Джерело:"," UCI Machine Learning Repository (",[8931,8932,8936],"a",{"href":8933,"rel":8934},"https:\u002F\u002Farchive.ics.uci.edu\u002Fml\u002Fdatasets\u002Fheart+disease",[8935],"nofollow","посилання",[5191,8938,8939,8942],{},[5195,8940,8941],{},"Історія:"," Датасет зібрано у 1988 році в чотирьох медичних закладах:",[5217,8944,8945,8948,8951,8954],{},[5220,8946,8947],{},"Cleveland Clinic Foundation (Огайо, США)",[5220,8949,8950],{},"Hungarian Institute of Cardiology (Будапешт, Угорщина)",[5220,8952,8953],{},"V.A. Medical Center (Лонг-Біч, Каліфорнія)",[5220,8955,8956],{},"University Hospital (Цюрих, Швейцарія)",[5191,8958,8959,8962],{},[5195,8960,8961],{},"Обсяг:"," 303 пацієнти, 14 клінічних ознак.",[5191,8964,8965,8968,8969,5575,8972,8975],{},[5195,8966,8967],{},"Цільова змінна:"," наявність серцево-судинного захворювання (0 = немає, 1–4 = різні ступені). У нашій задачі спростимо до бінарної класифікації: ",[5195,8970,8971],{},"0 = здоровий",[5195,8973,8974],{},"1 = хворий"," (будь-який ступінь).",[5297,8977],{},[5311,8979,8981],{"id":8980},"опис-14-клінічних-ознак","Опис 14 клінічних ознак",[8983,8984,8985,8989,9033,9037,9081,9085,9118,9122],"steps",{},[5311,8986,8988],{"id":8987},"крок-1-демографічні-та-базові-показники","Крок 1: Демографічні та базові показники",[5217,8990,8991,9002,9013],{},[5220,8992,8993,8996,8997],{},[5195,8994,8995],{},"age"," (вік) — вік пацієнта у роках (діапазон: 29–77)",[5244,8998,8999],{},[5220,9000,9001],{},"Фізіологічне значення: з віком зростає ризик атеросклерозу та ослаблення серцевого м'яза",[5220,9003,9004,9007,9008],{},[5195,9005,9006],{},"sex"," (стать) — 1 = чоловік, 0 = жінка",[5244,9009,9010],{},[5220,9011,9012],{},"Клінічний факт: у чоловіків ризик інфаркту вищий у молодому віці; у жінок — після менопаузи",[5220,9014,9015,9018,9019],{},[5195,9016,9017],{},"cp"," (chest pain type) — тип болю в грудях:",[5244,9020,9021,9024,9027,9030],{},[5220,9022,9023],{},"0: Типова стенокардія (typical angina) — біль при фізичному навантаженні",[5220,9025,9026],{},"1: Атипова стенокардія (atypical angina)",[5220,9028,9029],{},"2: Біль, не пов'язаний із серцем (non-anginal pain)",[5220,9031,9032],{},"3: Безсимптомний (asymptomatic)",[5311,9034,9036],{"id":9035},"крок-2-показники-серцево-судинної-системи","Крок 2: Показники серцево-судинної системи",[5217,9038,9039,9053,9067],{"start":5477},[5220,9040,9041,9044,9045],{},[5195,9042,9043],{},"trestbps"," (resting blood pressure) — артеріальний тиск у стані спокою, мм рт. ст.",[5244,9046,9047,9050],{},[5220,9048,9049],{},"Норма: ~120 мм рт. ст.",[5220,9051,9052],{},"Гіпертензія (>140) — фактор ризику інфаркту та інсульту",[5220,9054,9055,9058,9059],{},[5195,9056,9057],{},"chol"," (serum cholesterol) — рівень холестерину в крові, мг\u002Fдл",[5244,9060,9061,9064],{},[5220,9062,9063],{},"Норма: \u003C200 мг\u002Fдл",[5220,9065,9066],{},"Високий холестерин (>240) — накопичення атеросклеротичних бляшок у судинах",[5220,9068,9069,9072,9073],{},[5195,9070,9071],{},"fbs"," (fasting blood sugar > 120 mg\u002Fdl) — підвищений цукор крові натще",[5244,9074,9075,9078],{},[5220,9076,9077],{},"1 = так (>120 мг\u002Fдл), 0 = ні",[5220,9079,9080],{},"Діабет — сильний предиктор серцево-судинних захворювань",[5311,9082,9084],{"id":9083},"крок-3-електрокардіограма-екг","Крок 3: Електрокардіограма (ЕКГ)",[5217,9086,9087,9104],{"start":5521},[5220,9088,9089,9092,9093],{},[5195,9090,9091],{},"restecg"," (resting electrocardiographic results) — результати ЕКГ у стані спокою:",[5244,9094,9095,9098,9101],{},[5220,9096,9097],{},"0: Норма",[5220,9099,9100],{},"1: Аномалія ST-T хвилі (можлива ішемія)",[5220,9102,9103],{},"2: Гіпертрофія лівого шлуночка (ознака хронічного перевантаження серця)",[5220,9105,9106,9109,9110],{},[5195,9107,9108],{},"thalach"," (maximum heart rate achieved) — максимальна частота серцевих скорочень при навантаженні",[5244,9111,9112,9115],{},[5220,9113,9114],{},"Норма: 220 - вік",[5220,9116,9117],{},"Низьке значення може вказувати на слабкість серцевого м'яза",[5311,9119,9121],{"id":9120},"крок-4-стрес-тест-та-ангіографія","Крок 4: Стрес-тест та ангіографія",[5217,9123,9124,9138,9152,9169,9180],{"start":5541},[5220,9125,9126,9129,9130],{},[5195,9127,9128],{},"exang"," (exercise induced angina) — стенокардія, спричинена фізичним навантаженням",[5244,9131,9132,9135],{},[5220,9133,9134],{},"1 = так, 0 = ні",[5220,9136,9137],{},"Сильний маркер ішемічної хвороби серця",[5220,9139,9140,9143,9144],{},[5195,9141,9142],{},"oldpeak"," — депресія сегмента ST на ЕКГ, спричинена фізичним навантаженням (відносно спокою)",[5244,9145,9146,9149],{},[5220,9147,9148],{},"Вимірюється в мм",[5220,9150,9151],{},"Значення >2 мм — ознака серйозної ішемії",[5220,9153,9154,9157,9158],{},[5195,9155,9156],{},"slope"," — нахил піку сегмента ST при навантаженні:",[5244,9159,9160,9163,9166],{},[5220,9161,9162],{},"0: Підйом (upsloping) — норма",[5220,9164,9165],{},"1: Рівний (flat) — можлива ішемія",[5220,9167,9168],{},"2: Спуск (downsloping) — висока ймовірність ішемії",[5220,9170,9171,9174,9175],{},[5195,9172,9173],{},"ca"," (number of major vessels colored by fluoroscopy) — кількість великих судин, виявлених при флюороскопії (0–3)",[5244,9176,9177],{},[5220,9178,9179],{},"Більше судин із звуженням → вищий ризик",[5220,9181,9182,9185,9186],{},[5195,9183,9184],{},"thal"," (thalassemia) — результат таласемії (вроджене захворювання крові):",[5244,9187,9188,9191,9194],{},[5220,9189,9190],{},"1: Норма",[5220,9192,9193],{},"2: Фіксований дефект",[5220,9195,9196],{},"3: Зворотний дефект",[5345,9198,9199,9204,9207,9232],{},[5191,9200,9201],{},[5195,9202,9203],{},"Клінічна інтерпретація ознак:",[5191,9205,9206],{},"Найбільш інформативні ознаки за медичною статистикою:",[5217,9208,9209,9214,9219,9227],{},[5220,9210,9211,9213],{},[5195,9212,9017],{}," (тип болю в грудях) — пряма ознака стенокардії",[5220,9215,9216,9218],{},[5195,9217,9108],{}," (максимальна ЧСС) — показник функціональної резервності серця",[5220,9220,9221,9223,9224,9226],{},[5195,9222,9142],{}," та ",[5195,9225,9156],{}," — об'єктивні показники ішемії при навантаженні",[5220,9228,9229,9231],{},[5195,9230,9173],{}," (кількість уражених судин) — анатомічний маркер атеросклерозу",[5191,9233,9234],{},"Ці ознаки часто використовують кардіологи для прийняття рішення про направлення на коронарографію.",[5297,9236],{},[5311,9238,9240],{"id":9239},"завантаження-та-первинний-аналіз-датасету","Завантаження та первинний аналіз датасету",[5191,9242,9243],{},"Завантажимо датасет із репозиторію UCI та проведемо exploratory data analysis (EDA).",[5417,9245,9247,9809,10387],{"kernel":5419,"title":9246},"heart_disease_eda.ipynb",[5422,9248,9249,9598],{"execution-count":5424},[5427,9250,9252],{"className":5429,"code":9251,"language":5431,"meta":5432,"style":5432},"import pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport seaborn as sns\n\n# Налаштування візуалізації\nsns.set_style(\"whitegrid\")\nplt.rcParams['figure.figsize'] = (14, 6)\nplt.rcParams['font.size'] = 12\n\n# Назви стовпців (не вказані у файлі даних)\ncolumn_names = [\n    'age', 'sex', 'cp', 'trestbps', 'chol', 'fbs', \n    'restecg', 'thalach', 'exang', 'oldpeak', 'slope', \n    'ca', 'thal', 'target'\n]\n\n# Завантаження даних\nurl = 'https:\u002F\u002Farchive.ics.uci.edu\u002Fml\u002Fmachine-learning-databases\u002Fheart-disease\u002Fprocessed.cleveland.data'\ndf = pd.read_csv(url, names=column_names, na_values='?')\n\nprint(\"=\" * 70)\nprint(\"ДАТАСЕТ UCI HEART DISEASE — ОГЛЯД\")\nprint(\"=\" * 70)\nprint(f\"\\nРозмір датасету: {df.shape[0]} пацієнтів × {df.shape[1]} ознак\")\nprint(f\"\\nПерші 5 записів:\")\nprint(df.head())\n",[5434,9253,9254,9266,9276,9286,9298,9302,9307,9317,9336,9349,9353,9358,9363,9395,9422,9437,9442,9446,9451,9459,9480,9484,9502,9513,9527,9574,9591],{"__ignoreMap":5432},[5437,9255,9256,9258,9261,9263],{"class":5439,"line":5440},[5437,9257,5444],{"class":5443},[5437,9259,9260],{"class":5447}," pandas ",[5437,9262,5451],{"class":5443},[5437,9264,9265],{"class":5447}," pd\n",[5437,9267,9268,9270,9272,9274],{"class":5439,"line":5457},[5437,9269,5444],{"class":5443},[5437,9271,5448],{"class":5447},[5437,9273,5451],{"class":5443},[5437,9275,5454],{"class":5447},[5437,9277,9278,9280,9282,9284],{"class":5439,"line":5470},[5437,9279,5444],{"class":5443},[5437,9281,5462],{"class":5447},[5437,9283,5451],{"class":5443},[5437,9285,5467],{"class":5447},[5437,9287,9288,9290,9293,9295],{"class":5439,"line":5477},[5437,9289,5444],{"class":5443},[5437,9291,9292],{"class":5447}," seaborn ",[5437,9294,5451],{"class":5443},[5437,9296,9297],{"class":5447}," sns\n",[5437,9299,9300],{"class":5439,"line":5498},[5437,9301,5474],{"emptyLinePlaceholder":5473},[5437,9303,9304],{"class":5439,"line":5516},[5437,9305,9306],{"class":5562},"# Налаштування візуалізації\n",[5437,9308,9309,9312,9315],{"class":5439,"line":5521},[5437,9310,9311],{"class":5447},"sns.set_style(",[5437,9313,9314],{"class":5654},"\"whitegrid\"",[5437,9316,5585],{"class":5447},[5437,9318,9319,9322,9325,9328,9330,9332,9334],{"class":5439,"line":5535},[5437,9320,9321],{"class":5447},"plt.rcParams[",[5437,9323,9324],{"class":5654},"'figure.figsize'",[5437,9326,9327],{"class":5447},"] = (",[5437,9329,5817],{"class":5504},[5437,9331,5575],{"class":5447},[5437,9333,5625],{"class":5504},[5437,9335,5585],{"class":5447},[5437,9337,9338,9340,9343,9346],{"class":5439,"line":5541},[5437,9339,9321],{"class":5447},[5437,9341,9342],{"class":5654},"'font.size'",[5437,9344,9345],{"class":5447},"] = ",[5437,9347,9348],{"class":5504},"12\n",[5437,9350,9351],{"class":5439,"line":5554},[5437,9352,5474],{"emptyLinePlaceholder":5473},[5437,9354,9355],{"class":5439,"line":5559},[5437,9356,9357],{"class":5562},"# Назви стовпців (не вказані у файлі даних)\n",[5437,9359,9360],{"class":5439,"line":5566},[5437,9361,9362],{"class":5447},"column_names = [\n",[5437,9364,9365,9368,9370,9373,9375,9378,9380,9383,9385,9388,9390,9393],{"class":5439,"line":5588},[5437,9366,9367],{"class":5654},"    'age'",[5437,9369,5575],{"class":5447},[5437,9371,9372],{"class":5654},"'sex'",[5437,9374,5575],{"class":5447},[5437,9376,9377],{"class":5654},"'cp'",[5437,9379,5575],{"class":5447},[5437,9381,9382],{"class":5654},"'trestbps'",[5437,9384,5575],{"class":5447},[5437,9386,9387],{"class":5654},"'chol'",[5437,9389,5575],{"class":5447},[5437,9391,9392],{"class":5654},"'fbs'",[5437,9394,7436],{"class":5447},[5437,9396,9397,9400,9402,9405,9407,9410,9412,9415,9417,9420],{"class":5439,"line":5593},[5437,9398,9399],{"class":5654},"    'restecg'",[5437,9401,5575],{"class":5447},[5437,9403,9404],{"class":5654},"'thalach'",[5437,9406,5575],{"class":5447},[5437,9408,9409],{"class":5654},"'exang'",[5437,9411,5575],{"class":5447},[5437,9413,9414],{"class":5654},"'oldpeak'",[5437,9416,5575],{"class":5447},[5437,9418,9419],{"class":5654},"'slope'",[5437,9421,7436],{"class":5447},[5437,9423,9424,9427,9429,9432,9434],{"class":5439,"line":5599},[5437,9425,9426],{"class":5654},"    'ca'",[5437,9428,5575],{"class":5447},[5437,9430,9431],{"class":5654},"'thal'",[5437,9433,5575],{"class":5447},[5437,9435,9436],{"class":5654},"'target'\n",[5437,9438,9439],{"class":5439,"line":5631},[5437,9440,9441],{"class":5447},"]\n",[5437,9443,9444],{"class":5439,"line":5636},[5437,9445,5474],{"emptyLinePlaceholder":5473},[5437,9447,9448],{"class":5439,"line":5642},[5437,9449,9450],{"class":5562},"# Завантаження даних\n",[5437,9452,9453,9456],{"class":5439,"line":5680},[5437,9454,9455],{"class":5447},"url = ",[5437,9457,9458],{"class":5654},"'https:\u002F\u002Farchive.ics.uci.edu\u002Fml\u002Fmachine-learning-databases\u002Fheart-disease\u002Fprocessed.cleveland.data'\n",[5437,9460,9461,9464,9467,9470,9473,9475,9478],{"class":5439,"line":5720},[5437,9462,9463],{"class":5447},"df = pd.read_csv(url, ",[5437,9465,9466],{"class":5491},"names",[5437,9468,9469],{"class":5447},"=column_names, ",[5437,9471,9472],{"class":5491},"na_values",[5437,9474,5651],{"class":5447},[5437,9476,9477],{"class":5654},"'?'",[5437,9479,5585],{"class":5447},[5437,9481,9482],{"class":5439,"line":5753},[5437,9483,5474],{"emptyLinePlaceholder":5473},[5437,9485,9486,9489,9491,9494,9497,9500],{"class":5439,"line":5787},[5437,9487,9488],{"class":5484},"print",[5437,9490,5488],{"class":5447},[5437,9492,9493],{"class":5654},"\"=\"",[5437,9495,9496],{"class":5447}," * ",[5437,9498,9499],{"class":5504},"70",[5437,9501,5585],{"class":5447},[5437,9503,9504,9506,9508,9511],{"class":5439,"line":5801},[5437,9505,9488],{"class":5484},[5437,9507,5488],{"class":5447},[5437,9509,9510],{"class":5654},"\"ДАТАСЕТ UCI HEART DISEASE — ОГЛЯД\"",[5437,9512,5585],{"class":5447},[5437,9514,9515,9517,9519,9521,9523,9525],{"class":5439,"line":5822},[5437,9516,9488],{"class":5484},[5437,9518,5488],{"class":5447},[5437,9520,9493],{"class":5654},[5437,9522,9496],{"class":5447},[5437,9524,9499],{"class":5504},[5437,9526,5585],{"class":5447},[5437,9528,9529,9531,9533,9535,9538,9540,9543,9545,9548,9550,9553,9556,9559,9561,9563,9565,9567,9569,9572],{"class":5439,"line":5840},[5437,9530,9488],{"class":5484},[5437,9532,5488],{"class":5447},[5437,9534,6082],{"class":5480},[5437,9536,9537],{"class":5654},"\"",[5437,9539,6126],{"class":6088},[5437,9541,9542],{"class":5654},"Розмір датасету: ",[5437,9544,6095],{"class":5480},[5437,9546,9547],{"class":5447},"df.shape[",[5437,9549,5686],{"class":5504},[5437,9551,9552],{"class":5447},"]",[5437,9554,9555],{"class":5480},"}",[5437,9557,9558],{"class":5654}," пацієнтів × ",[5437,9560,6095],{"class":5480},[5437,9562,9547],{"class":5447},[5437,9564,5424],{"class":5504},[5437,9566,9552],{"class":5447},[5437,9568,9555],{"class":5480},[5437,9570,9571],{"class":5654}," ознак\"",[5437,9573,5585],{"class":5447},[5437,9575,9576,9578,9580,9582,9584,9586,9589],{"class":5439,"line":5869},[5437,9577,9488],{"class":5484},[5437,9579,5488],{"class":5447},[5437,9581,6082],{"class":5480},[5437,9583,9537],{"class":5654},[5437,9585,6126],{"class":6088},[5437,9587,9588],{"class":5654},"Перші 5 записів:\"",[5437,9590,5585],{"class":5447},[5437,9592,9593,9595],{"class":5439,"line":5884},[5437,9594,9488],{"class":5484},[5437,9596,9597],{"class":5447},"(df.head())\n",[6531,9599,9600],{"v-slot:output":5432},[8489,9601,9602,9635],{},[8492,9603,9604],{},[8495,9605,9606,9608,9610,9612,9614,9616,9618,9620,9622,9624,9626,9628,9630,9632],{},[8498,9607,8995],{"align":8510},[8498,9609,9006],{"align":8510},[8498,9611,9017],{"align":8510},[8498,9613,9043],{"align":8510},[8498,9615,9057],{"align":8510},[8498,9617,9071],{"align":8510},[8498,9619,9091],{"align":8510},[8498,9621,9108],{"align":8510},[8498,9623,9128],{"align":8510},[8498,9625,9142],{"align":8510},[8498,9627,9156],{"align":8510},[8498,9629,9173],{"align":8510},[8498,9631,9184],{"align":8510},[8498,9633,9634],{"align":8510},"target",[8522,9636,9637,9672,9706,9740,9775],{},[8495,9638,9639,9642,9644,9646,9649,9652,9654,9656,9659,9661,9664,9666,9668,9670],{},[8527,9640,9641],{"align":8510},"63",[8527,9643,5424],{"align":8510},[8527,9645,5424],{"align":8510},[8527,9647,9648],{"align":8510},"145",[8527,9650,9651],{"align":8510},"233",[8527,9653,5424],{"align":8510},[8527,9655,5609],{"align":8510},[8527,9657,9658],{"align":8510},"150",[8527,9660,5686],{"align":8510},[8527,9662,9663],{"align":8510},"2.3",[8527,9665,5665],{"align":8510},[8527,9667,5686],{"align":8510},[8527,9669,5625],{"align":8510},[8527,9671,5686],{"align":8510},[8495,9673,9674,9677,9679,9681,9684,9687,9689,9691,9694,9696,9698,9700,9702,9704],{},[8527,9675,9676],{"align":8510},"67",[8527,9678,5424],{"align":8510},[8527,9680,8134],{"align":8510},[8527,9682,9683],{"align":8510},"160",[8527,9685,9686],{"align":8510},"286",[8527,9688,5686],{"align":8510},[8527,9690,5609],{"align":8510},[8527,9692,9693],{"align":8510},"108",[8527,9695,5424],{"align":8510},[8527,9697,8139],{"align":8510},[8527,9699,5609],{"align":8510},[8527,9701,5665],{"align":8510},[8527,9703,5665],{"align":8510},[8527,9705,5609],{"align":8510},[8495,9707,9708,9710,9712,9714,9717,9720,9722,9724,9727,9729,9732,9734,9736,9738],{},[8527,9709,9676],{"align":8510},[8527,9711,5424],{"align":8510},[8527,9713,8134],{"align":8510},[8527,9715,9716],{"align":8510},"120",[8527,9718,9719],{"align":8510},"229",[8527,9721,5686],{"align":8510},[8527,9723,5609],{"align":8510},[8527,9725,9726],{"align":8510},"129",[8527,9728,5424],{"align":8510},[8527,9730,9731],{"align":8510},"2.6",[8527,9733,5609],{"align":8510},[8527,9735,5609],{"align":8510},[8527,9737,7880],{"align":8510},[8527,9739,5424],{"align":8510},[8495,9741,9742,9745,9747,9749,9752,9755,9757,9759,9762,9764,9767,9769,9771,9773],{},[8527,9743,9744],{"align":8510},"37",[8527,9746,5424],{"align":8510},[8527,9748,5665],{"align":8510},[8527,9750,9751],{"align":8510},"130",[8527,9753,9754],{"align":8510},"250",[8527,9756,5686],{"align":8510},[8527,9758,5686],{"align":8510},[8527,9760,9761],{"align":8510},"187",[8527,9763,5686],{"align":8510},[8527,9765,9766],{"align":8510},"3.5",[8527,9768,5665],{"align":8510},[8527,9770,5686],{"align":8510},[8527,9772,5665],{"align":8510},[8527,9774,5686],{"align":8510},[8495,9776,9777,9780,9782,9784,9786,9789,9791,9793,9796,9798,9801,9803,9805,9807],{},[8527,9778,9779],{"align":8510},"41",[8527,9781,5686],{"align":8510},[8527,9783,5609],{"align":8510},[8527,9785,9751],{"align":8510},[8527,9787,9788],{"align":8510},"204",[8527,9790,5686],{"align":8510},[8527,9792,5609],{"align":8510},[8527,9794,9795],{"align":8510},"172",[8527,9797,5686],{"align":8510},[8527,9799,9800],{"align":8510},"1.4",[8527,9802,5424],{"align":8510},[8527,9804,5686],{"align":8510},[8527,9806,5665],{"align":8510},[8527,9808,5686],{"align":8510},[5422,9810,9811,10041],{"execution-count":5609},[5427,9812,9814],{"className":5429,"code":9813,"language":5431,"meta":5432,"style":5432},"# Інформація про типи даних та пропуски\nprint(\"\\n\" + \"=\" * 70)\nprint(\"ІНФОРМАЦІЯ ПРО СТОВПЦІ ТА ПРОПУЩЕНІ ЗНАЧЕННЯ\")\nprint(\"=\" * 70)\nprint(df.info())\n\nprint(\"\\n\" + \"=\" * 70)\nprint(\"ПРОПУЩЕНІ ЗНАЧЕННЯ ПО СТОВПЦЯХ\")\nprint(\"=\" * 70)\nmissing = df.isnull().sum()\nmissing_pct = (missing \u002F len(df)) * 100\nmissing_df = pd.DataFrame({\n    'Стовпець': missing.index,\n    'Кількість пропусків': missing.values,\n    'Відсоток': missing_pct.values\n}).query('`Кількість пропусків` > 0')\n\nif len(missing_df) > 0:\n    print(missing_df.to_string(index=False))\nelse:\n    print(\"✅ Пропущених значень немає!\")\n",[5434,9815,9816,9821,9844,9855,9869,9876,9880,9902,9913,9927,9932,9946,9951,9959,9967,9975,9985,9989,10005,10023,10030],{"__ignoreMap":5432},[5437,9817,9818],{"class":5439,"line":5440},[5437,9819,9820],{"class":5562},"# Інформація про типи даних та пропуски\n",[5437,9822,9823,9825,9827,9829,9831,9833,9836,9838,9840,9842],{"class":5439,"line":5457},[5437,9824,9488],{"class":5484},[5437,9826,5488],{"class":5447},[5437,9828,9537],{"class":5654},[5437,9830,6126],{"class":6088},[5437,9832,9537],{"class":5654},[5437,9834,9835],{"class":5447}," + ",[5437,9837,9493],{"class":5654},[5437,9839,9496],{"class":5447},[5437,9841,9499],{"class":5504},[5437,9843,5585],{"class":5447},[5437,9845,9846,9848,9850,9853],{"class":5439,"line":5470},[5437,9847,9488],{"class":5484},[5437,9849,5488],{"class":5447},[5437,9851,9852],{"class":5654},"\"ІНФОРМАЦІЯ ПРО СТОВПЦІ ТА ПРОПУЩЕНІ ЗНАЧЕННЯ\"",[5437,9854,5585],{"class":5447},[5437,9856,9857,9859,9861,9863,9865,9867],{"class":5439,"line":5477},[5437,9858,9488],{"class":5484},[5437,9860,5488],{"class":5447},[5437,9862,9493],{"class":5654},[5437,9864,9496],{"class":5447},[5437,9866,9499],{"class":5504},[5437,9868,5585],{"class":5447},[5437,9870,9871,9873],{"class":5439,"line":5498},[5437,9872,9488],{"class":5484},[5437,9874,9875],{"class":5447},"(df.info())\n",[5437,9877,9878],{"class":5439,"line":5516},[5437,9879,5474],{"emptyLinePlaceholder":5473},[5437,9881,9882,9884,9886,9888,9890,9892,9894,9896,9898,9900],{"class":5439,"line":5521},[5437,9883,9488],{"class":5484},[5437,9885,5488],{"class":5447},[5437,9887,9537],{"class":5654},[5437,9889,6126],{"class":6088},[5437,9891,9537],{"class":5654},[5437,9893,9835],{"class":5447},[5437,9895,9493],{"class":5654},[5437,9897,9496],{"class":5447},[5437,9899,9499],{"class":5504},[5437,9901,5585],{"class":5447},[5437,9903,9904,9906,9908,9911],{"class":5439,"line":5535},[5437,9905,9488],{"class":5484},[5437,9907,5488],{"class":5447},[5437,9909,9910],{"class":5654},"\"ПРОПУЩЕНІ ЗНАЧЕННЯ ПО СТОВПЦЯХ\"",[5437,9912,5585],{"class":5447},[5437,9914,9915,9917,9919,9921,9923,9925],{"class":5439,"line":5541},[5437,9916,9488],{"class":5484},[5437,9918,5488],{"class":5447},[5437,9920,9493],{"class":5654},[5437,9922,9496],{"class":5447},[5437,9924,9499],{"class":5504},[5437,9926,5585],{"class":5447},[5437,9928,9929],{"class":5439,"line":5554},[5437,9930,9931],{"class":5447},"missing = df.isnull().sum()\n",[5437,9933,9934,9937,9940,9943],{"class":5439,"line":5559},[5437,9935,9936],{"class":5447},"missing_pct = (missing \u002F ",[5437,9938,9939],{"class":5484},"len",[5437,9941,9942],{"class":5447},"(df)) * ",[5437,9944,9945],{"class":5504},"100\n",[5437,9947,9948],{"class":5439,"line":5566},[5437,9949,9950],{"class":5447},"missing_df = pd.DataFrame({\n",[5437,9952,9953,9956],{"class":5439,"line":5588},[5437,9954,9955],{"class":5654},"    'Стовпець'",[5437,9957,9958],{"class":5447},": missing.index,\n",[5437,9960,9961,9964],{"class":5439,"line":5593},[5437,9962,9963],{"class":5654},"    'Кількість пропусків'",[5437,9965,9966],{"class":5447},": missing.values,\n",[5437,9968,9969,9972],{"class":5439,"line":5599},[5437,9970,9971],{"class":5654},"    'Відсоток'",[5437,9973,9974],{"class":5447},": missing_pct.values\n",[5437,9976,9977,9980,9983],{"class":5439,"line":5631},[5437,9978,9979],{"class":5447},"}).query(",[5437,9981,9982],{"class":5654},"'`Кількість пропусків` > 0'",[5437,9984,5585],{"class":5447},[5437,9986,9987],{"class":5439,"line":5636},[5437,9988,5474],{"emptyLinePlaceholder":5473},[5437,9990,9991,9994,9997,10000,10002],{"class":5439,"line":5642},[5437,9992,9993],{"class":5443},"if",[5437,9995,9996],{"class":5484}," len",[5437,9998,9999],{"class":5447},"(missing_df) > ",[5437,10001,5686],{"class":5504},[5437,10003,10004],{"class":5447},":\n",[5437,10006,10007,10010,10013,10016,10018,10021],{"class":5439,"line":5680},[5437,10008,10009],{"class":5484},"    print",[5437,10011,10012],{"class":5447},"(missing_df.to_string(",[5437,10014,10015],{"class":5491},"index",[5437,10017,5651],{"class":5447},[5437,10019,10020],{"class":5480},"False",[5437,10022,5628],{"class":5447},[5437,10024,10025,10028],{"class":5439,"line":5720},[5437,10026,10027],{"class":5443},"else",[5437,10029,10004],{"class":5447},[5437,10031,10032,10034,10036,10039],{"class":5439,"line":5753},[5437,10033,10009],{"class":5484},[5437,10035,5488],{"class":5447},[5437,10037,10038],{"class":5654},"\"✅ Пропущених значень немає!\"",[5437,10040,5585],{"class":5447},[6531,10042,10043],{"v-slot:output":5432},[8489,10044,10045,10067],{},[8492,10046,10047],{},[8495,10048,10049,10052,10058,10061,10064],{},[8498,10050,10051],{"align":8500},"Ознака датасету",[8498,10053,10054,10055,8475],{"align":8510},"Тип даних (",[5434,10056,10057],{},"Dtype",[8498,10059,10060],{"align":8510},"Пропущені значення",[8498,10062,10063],{"align":8510},"Відсоток пропусків",[8498,10065,10066],{"align":8500},"Клінічний зміст",[8522,10068,10069,10091,10111,10131,10151,10171,10191,10211,10231,10251,10271,10291,10318,10345,10366],{},[8495,10070,10071,10076,10081,10085,10088],{},[8527,10072,10073,10075],{"align":8500},[5434,10074,8995],{}," (вік)",[8527,10077,10078],{"align":8510},[5434,10079,10080],{},"float64",[8527,10082,10083],{"align":8510},[5434,10084,5686],{},[8527,10086,10087],{"align":8510},"0.0%",[8527,10089,10090],{"align":8500},"Вік пацієнта в роках",[8495,10092,10093,10098,10102,10106,10108],{},[8527,10094,10095,10097],{"align":8500},[5434,10096,9006],{}," (стать)",[8527,10099,10100],{"align":8510},[5434,10101,10080],{},[8527,10103,10104],{"align":8510},[5434,10105,5686],{},[8527,10107,10087],{"align":8510},[8527,10109,10110],{"align":8500},"1 = чоловік, 0 = жінка",[8495,10112,10113,10118,10122,10126,10128],{},[8527,10114,10115,10117],{"align":8500},[5434,10116,9017],{}," (тип болю в грудях)",[8527,10119,10120],{"align":8510},[5434,10121,10080],{},[8527,10123,10124],{"align":8510},[5434,10125,5686],{},[8527,10127,10087],{"align":8510},[8527,10129,10130],{"align":8500},"Категорії болю 1–4",[8495,10132,10133,10138,10142,10146,10148],{},[8527,10134,10135,10137],{"align":8500},[5434,10136,9043],{}," (тиск у спокої)",[8527,10139,10140],{"align":8510},[5434,10141,10080],{},[8527,10143,10144],{"align":8510},[5434,10145,5686],{},[8527,10147,10087],{"align":8510},[8527,10149,10150],{"align":8500},"Артеріальний тиск, мм рт. ст.",[8495,10152,10153,10158,10162,10166,10168],{},[8527,10154,10155,10157],{"align":8500},[5434,10156,9057],{}," (холестерин)",[8527,10159,10160],{"align":8510},[5434,10161,10080],{},[8527,10163,10164],{"align":8510},[5434,10165,5686],{},[8527,10167,10087],{"align":8510},[8527,10169,10170],{"align":8500},"Загальний рівень холестерину, мг\u002Fдл",[8495,10172,10173,10178,10182,10186,10188],{},[8527,10174,10175,10177],{"align":8500},[5434,10176,9071],{}," (цукор натщесерце)",[8527,10179,10180],{"align":8510},[5434,10181,10080],{},[8527,10183,10184],{"align":8510},[5434,10185,5686],{},[8527,10187,10087],{"align":8510},[8527,10189,10190],{"align":8500},"1 якщо > 120 мг\u002Fдл, інакше 0",[8495,10192,10193,10198,10202,10206,10208],{},[8527,10194,10195,10197],{"align":8500},[5434,10196,9091],{}," (ЕКГ спокою)",[8527,10199,10200],{"align":8510},[5434,10201,10080],{},[8527,10203,10204],{"align":8510},[5434,10205,5686],{},[8527,10207,10087],{"align":8510},[8527,10209,10210],{"align":8500},"Результати кардіограми (0, 1, 2)",[8495,10212,10213,10218,10222,10226,10228],{},[8527,10214,10215,10217],{"align":8500},[5434,10216,9108],{}," (макс. пульс)",[8527,10219,10220],{"align":8510},[5434,10221,10080],{},[8527,10223,10224],{"align":8510},[5434,10225,5686],{},[8527,10227,10087],{"align":8510},[8527,10229,10230],{"align":8500},"Максимальна досягнута ЧСС",[8495,10232,10233,10238,10242,10246,10248],{},[8527,10234,10235,10237],{"align":8500},[5434,10236,9128],{}," (стенокардія при навантаженні)",[8527,10239,10240],{"align":8510},[5434,10241,10080],{},[8527,10243,10244],{"align":8510},[5434,10245,5686],{},[8527,10247,10087],{"align":8510},[8527,10249,10250],{"align":8500},"1 = наявна, 0 = відсутня",[8495,10252,10253,10258,10262,10266,10268],{},[8527,10254,10255,10257],{"align":8500},[5434,10256,9142],{}," (депресія ST)",[8527,10259,10260],{"align":8510},[5434,10261,10080],{},[8527,10263,10264],{"align":8510},[5434,10265,5686],{},[8527,10267,10087],{"align":8510},[8527,10269,10270],{"align":8500},"Величина зміщення сегмента ST, мм",[8495,10272,10273,10278,10282,10286,10288],{},[8527,10274,10275,10277],{"align":8500},[5434,10276,9156],{}," (нахил ST)",[8527,10279,10280],{"align":8510},[5434,10281,10080],{},[8527,10283,10284],{"align":8510},[5434,10285,5686],{},[8527,10287,10087],{"align":8510},[8527,10289,10290],{"align":8500},"Нахил піку сегмента ST (1, 2, 3)",[8495,10292,10293,10298,10302,10308,10315],{},[8527,10294,10295,10297],{"align":8500},[5434,10296,9173],{}," (забарвлені судини)",[8527,10299,10300],{"align":8510},[5434,10301,10080],{},[8527,10303,10304],{"align":8510},[5195,10305,10306],{},[5434,10307,8134],{},[8527,10309,10310],{"align":8510},[5195,10311,10312],{},[5434,10313,10314],{},"1.3%",[8527,10316,10317],{"align":8500},"⚠️ Кількість великих судин (0–3)",[8495,10319,10320,10325,10329,10335,10342],{},[8527,10321,10322,10324],{"align":8500},[5434,10323,9184],{}," (наявність дефекту)",[8527,10326,10327],{"align":8510},[5434,10328,10080],{},[8527,10330,10331],{"align":8510},[5195,10332,10333],{},[5434,10334,5609],{},[8527,10336,10337],{"align":8510},[5195,10338,10339],{},[5434,10340,10341],{},"0.7%",[8527,10343,10344],{"align":8500},"⚠️ Таласемія (3=норма, 6=фікс., 7=зворотний)",[8495,10346,10347,10352,10357,10361,10363],{},[8527,10348,10349,10351],{"align":8500},[5434,10350,9634],{}," (цільова мітка)",[8527,10353,10354],{"align":8510},[5434,10355,10356],{},"int64",[8527,10358,10359],{"align":8510},[5434,10360,5686],{},[8527,10362,10087],{"align":8510},[8527,10364,10365],{"align":8500},"0 = здоровий, 1 = серцеве захворювання",[8495,10367,10368,10373,10376,10381,10384],{},[8527,10369,10370],{"align":8500},[5195,10371,10372],{},"Разом:",[8527,10374,10375],{"align":8510},"14 стовпців",[8527,10377,10378],{"align":8510},[5195,10379,10380],{},"6 пропусків",[8527,10382,10383],{"align":8510},"—",[8527,10385,10386],{"align":8500},"У вибірці з 303 пацієнтів",[5422,10388,10389,10540],{"execution-count":5665},[5427,10390,10392],{"className":5429,"code":10391,"language":5431,"meta":5432,"style":5432},"# Видалення рядків із пропусками\ndf_clean = df.dropna()\n\nprint(f\"\\nДатасет після очищення: {df_clean.shape[0]} пацієнтів\")\n\n# Перетворення цільової змінної у бінарну (0 = здоровий, 1 = хворий)\ndf_clean['target'] = (df_clean['target'] > 0).astype(int)\n\nprint(\"\\nРозподіл класів:\")\nprint(df_clean['target'].value_counts().sort_index())\nprint(f\"\\nВідсоток хворих: {df_clean['target'].mean() * 100:.1f}%\")\n",[5434,10393,10394,10399,10404,10408,10439,10443,10448,10474,10478,10493,10505],{"__ignoreMap":5432},[5437,10395,10396],{"class":5439,"line":5440},[5437,10397,10398],{"class":5562},"# Видалення рядків із пропусками\n",[5437,10400,10401],{"class":5439,"line":5457},[5437,10402,10403],{"class":5447},"df_clean = df.dropna()\n",[5437,10405,10406],{"class":5439,"line":5470},[5437,10407,5474],{"emptyLinePlaceholder":5473},[5437,10409,10410,10412,10414,10416,10418,10420,10423,10425,10428,10430,10432,10434,10437],{"class":5439,"line":5477},[5437,10411,9488],{"class":5484},[5437,10413,5488],{"class":5447},[5437,10415,6082],{"class":5480},[5437,10417,9537],{"class":5654},[5437,10419,6126],{"class":6088},[5437,10421,10422],{"class":5654},"Датасет після очищення: ",[5437,10424,6095],{"class":5480},[5437,10426,10427],{"class":5447},"df_clean.shape[",[5437,10429,5686],{"class":5504},[5437,10431,9552],{"class":5447},[5437,10433,9555],{"class":5480},[5437,10435,10436],{"class":5654}," пацієнтів\"",[5437,10438,5585],{"class":5447},[5437,10440,10441],{"class":5439,"line":5498},[5437,10442,5474],{"emptyLinePlaceholder":5473},[5437,10444,10445],{"class":5439,"line":5516},[5437,10446,10447],{"class":5562},"# Перетворення цільової змінної у бінарну (0 = здоровий, 1 = хворий)\n",[5437,10449,10450,10453,10456,10459,10461,10464,10466,10469,10472],{"class":5439,"line":5521},[5437,10451,10452],{"class":5447},"df_clean[",[5437,10454,10455],{"class":5654},"'target'",[5437,10457,10458],{"class":5447},"] = (df_clean[",[5437,10460,10455],{"class":5654},[5437,10462,10463],{"class":5447},"] > ",[5437,10465,5686],{"class":5504},[5437,10467,10468],{"class":5447},").astype(",[5437,10470,10471],{"class":6162},"int",[5437,10473,5585],{"class":5447},[5437,10475,10476],{"class":5439,"line":5535},[5437,10477,5474],{"emptyLinePlaceholder":5473},[5437,10479,10480,10482,10484,10486,10488,10491],{"class":5439,"line":5541},[5437,10481,9488],{"class":5484},[5437,10483,5488],{"class":5447},[5437,10485,9537],{"class":5654},[5437,10487,6126],{"class":6088},[5437,10489,10490],{"class":5654},"Розподіл класів:\"",[5437,10492,5585],{"class":5447},[5437,10494,10495,10497,10500,10502],{"class":5439,"line":5554},[5437,10496,9488],{"class":5484},[5437,10498,10499],{"class":5447},"(df_clean[",[5437,10501,10455],{"class":5654},[5437,10503,10504],{"class":5447},"].value_counts().sort_index())\n",[5437,10506,10507,10509,10511,10513,10515,10517,10520,10522,10524,10526,10529,10532,10535,10538],{"class":5439,"line":5559},[5437,10508,9488],{"class":5484},[5437,10510,5488],{"class":5447},[5437,10512,6082],{"class":5480},[5437,10514,9537],{"class":5654},[5437,10516,6126],{"class":6088},[5437,10518,10519],{"class":5654},"Відсоток хворих: ",[5437,10521,6095],{"class":5480},[5437,10523,10452],{"class":5447},[5437,10525,10455],{"class":5654},[5437,10527,10528],{"class":5447},"].mean() * ",[5437,10530,10531],{"class":5504},"100",[5437,10533,10534],{"class":5480},":.1f}",[5437,10536,10537],{"class":5654},"%\"",[5437,10539,5585],{"class":5447},[6531,10541,10542],{"v-slot:output":5432},[8489,10543,10544,10560],{},[8492,10545,10546],{},[8495,10547,10548,10551,10554,10557],{},[8498,10549,10550],{"align":8500},"Етап підготовки вибірки",[8498,10552,10553],{"align":8510},"Кількість пацієнтів",[8498,10555,10556],{"align":8510},"Частка збережених даних",[8498,10558,10559],{"align":8500},"Примітка",[8522,10561,10562,10580,10605],{},[8495,10563,10564,10569,10574,10577],{},[8527,10565,10566],{"align":8500},[5195,10567,10568],{},"Вихідний датасет",[8527,10570,10571],{"align":8510},[5434,10572,10573],{},"303",[8527,10575,10576],{"align":8510},"100.0%",[8527,10578,10579],{"align":8500},"Включає неповні анкети пацієнтів",[8495,10581,10582,10590,10594,10597],{},[8527,10583,10584],{"align":8500},[5195,10585,10586,10587,8475],{},"Вилучено рядків з пропусками (",[5434,10588,10589],{},"dropna",[8527,10591,10592],{"align":8510},[5434,10593,5625],{},[8527,10595,10596],{"align":8510},"2.0%",[8527,10598,10599,10600,10602,10603],{"align":8500},"4 пацієнти без ",[5434,10601,9173],{},", 2 пацієнти без ",[5434,10604,9184],{},[8495,10606,10607,10615,10622,10627],{},[8527,10608,10609],{"align":8500},[5195,10610,10611,10612,8475],{},"Очищений датасет (",[5434,10613,10614],{},"df_clean",[8527,10616,10617],{"align":8510},[5195,10618,10619],{},[5434,10620,10621],{},"297",[8527,10623,10624],{"align":8510},[5195,10625,10626],{},"98.0%",[8527,10628,10629],{"align":8500},"✅ Повна валідна вибірка без штучної імпутації",[6660,10631,10632,10637,10643],{},[5191,10633,10634],{},[5195,10635,10636],{},"Чому баланс класів важливий:",[5191,10638,10639,10640,5362],{},"Якщо один клас становить >90% даних (наприклад, 95% здорових), модель може «здогадатися» завжди передбачати мажоритарний клас і досягти 95% accuracy, ",[5195,10641,10642],{},"не навчившись нічого корисного",[5191,10644,10645,10646,10649],{},"У нашому випадку співвідношення 54%:46% — ",[5195,10647,10648],{},"ідеальний баланс",". Не потрібні техніки oversampling\u002Fundersampling.",[5297,10651],{},[5311,10653,10655],{"id":10654},"візуалізація-розподілів-ознак-та-кореляцій","Візуалізація розподілів ознак та кореляцій",[5417,10657,10659,11073,11635,11846],{"kernel":5419,"title":10658},"heart_disease_visualization.ipynb",[5422,10660,10662,10722],{"execution-count":8134,"execution-time":10661},"0.52s",[5427,10663,10665],{"className":5429,"code":10664,"language":5431,"meta":5432,"style":5432},"# Статистичний опис числових ознак\nprint(\"=\" * 70)\nprint(\"СТАТИСТИЧНИЙ ОПИС ЧИСЛОВИХ ОЗНАК\")\nprint(\"=\" * 70)\nprint(df_clean.describe().round(2))\n",[5434,10666,10667,10672,10686,10697,10711],{"__ignoreMap":5432},[5437,10668,10669],{"class":5439,"line":5440},[5437,10670,10671],{"class":5562},"# Статистичний опис числових ознак\n",[5437,10673,10674,10676,10678,10680,10682,10684],{"class":5439,"line":5457},[5437,10675,9488],{"class":5484},[5437,10677,5488],{"class":5447},[5437,10679,9493],{"class":5654},[5437,10681,9496],{"class":5447},[5437,10683,9499],{"class":5504},[5437,10685,5585],{"class":5447},[5437,10687,10688,10690,10692,10695],{"class":5439,"line":5470},[5437,10689,9488],{"class":5484},[5437,10691,5488],{"class":5447},[5437,10693,10694],{"class":5654},"\"СТАТИСТИЧНИЙ ОПИС ЧИСЛОВИХ ОЗНАК\"",[5437,10696,5585],{"class":5447},[5437,10698,10699,10701,10703,10705,10707,10709],{"class":5439,"line":5477},[5437,10700,9488],{"class":5484},[5437,10702,5488],{"class":5447},[5437,10704,9493],{"class":5654},[5437,10706,9496],{"class":5447},[5437,10708,9499],{"class":5504},[5437,10710,5585],{"class":5447},[5437,10712,10713,10715,10718,10720],{"class":5439,"line":5498},[5437,10714,9488],{"class":5484},[5437,10716,10717],{"class":5447},"(df_clean.describe().round(",[5437,10719,5609],{"class":5504},[5437,10721,5628],{"class":5447},[6531,10723,10724],{"v-slot:output":5432},[8489,10725,10726,10760],{},[8492,10727,10728],{},[8495,10729,10730,10732,10734,10736,10738,10740,10742,10744,10746,10748,10750,10752,10754,10756,10758],{},[8498,10731],{"align":8500},[8498,10733,8995],{"align":8510},[8498,10735,9006],{"align":8510},[8498,10737,9017],{"align":8510},[8498,10739,9043],{"align":8510},[8498,10741,9057],{"align":8510},[8498,10743,9071],{"align":8510},[8498,10745,9091],{"align":8510},[8498,10747,9108],{"align":8510},[8498,10749,9128],{"align":8510},[8498,10751,9142],{"align":8510},[8498,10753,9156],{"align":8510},[8498,10755,9173],{"align":8510},[8498,10757,9184],{"align":8510},[8498,10759,9634],{"align":8510},[8522,10761,10762,10795,10841,10886,10924,10960,10997,11035],{},[8495,10763,10764,10767,10769,10771,10773,10775,10777,10779,10781,10783,10785,10787,10789,10791,10793],{},[8527,10765,10766],{"align":8500},"count",[8527,10768,10621],{"align":8510},[8527,10770,10621],{"align":8510},[8527,10772,10621],{"align":8510},[8527,10774,10621],{"align":8510},[8527,10776,10621],{"align":8510},[8527,10778,10621],{"align":8510},[8527,10780,10621],{"align":8510},[8527,10782,10621],{"align":8510},[8527,10784,10621],{"align":8510},[8527,10786,10621],{"align":8510},[8527,10788,10621],{"align":8510},[8527,10790,10621],{"align":8510},[8527,10792,10621],{"align":8510},[8527,10794,10621],{"align":8510},[8495,10796,10797,10800,10803,10806,10809,10812,10815,10817,10820,10823,10826,10829,10832,10835,10838],{},[8527,10798,10799],{"align":8500},"mean",[8527,10801,10802],{"align":8510},"54.44",[8527,10804,10805],{"align":8510},"0.68",[8527,10807,10808],{"align":8510},"3.16",[8527,10810,10811],{"align":8510},"131.69",[8527,10813,10814],{"align":8510},"246.69",[8527,10816,6255],{"align":8510},[8527,10818,10819],{"align":8510},"0.99",[8527,10821,10822],{"align":8510},"149.61",[8527,10824,10825],{"align":8510},"0.33",[8527,10827,10828],{"align":8510},"1.05",[8527,10830,10831],{"align":8510},"1.60",[8527,10833,10834],{"align":8510},"0.67",[8527,10836,10837],{"align":8510},"4.70",[8527,10839,10840],{"align":8510},"0.46",[8495,10842,10843,10846,10849,10852,10855,10858,10861,10864,10866,10869,10871,10874,10877,10880,10883],{},[8527,10844,10845],{"align":8500},"std",[8527,10847,10848],{"align":8510},"9.04",[8527,10850,10851],{"align":8510},"0.47",[8527,10853,10854],{"align":8510},"0.95",[8527,10856,10857],{"align":8510},"17.60",[8527,10859,10860],{"align":8510},"51.78",[8527,10862,10863],{"align":8510},"0.36",[8527,10865,10819],{"align":8510},[8527,10867,10868],{"align":8510},"22.88",[8527,10870,10851],{"align":8510},[8527,10872,10873],{"align":8510},"1.16",[8527,10875,10876],{"align":8510},"0.62",[8527,10878,10879],{"align":8510},"0.94",[8527,10881,10882],{"align":8510},"1.94",[8527,10884,10885],{"align":8510},"0.50",[8495,10887,10888,10891,10894,10896,10898,10901,10904,10906,10908,10911,10913,10916,10918,10920,10922],{},[8527,10889,10890],{"align":8500},"min",[8527,10892,10893],{"align":8510},"29",[8527,10895,5686],{"align":8510},[8527,10897,5424],{"align":8510},[8527,10899,10900],{"align":8510},"94",[8527,10902,10903],{"align":8510},"126",[8527,10905,5686],{"align":8510},[8527,10907,5686],{"align":8510},[8527,10909,10910],{"align":8510},"71",[8527,10912,5686],{"align":8510},[8527,10914,10915],{"align":8510},"0.0",[8527,10917,5424],{"align":8510},[8527,10919,5686],{"align":8510},[8527,10921,5665],{"align":8510},[8527,10923,5686],{"align":8510},[8495,10925,10926,10929,10932,10934,10936,10938,10941,10943,10945,10948,10950,10952,10954,10956,10958],{},[8527,10927,10928],{"align":8500},"25%",[8527,10930,10931],{"align":8510},"48",[8527,10933,5686],{"align":8510},[8527,10935,5665],{"align":8510},[8527,10937,9716],{"align":8510},[8527,10939,10940],{"align":8510},"211",[8527,10942,5686],{"align":8510},[8527,10944,5686],{"align":8510},[8527,10946,10947],{"align":8510},"133",[8527,10949,5686],{"align":8510},[8527,10951,10915],{"align":8510},[8527,10953,5424],{"align":8510},[8527,10955,5686],{"align":8510},[8527,10957,5665],{"align":8510},[8527,10959,5686],{"align":8510},[8495,10961,10962,10965,10968,10970,10972,10974,10977,10979,10981,10984,10986,10989,10991,10993,10995],{},[8527,10963,10964],{"align":8500},"50%",[8527,10966,10967],{"align":8510},"56",[8527,10969,5424],{"align":8510},[8527,10971,5665],{"align":8510},[8527,10973,9751],{"align":8510},[8527,10975,10976],{"align":8510},"241",[8527,10978,5686],{"align":8510},[8527,10980,5424],{"align":8510},[8527,10982,10983],{"align":8510},"153",[8527,10985,5686],{"align":8510},[8527,10987,10988],{"align":8510},"0.8",[8527,10990,5609],{"align":8510},[8527,10992,5686],{"align":8510},[8527,10994,5665],{"align":8510},[8527,10996,5686],{"align":8510},[8495,10998,10999,11002,11005,11007,11009,11012,11015,11017,11019,11022,11024,11027,11029,11031,11033],{},[8527,11000,11001],{"align":8500},"75%",[8527,11003,11004],{"align":8510},"61",[8527,11006,5424],{"align":8510},[8527,11008,8134],{"align":8510},[8527,11010,11011],{"align":8510},"140",[8527,11013,11014],{"align":8510},"275",[8527,11016,5686],{"align":8510},[8527,11018,5609],{"align":8510},[8527,11020,11021],{"align":8510},"166",[8527,11023,5424],{"align":8510},[8527,11025,11026],{"align":8510},"1.6",[8527,11028,5609],{"align":8510},[8527,11030,5424],{"align":8510},[8527,11032,7880],{"align":8510},[8527,11034,5424],{"align":8510},[8495,11036,11037,11040,11043,11045,11047,11050,11053,11055,11057,11060,11062,11065,11067,11069,11071],{},[8527,11038,11039],{"align":8500},"max",[8527,11041,11042],{"align":8510},"77",[8527,11044,5424],{"align":8510},[8527,11046,8134],{"align":8510},[8527,11048,11049],{"align":8510},"200",[8527,11051,11052],{"align":8510},"564",[8527,11054,5424],{"align":8510},[8527,11056,5609],{"align":8510},[8527,11058,11059],{"align":8510},"202",[8527,11061,5424],{"align":8510},[8527,11063,11064],{"align":8510},"6.2",[8527,11066,5665],{"align":8510},[8527,11068,5665],{"align":8510},[8527,11070,7880],{"align":8510},[8527,11072,5424],{"align":8510},[5422,11074,11076,11628],{"execution-count":6246,"execution-time":11075},"0.68s",[5427,11077,11079],{"className":5429,"code":11078,"language":5431,"meta":5432,"style":5432},"# Розподіл віку за статтю та діагнозом\nfig, axes = plt.subplots(1, 2, figsize=(16, 6))\n\n# Розподіл віку\naxes[0].hist([df_clean[df_clean['target'] == 0]['age'], \n              df_clean[df_clean['target'] == 1]['age']], \n             bins=15, label=['Здорові', 'Хворі'], color=['#10b981', '#ef4444'], alpha=0.7)\naxes[0].set_xlabel('Вік (роки)', fontsize=14)\naxes[0].set_ylabel('Кількість пацієнтів', fontsize=14)\naxes[0].set_title('Розподіл віку за діагнозом', fontsize=16, fontweight='bold')\naxes[0].legend(fontsize=12)\naxes[0].grid(alpha=0.3)\n\n# Співвідношення чоловіки\u002Fжінки з хворобою\nsex_target = pd.crosstab(df_clean['sex'], df_clean['target'], normalize='index') * 100\nsex_labels = ['Жінки', 'Чоловіки']\nx = np.arange(len(sex_labels))\nwidth = 0.35\n\naxes[1].bar(x - width\u002F2, sex_target[0], width, label='Здорові', color='#10b981', alpha=0.8)\naxes[1].bar(x + width\u002F2, sex_target[1], width, label='Хворі', color='#ef4444', alpha=0.8)\naxes[1].set_xlabel('Стать', fontsize=14)\naxes[1].set_ylabel('Відсоток (%)', fontsize=14)\naxes[1].set_title('Частота серцевих захворювань за статтю', fontsize=16, fontweight='bold')\naxes[1].set_xticks(x)\naxes[1].set_xticklabels(sex_labels, fontsize=13)\naxes[1].legend(fontsize=12)\naxes[1].grid(alpha=0.3, axis='y')\n\nplt.tight_layout()\nplt.show()\n",[5434,11080,11081,11086,11111,11115,11120,11146,11164,11211,11233,11255,11285,11302,11319,11323,11328,11355,11370,11380,11388,11392,11435,11476,11497,11518,11547,11556,11574,11590,11616,11620,11624],{"__ignoreMap":5432},[5437,11082,11083],{"class":5439,"line":5440},[5437,11084,11085],{"class":5562},"# Розподіл віку за статтю та діагнозом\n",[5437,11087,11088,11091,11093,11095,11097,11099,11101,11103,11105,11107,11109],{"class":5439,"line":5457},[5437,11089,11090],{"class":5447},"fig, axes = plt.subplots(",[5437,11092,5424],{"class":5504},[5437,11094,5575],{"class":5447},[5437,11096,5609],{"class":5504},[5437,11098,5575],{"class":5447},[5437,11100,5614],{"class":5491},[5437,11102,5617],{"class":5447},[5437,11104,5620],{"class":5504},[5437,11106,5575],{"class":5447},[5437,11108,5625],{"class":5504},[5437,11110,5628],{"class":5447},[5437,11112,11113],{"class":5439,"line":5470},[5437,11114,5474],{"emptyLinePlaceholder":5473},[5437,11116,11117],{"class":5439,"line":5477},[5437,11118,11119],{"class":5562},"# Розподіл віку\n",[5437,11121,11122,11125,11127,11130,11132,11135,11137,11140,11143],{"class":5439,"line":5498},[5437,11123,11124],{"class":5447},"axes[",[5437,11126,5686],{"class":5504},[5437,11128,11129],{"class":5447},"].hist([df_clean[df_clean[",[5437,11131,10455],{"class":5654},[5437,11133,11134],{"class":5447},"] == ",[5437,11136,5686],{"class":5504},[5437,11138,11139],{"class":5447},"][",[5437,11141,11142],{"class":5654},"'age'",[5437,11144,11145],{"class":5447},"], \n",[5437,11147,11148,11151,11153,11155,11157,11159,11161],{"class":5439,"line":5516},[5437,11149,11150],{"class":5447},"              df_clean[df_clean[",[5437,11152,10455],{"class":5654},[5437,11154,11134],{"class":5447},[5437,11156,5424],{"class":5504},[5437,11158,11139],{"class":5447},[5437,11160,11142],{"class":5654},[5437,11162,11163],{"class":5447},"]], \n",[5437,11165,11166,11169,11171,11174,11176,11178,11181,11184,11186,11189,11191,11193,11195,11197,11199,11201,11203,11205,11207,11209],{"class":5439,"line":5521},[5437,11167,11168],{"class":5491},"             bins",[5437,11170,5651],{"class":5447},[5437,11172,11173],{"class":5504},"15",[5437,11175,5575],{"class":5447},[5437,11177,5670],{"class":5491},[5437,11179,11180],{"class":5447},"=[",[5437,11182,11183],{"class":5654},"'Здорові'",[5437,11185,5575],{"class":5447},[5437,11187,11188],{"class":5654},"'Хворі'",[5437,11190,7042],{"class":5447},[5437,11192,5648],{"class":5491},[5437,11194,11180],{"class":5447},[5437,11196,6868],{"class":5654},[5437,11198,5575],{"class":5447},[5437,11200,5905],{"class":5654},[5437,11202,7042],{"class":5447},[5437,11204,5710],{"class":5491},[5437,11206,5651],{"class":5447},[5437,11208,7927],{"class":5504},[5437,11210,5585],{"class":5447},[5437,11212,11213,11215,11217,11220,11223,11225,11227,11229,11231],{"class":5439,"line":5535},[5437,11214,11124],{"class":5447},[5437,11216,5686],{"class":5504},[5437,11218,11219],{"class":5447},"].set_xlabel(",[5437,11221,11222],{"class":5654},"'Вік (роки)'",[5437,11224,5575],{"class":5447},[5437,11226,5812],{"class":5491},[5437,11228,5651],{"class":5447},[5437,11230,5817],{"class":5504},[5437,11232,5585],{"class":5447},[5437,11234,11235,11237,11239,11242,11245,11247,11249,11251,11253],{"class":5439,"line":5541},[5437,11236,11124],{"class":5447},[5437,11238,5686],{"class":5504},[5437,11240,11241],{"class":5447},"].set_ylabel(",[5437,11243,11244],{"class":5654},"'Кількість пацієнтів'",[5437,11246,5575],{"class":5447},[5437,11248,5812],{"class":5491},[5437,11250,5651],{"class":5447},[5437,11252,5817],{"class":5504},[5437,11254,5585],{"class":5447},[5437,11256,11257,11259,11261,11264,11267,11269,11271,11273,11275,11277,11279,11281,11283],{"class":5439,"line":5554},[5437,11258,11124],{"class":5447},[5437,11260,5686],{"class":5504},[5437,11262,11263],{"class":5447},"].set_title(",[5437,11265,11266],{"class":5654},"'Розподіл віку за діагнозом'",[5437,11268,5575],{"class":5447},[5437,11270,5812],{"class":5491},[5437,11272,5651],{"class":5447},[5437,11274,5620],{"class":5504},[5437,11276,5575],{"class":5447},[5437,11278,5859],{"class":5491},[5437,11280,5651],{"class":5447},[5437,11282,5864],{"class":5654},[5437,11284,5585],{"class":5447},[5437,11286,11287,11289,11291,11294,11296,11298,11300],{"class":5439,"line":5559},[5437,11288,11124],{"class":5447},[5437,11290,5686],{"class":5504},[5437,11292,11293],{"class":5447},"].legend(",[5437,11295,5812],{"class":5491},[5437,11297,5651],{"class":5447},[5437,11299,5879],{"class":5504},[5437,11301,5585],{"class":5447},[5437,11303,11304,11306,11308,11311,11313,11315,11317],{"class":5439,"line":5566},[5437,11305,11124],{"class":5447},[5437,11307,5686],{"class":5504},[5437,11309,11310],{"class":5447},"].grid(",[5437,11312,5710],{"class":5491},[5437,11314,5651],{"class":5447},[5437,11316,5715],{"class":5504},[5437,11318,5585],{"class":5447},[5437,11320,11321],{"class":5439,"line":5588},[5437,11322,5474],{"emptyLinePlaceholder":5473},[5437,11324,11325],{"class":5439,"line":5593},[5437,11326,11327],{"class":5562},"# Співвідношення чоловіки\u002Fжінки з хворобою\n",[5437,11329,11330,11333,11335,11338,11340,11342,11345,11347,11350,11353],{"class":5439,"line":5599},[5437,11331,11332],{"class":5447},"sex_target = pd.crosstab(df_clean[",[5437,11334,9372],{"class":5654},[5437,11336,11337],{"class":5447},"], df_clean[",[5437,11339,10455],{"class":5654},[5437,11341,7042],{"class":5447},[5437,11343,11344],{"class":5491},"normalize",[5437,11346,5651],{"class":5447},[5437,11348,11349],{"class":5654},"'index'",[5437,11351,11352],{"class":5447},") * ",[5437,11354,9945],{"class":5504},[5437,11356,11357,11360,11363,11365,11368],{"class":5439,"line":5631},[5437,11358,11359],{"class":5447},"sex_labels = [",[5437,11361,11362],{"class":5654},"'Жінки'",[5437,11364,5575],{"class":5447},[5437,11366,11367],{"class":5654},"'Чоловіки'",[5437,11369,9441],{"class":5447},[5437,11371,11372,11375,11377],{"class":5439,"line":5636},[5437,11373,11374],{"class":5447},"x = np.arange(",[5437,11376,9939],{"class":5484},[5437,11378,11379],{"class":5447},"(sex_labels))\n",[5437,11381,11382,11385],{"class":5439,"line":5642},[5437,11383,11384],{"class":5447},"width = ",[5437,11386,11387],{"class":5504},"0.35\n",[5437,11389,11390],{"class":5439,"line":5680},[5437,11391,5474],{"emptyLinePlaceholder":5473},[5437,11393,11394,11396,11398,11401,11403,11406,11408,11411,11413,11415,11417,11419,11421,11423,11425,11427,11429,11431,11433],{"class":5439,"line":5720},[5437,11395,11124],{"class":5447},[5437,11397,5424],{"class":5504},[5437,11399,11400],{"class":5447},"].bar(x - width\u002F",[5437,11402,5609],{"class":5504},[5437,11404,11405],{"class":5447},", sex_target[",[5437,11407,5686],{"class":5504},[5437,11409,11410],{"class":5447},"], width, ",[5437,11412,5670],{"class":5491},[5437,11414,5651],{"class":5447},[5437,11416,11183],{"class":5654},[5437,11418,5575],{"class":5447},[5437,11420,5648],{"class":5491},[5437,11422,5651],{"class":5447},[5437,11424,6868],{"class":5654},[5437,11426,5575],{"class":5447},[5437,11428,5710],{"class":5491},[5437,11430,5651],{"class":5447},[5437,11432,10988],{"class":5504},[5437,11434,5585],{"class":5447},[5437,11436,11437,11439,11441,11444,11446,11448,11450,11452,11454,11456,11458,11460,11462,11464,11466,11468,11470,11472,11474],{"class":5439,"line":5753},[5437,11438,11124],{"class":5447},[5437,11440,5424],{"class":5504},[5437,11442,11443],{"class":5447},"].bar(x + width\u002F",[5437,11445,5609],{"class":5504},[5437,11447,11405],{"class":5447},[5437,11449,5424],{"class":5504},[5437,11451,11410],{"class":5447},[5437,11453,5670],{"class":5491},[5437,11455,5651],{"class":5447},[5437,11457,11188],{"class":5654},[5437,11459,5575],{"class":5447},[5437,11461,5648],{"class":5491},[5437,11463,5651],{"class":5447},[5437,11465,5905],{"class":5654},[5437,11467,5575],{"class":5447},[5437,11469,5710],{"class":5491},[5437,11471,5651],{"class":5447},[5437,11473,10988],{"class":5504},[5437,11475,5585],{"class":5447},[5437,11477,11478,11480,11482,11484,11487,11489,11491,11493,11495],{"class":5439,"line":5787},[5437,11479,11124],{"class":5447},[5437,11481,5424],{"class":5504},[5437,11483,11219],{"class":5447},[5437,11485,11486],{"class":5654},"'Стать'",[5437,11488,5575],{"class":5447},[5437,11490,5812],{"class":5491},[5437,11492,5651],{"class":5447},[5437,11494,5817],{"class":5504},[5437,11496,5585],{"class":5447},[5437,11498,11499,11501,11503,11505,11508,11510,11512,11514,11516],{"class":5439,"line":5801},[5437,11500,11124],{"class":5447},[5437,11502,5424],{"class":5504},[5437,11504,11241],{"class":5447},[5437,11506,11507],{"class":5654},"'Відсоток (%)'",[5437,11509,5575],{"class":5447},[5437,11511,5812],{"class":5491},[5437,11513,5651],{"class":5447},[5437,11515,5817],{"class":5504},[5437,11517,5585],{"class":5447},[5437,11519,11520,11522,11524,11526,11529,11531,11533,11535,11537,11539,11541,11543,11545],{"class":5439,"line":5822},[5437,11521,11124],{"class":5447},[5437,11523,5424],{"class":5504},[5437,11525,11263],{"class":5447},[5437,11527,11528],{"class":5654},"'Частота серцевих захворювань за статтю'",[5437,11530,5575],{"class":5447},[5437,11532,5812],{"class":5491},[5437,11534,5651],{"class":5447},[5437,11536,5620],{"class":5504},[5437,11538,5575],{"class":5447},[5437,11540,5859],{"class":5491},[5437,11542,5651],{"class":5447},[5437,11544,5864],{"class":5654},[5437,11546,5585],{"class":5447},[5437,11548,11549,11551,11553],{"class":5439,"line":5840},[5437,11550,11124],{"class":5447},[5437,11552,5424],{"class":5504},[5437,11554,11555],{"class":5447},"].set_xticks(x)\n",[5437,11557,11558,11560,11562,11565,11567,11569,11572],{"class":5439,"line":5869},[5437,11559,11124],{"class":5447},[5437,11561,5424],{"class":5504},[5437,11563,11564],{"class":5447},"].set_xticklabels(sex_labels, ",[5437,11566,5812],{"class":5491},[5437,11568,5651],{"class":5447},[5437,11570,11571],{"class":5504},"13",[5437,11573,5585],{"class":5447},[5437,11575,11576,11578,11580,11582,11584,11586,11588],{"class":5439,"line":5884},[5437,11577,11124],{"class":5447},[5437,11579,5424],{"class":5504},[5437,11581,11293],{"class":5447},[5437,11583,5812],{"class":5491},[5437,11585,5651],{"class":5447},[5437,11587,5879],{"class":5504},[5437,11589,5585],{"class":5447},[5437,11591,11592,11594,11596,11598,11600,11602,11604,11606,11609,11611,11614],{"class":5439,"line":5889},[5437,11593,11124],{"class":5447},[5437,11595,5424],{"class":5504},[5437,11597,11310],{"class":5447},[5437,11599,5710],{"class":5491},[5437,11601,5651],{"class":5447},[5437,11603,5715],{"class":5504},[5437,11605,5575],{"class":5447},[5437,11607,11608],{"class":5491},"axis",[5437,11610,5651],{"class":5447},[5437,11612,11613],{"class":5654},"'y'",[5437,11615,5585],{"class":5447},[5437,11617,11618],{"class":5439,"line":5895},[5437,11619,5474],{"emptyLinePlaceholder":5473},[5437,11621,11622],{"class":5439,"line":5927},[5437,11623,6523],{"class":5447},[5437,11625,11626],{"class":5439,"line":5961},[5437,11627,6529],{"class":5447},[6531,11629,11630],{"v-slot:output":5432},[6534,11631],{"alt":11632,"className":11633,"src":11634},"Розподіл віку та частота серцевих захворювань за статтю у датасеті UCI Heart Disease",[6538],"\u002Fimages\u002Fai-python\u002Factivation-functions-heart-disease\u002Fheart-disease-prediction\u002F04.png",[5422,11636,11638,11839],{"execution-count":5625,"execution-time":11637},"0.74s",[5427,11639,11641],{"className":5429,"code":11640,"language":5431,"meta":5432,"style":5432},"# Кореляційна матриця\nplt.figure(figsize=(14, 11))\ncorrelation_matrix = df_clean.corr()\n\n# Використання маски для верхнього трикутника (естетично краще)\nmask = np.triu(np.ones_like(correlation_matrix, dtype=bool))\n\nsns.heatmap(correlation_matrix, mask=mask, annot=True, fmt='.2f', cmap='RdYlGn_r', \n            center=0, square=True, linewidths=1, cbar_kws={\"shrink\": 0.8})\n\nplt.title('Кореляційна матриця клінічних ознак\\n(Метод Пірсона)', \n          fontsize=16, fontweight='bold', pad=20)\nplt.tight_layout()\nplt.show()\n",[5434,11642,11643,11648,11664,11669,11673,11678,11693,11697,11738,11784,11788,11802,11831,11835],{"__ignoreMap":5432},[5437,11644,11645],{"class":5439,"line":5440},[5437,11646,11647],{"class":5562},"# Кореляційна матриця\n",[5437,11649,11650,11652,11654,11656,11658,11660,11662],{"class":5439,"line":5457},[5437,11651,7869],{"class":5447},[5437,11653,5614],{"class":5491},[5437,11655,5617],{"class":5447},[5437,11657,5817],{"class":5504},[5437,11659,5575],{"class":5447},[5437,11661,6337],{"class":5504},[5437,11663,5628],{"class":5447},[5437,11665,11666],{"class":5439,"line":5470},[5437,11667,11668],{"class":5447},"correlation_matrix = df_clean.corr()\n",[5437,11670,11671],{"class":5439,"line":5477},[5437,11672,5474],{"emptyLinePlaceholder":5473},[5437,11674,11675],{"class":5439,"line":5498},[5437,11676,11677],{"class":5562},"# Використання маски для верхнього трикутника (естетично краще)\n",[5437,11679,11680,11683,11686,11688,11691],{"class":5439,"line":5516},[5437,11681,11682],{"class":5447},"mask = np.triu(np.ones_like(correlation_matrix, ",[5437,11684,11685],{"class":5491},"dtype",[5437,11687,5651],{"class":5447},[5437,11689,11690],{"class":6162},"bool",[5437,11692,5628],{"class":5447},[5437,11694,11695],{"class":5439,"line":5521},[5437,11696,5474],{"emptyLinePlaceholder":5473},[5437,11698,11699,11702,11705,11708,11711,11713,11716,11718,11721,11723,11726,11728,11731,11733,11736],{"class":5439,"line":5535},[5437,11700,11701],{"class":5447},"sns.heatmap(correlation_matrix, ",[5437,11703,11704],{"class":5491},"mask",[5437,11706,11707],{"class":5447},"=mask, ",[5437,11709,11710],{"class":5491},"annot",[5437,11712,5651],{"class":5447},[5437,11714,11715],{"class":5480},"True",[5437,11717,5575],{"class":5447},[5437,11719,11720],{"class":5491},"fmt",[5437,11722,5651],{"class":5447},[5437,11724,11725],{"class":5654},"'.2f'",[5437,11727,5575],{"class":5447},[5437,11729,11730],{"class":5491},"cmap",[5437,11732,5651],{"class":5447},[5437,11734,11735],{"class":5654},"'RdYlGn_r'",[5437,11737,7436],{"class":5447},[5437,11739,11740,11743,11745,11747,11749,11752,11754,11756,11758,11761,11763,11765,11767,11770,11773,11776,11779,11781],{"class":5439,"line":5541},[5437,11741,11742],{"class":5491},"            center",[5437,11744,5651],{"class":5447},[5437,11746,5686],{"class":5504},[5437,11748,5575],{"class":5447},[5437,11750,11751],{"class":5491},"square",[5437,11753,5651],{"class":5447},[5437,11755,11715],{"class":5480},[5437,11757,5575],{"class":5447},[5437,11759,11760],{"class":5491},"linewidths",[5437,11762,5651],{"class":5447},[5437,11764,5424],{"class":5504},[5437,11766,5575],{"class":5447},[5437,11768,11769],{"class":5491},"cbar_kws",[5437,11771,11772],{"class":5447},"={",[5437,11774,11775],{"class":5654},"\"shrink\"",[5437,11777,11778],{"class":5447},": ",[5437,11780,10988],{"class":5504},[5437,11782,11783],{"class":5447},"})\n",[5437,11785,11786],{"class":5439,"line":5554},[5437,11787,5474],{"emptyLinePlaceholder":5473},[5437,11789,11790,11792,11795,11797,11800],{"class":5439,"line":5559},[5437,11791,8382],{"class":5447},[5437,11793,11794],{"class":5654},"'Кореляційна матриця клінічних ознак",[5437,11796,6126],{"class":6088},[5437,11798,11799],{"class":5654},"(Метод Пірсона)'",[5437,11801,7436],{"class":5447},[5437,11803,11804,11807,11809,11811,11813,11815,11817,11819,11821,11824,11826,11829],{"class":5439,"line":5566},[5437,11805,11806],{"class":5491},"          fontsize",[5437,11808,5651],{"class":5447},[5437,11810,5620],{"class":5504},[5437,11812,5575],{"class":5447},[5437,11814,5859],{"class":5491},[5437,11816,5651],{"class":5447},[5437,11818,5864],{"class":5654},[5437,11820,5575],{"class":5447},[5437,11822,11823],{"class":5491},"pad",[5437,11825,5651],{"class":5447},[5437,11827,11828],{"class":5504},"20",[5437,11830,5585],{"class":5447},[5437,11832,11833],{"class":5439,"line":5588},[5437,11834,6523],{"class":5447},[5437,11836,11837],{"class":5439,"line":5593},[5437,11838,6529],{"class":5447},[6531,11840,11841],{"v-slot:output":5432},[6534,11842],{"alt":11843,"className":11844,"src":11845},"Кореляційна матриця клінічних ознак датасету Heart Disease",[6538],"\u002Fimages\u002Fai-python\u002Factivation-functions-heart-disease\u002Fheart-disease-prediction\u002F05.png",[5422,11847,11849,11854,11859,11876,11881,11893,11898],{"type":11848},"markdown",[11850,11851,11853],"h4",{"id":11852},"ключові-інсайти-з-кореляційного-аналізу","Ключові інсайти з кореляційного аналізу",[5191,11855,11856],{},[5195,11857,11858],{},"Сильні позитивні кореляції з цільовою змінною (наявність хвороби):",[5217,11860,11861,11866,11871],{},[5220,11862,11863,11865],{},[5195,11864,9017],{}," (chest pain type) = +0.43 — тип болю в грудях сильно корелює з діагнозом",[5220,11867,11868,11870],{},[5195,11869,9142],{}," = +0.43 — депресія ST-сегмента при навантаженні",[5220,11872,11873,11875],{},[5195,11874,9128],{}," (exercise angina) = +0.44 — стенокардія при навантаженні",[5191,11877,11878],{},[5195,11879,11880],{},"Сильні негативні кореляції:",[5217,11882,11883,11888],{},[5220,11884,11885,11887],{},[5195,11886,9108],{}," (max heart rate) = -0.42 — у хворих знижена максимальна ЧСС",[5220,11889,11890,11892],{},[5195,11891,9156],{}," = -0.35 — характер нахилу ST-сегмента",[5191,11894,11895],{},[5195,11896,11897],{},"Мультиколінеарність (сильні кореляції між ознаками):",[5244,11899,11900,11906],{},[5220,11901,11902,11905],{},[5195,11903,11904],{},"age ↔ thalach"," = -0.40 (з віком знижується максимальна ЧСС — фізіологічна норма)",[5220,11907,11908,11911],{},[5195,11909,11910],{},"slope ↔ oldpeak"," = -0.58 (обидві ознаки з ЕКГ при навантаженні)",[5345,11913,11914,11919,11926,11952],{},[5191,11915,11916],{},[5195,11917,11918],{},"Клінічна інтерпретація найсильніших предикторів:",[5191,11920,11921,11922,11925],{},"Модель має ",[5195,11923,11924],{},"навчитися комбінувати"," ці ознаки для точного діагнозу:",[5217,11927,11928,11934,11940,11946],{},[5220,11929,11930,11933],{},[5195,11931,11932],{},"Тип болю (cp)"," — суб'єктивний симптом, але критично важливий. Типова стенокардія (cp=1) майже завжди вказує на ішемію.",[5220,11935,11936,11939],{},[5195,11937,11938],{},"Стенокардія при навантаженні (exang)"," — якщо пацієнт відчуває біль у грудях при фізичному навантаженні, ймовірність звуження коронарних артерій >70%.",[5220,11941,11942,11945],{},[5195,11943,11944],{},"Депресія ST-сегмента (oldpeak)"," — об'єктивний показник недостатнього кровопостачання міокарда. Значення >2 мм — показання до коронарографії.",[5220,11947,11948,11951],{},[5195,11949,11950],{},"Максимальна ЧСС (thalach)"," — низьке значення (\u003C 100 уд\u002Fхв при навантаженні) може свідчити про слабкість серцевого м'яза або бета-блокатори.",[5191,11953,11954,11955,11958],{},"Нейронна мережа має ",[5195,11956,11957],{},"автоматично виявити ці закономірності"," через навчання на даних, без експлицитного програмування правил.",[5297,11960],{},[5186,11962,11964],{"id":11963},"архітектура-нейронної-мережі-для-діагностики-серця","Архітектура нейронної мережі для діагностики серця",[5191,11966,11967,11968,11971],{},"Тепер, коли ми проаналізували дані, спроєктуємо архітектуру нашої моделі. Ми використаємо ",[5195,11969,11970],{},"Multi-Layer Perceptron (MLP)"," — багатошарову нейронну мережу з прямим поширенням.",[5311,11973,11975],{"id":11974},"вибір-архітектури-баланс-між-простотою-та-виразністю","Вибір архітектури — баланс між простотою та виразністю",[5191,11977,11978,11979,11982],{},"Для медичної діагностики критично важлива ",[5195,11980,11981],{},"інтерпретованість"," моделі. Надто складна мережа (сотні шарів) працюватиме як «чорна скринька» — лікарі не довірятимуть їй. Водночас надто проста модель (один шар) не зможе виявити нелінійні взаємодії ознак.",[5191,11984,11985],{},[5195,11986,11987],{},"Наша архітектура:",[11989,11990,11992],"plant-uml",{"alt":11991},"Архітектура нейронної мережі для передбачення серцевих захворювань",[5427,11993,11997],{"className":11994,"code":11995,"language":11996,"meta":5432,"style":5432},"language-plantuml shiki shiki-themes light-plus dark-plus dark-plus","@startuml\nskinparam style plain\nskinparam backgroundColor #FFFFFF\nskinparam defaultFontName \"SF Pro Display, Arial\"\n\n!define INPUT_COLOR #DBEAFE\n!define HIDDEN1_COLOR #FEF3C7\n!define HIDDEN2_COLOR #FECACA\n!define OUTPUT_COLOR #DCFCE7\n\nleft to right direction\n\npackage \"Вхідний шар\\n(13 клінічних ознак)\" as input #INPUT_COLOR {\n  rectangle \"age\" as i1\n  rectangle \"sex\" as i2\n  rectangle \"cp\" as i3\n  rectangle \"...\" as i_dots\n  rectangle \"thal\" as i13\n}\n\npackage \"Прихований шар 1\\n(64 нейрони, ReLU)\" as h1 #HIDDEN1_COLOR {\n  rectangle \"h₁⁽¹⁾\" as h11\n  rectangle \"h₂⁽¹⁾\" as h12\n  rectangle \"...\" as h1_dots\n  rectangle \"h₆₄⁽¹⁾\" as h164\n}\n\npackage \"Прихований шар 2\\n(32 нейрони, ReLU)\" as h2 #HIDDEN2_COLOR {\n  rectangle \"h₁⁽²⁾\" as h21\n  rectangle \"h₂⁽²⁾\" as h22\n  rectangle \"...\" as h2_dots\n  rectangle \"h₃₂⁽²⁾\" as h232\n}\n\npackage \"Вихідний шар\\n(1 нейрон, Sigmoid)\" as output #OUTPUT_COLOR {\n  rectangle \"P(хвороба)\" as y\n}\n\ni1 -right-> h11\ni2 -right-> h12\ni3 -right-> h1_dots\ni13 -right-> h164\n\nh11 -right-> h21\nh12 -right-> h22\nh1_dots -right-> h2_dots\nh164 -right-> h232\n\nh21 -right-> y\nh22 -right-> y\nh2_dots -right-> y\nh232 -right-> y\n\nnote bottom of input\n  **Масштабування:** StandardScaler\n  **Діапазон:** різнорідні одиниці\n  (вік у роках, холестерин у мг\u002Fдл)\nend note\n\nnote bottom of h1\n  **Активація:** ReLU\n  **Dropout:** 0.3 (30% нейронів)\n  **Призначення:** виявлення\n  комбінацій ознак\nend note\n\nnote bottom of h2\n  **Активація:** ReLU\n  **Dropout:** 0.2 (20% нейронів)\n  **Призначення:** абстрактні\n  клінічні патерни\nend note\n\nnote bottom of output\n  **Активація:** Sigmoid\n  **Вихід:** ймовірність [0, 1]\n  **Поріг рішення:** 0.5\n  (налаштовується для ROC)\nend note\n\n@enduml\n","plantuml",[5434,11998,11999,12004,12009,12014,12019,12023,12028,12033,12038,12043,12047,12052,12056,12061,12066,12071,12076,12081,12086,12091,12095,12100,12105,12110,12115,12120,12124,12128,12133,12138,12143,12148,12153,12157,12161,12166,12171,12175,12179,12184,12189,12194,12199,12203,12208,12213,12218,12223,12227,12232,12237,12242,12247,12251,12256,12262,12268,12274,12280,12285,12291,12297,12303,12309,12315,12320,12325,12331,12336,12342,12348,12354,12359,12364,12370,12376,12382,12388,12394,12399,12404],{"__ignoreMap":5432},[5437,12000,12001],{"class":5439,"line":5440},[5437,12002,12003],{},"@startuml\n",[5437,12005,12006],{"class":5439,"line":5457},[5437,12007,12008],{},"skinparam style plain\n",[5437,12010,12011],{"class":5439,"line":5470},[5437,12012,12013],{},"skinparam backgroundColor #FFFFFF\n",[5437,12015,12016],{"class":5439,"line":5477},[5437,12017,12018],{},"skinparam defaultFontName \"SF Pro Display, Arial\"\n",[5437,12020,12021],{"class":5439,"line":5498},[5437,12022,5474],{"emptyLinePlaceholder":5473},[5437,12024,12025],{"class":5439,"line":5516},[5437,12026,12027],{},"!define INPUT_COLOR #DBEAFE\n",[5437,12029,12030],{"class":5439,"line":5521},[5437,12031,12032],{},"!define HIDDEN1_COLOR #FEF3C7\n",[5437,12034,12035],{"class":5439,"line":5535},[5437,12036,12037],{},"!define HIDDEN2_COLOR #FECACA\n",[5437,12039,12040],{"class":5439,"line":5541},[5437,12041,12042],{},"!define OUTPUT_COLOR #DCFCE7\n",[5437,12044,12045],{"class":5439,"line":5554},[5437,12046,5474],{"emptyLinePlaceholder":5473},[5437,12048,12049],{"class":5439,"line":5559},[5437,12050,12051],{},"left to right direction\n",[5437,12053,12054],{"class":5439,"line":5566},[5437,12055,5474],{"emptyLinePlaceholder":5473},[5437,12057,12058],{"class":5439,"line":5588},[5437,12059,12060],{},"package \"Вхідний шар\\n(13 клінічних ознак)\" as input #INPUT_COLOR {\n",[5437,12062,12063],{"class":5439,"line":5593},[5437,12064,12065],{},"  rectangle \"age\" as i1\n",[5437,12067,12068],{"class":5439,"line":5599},[5437,12069,12070],{},"  rectangle \"sex\" as i2\n",[5437,12072,12073],{"class":5439,"line":5631},[5437,12074,12075],{},"  rectangle \"cp\" as i3\n",[5437,12077,12078],{"class":5439,"line":5636},[5437,12079,12080],{},"  rectangle \"...\" as i_dots\n",[5437,12082,12083],{"class":5439,"line":5642},[5437,12084,12085],{},"  rectangle \"thal\" as i13\n",[5437,12087,12088],{"class":5439,"line":5680},[5437,12089,12090],{},"}\n",[5437,12092,12093],{"class":5439,"line":5720},[5437,12094,5474],{"emptyLinePlaceholder":5473},[5437,12096,12097],{"class":5439,"line":5753},[5437,12098,12099],{},"package \"Прихований шар 1\\n(64 нейрони, ReLU)\" as h1 #HIDDEN1_COLOR {\n",[5437,12101,12102],{"class":5439,"line":5787},[5437,12103,12104],{},"  rectangle \"h₁⁽¹⁾\" as h11\n",[5437,12106,12107],{"class":5439,"line":5801},[5437,12108,12109],{},"  rectangle \"h₂⁽¹⁾\" as h12\n",[5437,12111,12112],{"class":5439,"line":5822},[5437,12113,12114],{},"  rectangle \"...\" as h1_dots\n",[5437,12116,12117],{"class":5439,"line":5840},[5437,12118,12119],{},"  rectangle \"h₆₄⁽¹⁾\" as h164\n",[5437,12121,12122],{"class":5439,"line":5869},[5437,12123,12090],{},[5437,12125,12126],{"class":5439,"line":5884},[5437,12127,5474],{"emptyLinePlaceholder":5473},[5437,12129,12130],{"class":5439,"line":5889},[5437,12131,12132],{},"package \"Прихований шар 2\\n(32 нейрони, ReLU)\" as h2 #HIDDEN2_COLOR {\n",[5437,12134,12135],{"class":5439,"line":5895},[5437,12136,12137],{},"  rectangle \"h₁⁽²⁾\" as h21\n",[5437,12139,12140],{"class":5439,"line":5927},[5437,12141,12142],{},"  rectangle \"h₂⁽²⁾\" as h22\n",[5437,12144,12145],{"class":5439,"line":5961},[5437,12146,12147],{},"  rectangle \"...\" as h2_dots\n",[5437,12149,12150],{"class":5439,"line":5995},[5437,12151,12152],{},"  rectangle \"h₃₂⁽²⁾\" as h232\n",[5437,12154,12155],{"class":5439,"line":6023},[5437,12156,12090],{},[5437,12158,12159],{"class":5439,"line":6028},[5437,12160,5474],{"emptyLinePlaceholder":5473},[5437,12162,12163],{"class":5439,"line":6034},[5437,12164,12165],{},"package \"Вихідний шар\\n(1 нейрон, Sigmoid)\" as output #OUTPUT_COLOR {\n",[5437,12167,12168],{"class":5439,"line":6044},[5437,12169,12170],{},"  rectangle \"P(хвороба)\" as y\n",[5437,12172,12173],{"class":5439,"line":6109},[5437,12174,12090],{},[5437,12176,12177],{"class":5439,"line":6154},[5437,12178,5474],{"emptyLinePlaceholder":5473},[5437,12180,12181],{"class":5439,"line":6196},[5437,12182,12183],{},"i1 -right-> h11\n",[5437,12185,12186],{"class":5439,"line":6224},[5437,12187,12188],{},"i2 -right-> h12\n",[5437,12190,12191],{"class":5439,"line":6229},[5437,12192,12193],{},"i3 -right-> h1_dots\n",[5437,12195,12196],{"class":5439,"line":6235},[5437,12197,12198],{},"i13 -right-> h164\n",[5437,12200,12201],{"class":5439,"line":6278},[5437,12202,5474],{"emptyLinePlaceholder":5473},[5437,12204,12205],{"class":5439,"line":6308},[5437,12206,12207],{},"h11 -right-> h21\n",[5437,12209,12210],{"class":5439,"line":6362},[5437,12211,12212],{},"h12 -right-> h22\n",[5437,12214,12215],{"class":5439,"line":6408},[5437,12216,12217],{},"h1_dots -right-> h2_dots\n",[5437,12219,12220],{"class":5439,"line":6413},[5437,12221,12222],{},"h164 -right-> h232\n",[5437,12224,12225],{"class":5439,"line":6427},[5437,12226,5474],{"emptyLinePlaceholder":5473},[5437,12228,12229],{"class":5439,"line":6445},[5437,12230,12231],{},"h21 -right-> y\n",[5437,12233,12234],{"class":5439,"line":6464},[5437,12235,12236],{},"h22 -right-> y\n",[5437,12238,12239],{"class":5439,"line":6491},[5437,12240,12241],{},"h2_dots -right-> y\n",[5437,12243,12244],{"class":5439,"line":6515},[5437,12245,12246],{},"h232 -right-> y\n",[5437,12248,12249],{"class":5439,"line":6520},[5437,12250,5474],{"emptyLinePlaceholder":5473},[5437,12252,12253],{"class":5439,"line":6526},[5437,12254,12255],{},"note bottom of input\n",[5437,12257,12259],{"class":5439,"line":12258},55,[5437,12260,12261],{},"  **Масштабування:** StandardScaler\n",[5437,12263,12265],{"class":5439,"line":12264},56,[5437,12266,12267],{},"  **Діапазон:** різнорідні одиниці\n",[5437,12269,12271],{"class":5439,"line":12270},57,[5437,12272,12273],{},"  (вік у роках, холестерин у мг\u002Fдл)\n",[5437,12275,12277],{"class":5439,"line":12276},58,[5437,12278,12279],{},"end note\n",[5437,12281,12283],{"class":5439,"line":12282},59,[5437,12284,5474],{"emptyLinePlaceholder":5473},[5437,12286,12288],{"class":5439,"line":12287},60,[5437,12289,12290],{},"note bottom of h1\n",[5437,12292,12294],{"class":5439,"line":12293},61,[5437,12295,12296],{},"  **Активація:** ReLU\n",[5437,12298,12300],{"class":5439,"line":12299},62,[5437,12301,12302],{},"  **Dropout:** 0.3 (30% нейронів)\n",[5437,12304,12306],{"class":5439,"line":12305},63,[5437,12307,12308],{},"  **Призначення:** виявлення\n",[5437,12310,12312],{"class":5439,"line":12311},64,[5437,12313,12314],{},"  комбінацій ознак\n",[5437,12316,12318],{"class":5439,"line":12317},65,[5437,12319,12279],{},[5437,12321,12323],{"class":5439,"line":12322},66,[5437,12324,5474],{"emptyLinePlaceholder":5473},[5437,12326,12328],{"class":5439,"line":12327},67,[5437,12329,12330],{},"note bottom of h2\n",[5437,12332,12334],{"class":5439,"line":12333},68,[5437,12335,12296],{},[5437,12337,12339],{"class":5439,"line":12338},69,[5437,12340,12341],{},"  **Dropout:** 0.2 (20% нейронів)\n",[5437,12343,12345],{"class":5439,"line":12344},70,[5437,12346,12347],{},"  **Призначення:** абстрактні\n",[5437,12349,12351],{"class":5439,"line":12350},71,[5437,12352,12353],{},"  клінічні патерни\n",[5437,12355,12357],{"class":5439,"line":12356},72,[5437,12358,12279],{},[5437,12360,12362],{"class":5439,"line":12361},73,[5437,12363,5474],{"emptyLinePlaceholder":5473},[5437,12365,12367],{"class":5439,"line":12366},74,[5437,12368,12369],{},"note bottom of output\n",[5437,12371,12373],{"class":5439,"line":12372},75,[5437,12374,12375],{},"  **Активація:** Sigmoid\n",[5437,12377,12379],{"class":5439,"line":12378},76,[5437,12380,12381],{},"  **Вихід:** ймовірність [0, 1]\n",[5437,12383,12385],{"class":5439,"line":12384},77,[5437,12386,12387],{},"  **Поріг рішення:** 0.5\n",[5437,12389,12391],{"class":5439,"line":12390},78,[5437,12392,12393],{},"  (налаштовується для ROC)\n",[5437,12395,12397],{"class":5439,"line":12396},79,[5437,12398,12279],{},[5437,12400,12402],{"class":5439,"line":12401},80,[5437,12403,5474],{"emptyLinePlaceholder":5473},[5437,12405,12407],{"class":5439,"line":12406},81,[5437,12408,12409],{},"@enduml\n",[5191,12411,12412],{},[5195,12413,12414],{},"Обґрунтування вибору:",[8983,12416,12417,12421,12428,12445,12448,12452,12459,12475,12481,12491,12495,12510,12517,12523,12527,12533,12541],{},[5311,12418,12420],{"id":12419},"крок-1-вхідний-шар-13-нейронів","Крок 1: Вхідний шар (13 нейронів)",[5191,12422,12423,12424,12427],{},"Кожна з 13 клінічних ознак отримує окремий нейрон. ",[5195,12425,12426],{},"Обов'язкове масштабування"," через StandardScaler, бо ознаки мають різні діапазони:",[5244,12429,12430,12435,12440],{},[5220,12431,12432,12434],{},[5434,12433,8995],{},": 29–77 (роки)",[5220,12436,12437,12439],{},[5434,12438,9057],{},": 126–564 (мг\u002Fдл)",[5220,12441,12442,12444],{},[5434,12443,9142],{},": 0–6.2 (мм депресії ST)",[5191,12446,12447],{},"Без масштабування великі значення холестерину «задавлять» малі значення oldpeak.",[5311,12449,12451],{"id":12450},"крок-2-прихований-шар-1-64-нейрони-relu","Крок 2: Прихований шар 1 (64 нейрони, ReLU)",[5191,12453,12454,12455,12458],{},"Перший прихований шар має ",[5195,12456,12457],{},"найбільшу ємність"," (64 нейрони). Його завдання:",[5244,12460,12461,12468],{},[5220,12462,12463,12464,12467],{},"Знаходити ",[5195,12465,12466],{},"лінійні комбінації"," вхідних ознак",[5220,12469,12470,12471,12474],{},"Виявляти ",[5195,12472,12473],{},"взаємодії між ознаками"," (наприклад: високий вік + високий холестерин = підвищений ризик)",[5191,12476,12477,12480],{},[5195,12478,12479],{},"Чому 64?"," Емпіричне правило: 2–5× від кількості входів. Для 13 ознак → 26–65 нейронів. Обрано 64 (степінь двійки для оптимізації обчислень).",[5191,12482,12483,12486,12487,12490],{},[5195,12484,12485],{},"Dropout 30%:"," Під час навчання випадково «вимикаємо» 30% нейронів на кожній ітерації. Це запобігає ",[5195,12488,12489],{},"перенавчанню"," — мережа не може покластися на один конкретний нейрон.",[5311,12492,12494],{"id":12493},"крок-3-прихований-шар-2-32-нейрони-relu","Крок 3: Прихований шар 2 (32 нейрони, ReLU)",[5191,12496,12497,12498,12501,12502,12505,12506,12509],{},"Другий шар має ",[5195,12499,12500],{},"вдвічі менше нейронів",". Це ",[5195,12503,12504],{},"звужуюча архітектура (bottleneck)"," — мережа змушена ",[5195,12507,12508],{},"стискати інформацію",", відкидаючи шум і залишаючи лише найважливіше.",[5191,12511,12512,12513,12516],{},"Аналогія: якщо перший шар виявив 64 різні комбінації ознак, другий шар обирає з них 32 найінформативніші клінічні ",[5195,12514,12515],{},"патерни"," (наприклад: «кластер ішемічних ознак», «профіль гіпертензії»).",[5191,12518,12519,12522],{},[5195,12520,12521],{},"Dropout 20%:"," менше, ніж у першому шарі, бо мережа вже навчилася узагальнювати.",[5311,12524,12526],{"id":12525},"крок-4-вихідний-шар-1-нейрон-sigmoid","Крок 4: Вихідний шар (1 нейрон, Sigmoid)",[5191,12528,12529,12530,12532],{},"Один нейрон з активацією ",[5195,12531,8531],{}," повертає ймовірність діагнозу:",[5244,12534,12535,12538],{},[5220,12536,12537],{},"Вихід 0.1 → 10% ймовірність хвороби (низький ризик)",[5220,12539,12540],{},"Вихід 0.9 → 90% ймовірність хвороби (високий ризик)",[5191,12542,12543,12546,12547,12550],{},[5195,12544,12545],{},"Поріг прийняття рішення:"," зазвичай 0.5, але для медичних застосувань можна знизити до 0.3–0.4, щоб ",[5195,12548,12549],{},"не пропустити хворих"," (краще зайва перестраховка, ніж пропущений інфаркт).",[5297,12552],{},[5311,12554,12556],{"id":12555},"функція-втрат-та-оптимізатор","Функція втрат та оптимізатор",[5191,12558,12559],{},[5195,12560,5282],{},[5191,12562,12563,12564,12567],{},"Для бінарної класифікації використовуємо ",[5195,12565,12566],{},"логістичну функцію втрат"," (Binary Cross-Entropy, BCE):",[5323,12569],{"tex":12570},"\\mathcal{L}(y, \\hat{y}) = -\\frac{1}{N} \\sum_{i=1}^{N} \\left[ y_i \\log(\\hat{y}_i) + (1 - y_i) \\log(1 - \\hat{y}_i) \\right]",[5191,12572,12573],{},"Де:",[5244,12575,12576,12585,12591],{},[5220,12577,12578,12581,12582],{},[5323,12579],{"tex":12580,":inline":5332},"y_i \\in \\{0, 1\\}"," — справжній діагноз пацієнта ",[5323,12583],{"tex":12584,":inline":5332},"i",[5220,12586,12587,12590],{},[5323,12588],{"tex":12589,":inline":5332},"\\hat{y}_i \\in (0, 1)"," — передбачена ймовірність хвороби",[5220,12592,12593,12596],{},[5323,12594],{"tex":12595,":inline":5332},"N"," — кількість пацієнтів у батчі",[5191,12598,12599,12602,12603,12606],{},[5195,12600,12601],{},"Інтуїція:"," BCE ",[5195,12604,12605],{},"сильно штрафує"," модель за впевнені неправильні передбачення:",[5244,12608,12609,12624],{},[5220,12610,12611,12612,12615,12616,12619,12620,12623],{},"Якщо справжній діагноз ",[5323,12613],{"tex":12614,":inline":5332},"y=1"," (хворий), а модель передбачила ",[5323,12617],{"tex":12618,":inline":5332},"\\hat{y}=0.01"," (майже впевнена, що здоровий), то ",[5323,12621],{"tex":12622,":inline":5332},"-\\log(0.01) \\approx 4.6"," — велика втрата",[5220,12625,12626,12627,12630,12631,12634],{},"Якщо ",[5323,12628],{"tex":12629,":inline":5332},"\\hat{y}=0.99"," (правильно), то ",[5323,12632],{"tex":12633,":inline":5332},"-\\log(0.99) \\approx 0.01"," — мінімальна втрата",[5191,12636,12637],{},[5195,12638,12639],{},"Оптимізатор Adam:",[5191,12641,12642,12643,12646],{},"Використовуємо ",[5195,12644,12645],{},"Adam"," (Adaptive Moment Estimation) — найпопулярніший оптимізатор для нейронних мереж:",[5323,12648],{"tex":12649},"\\theta_{t+1} = \\theta_t - \\frac{\\alpha}{\\sqrt{\\hat{v}_t} + \\epsilon} \\hat{m}_t",[5191,12651,12573],{},[5244,12653,12654,12663,12672],{},[5220,12655,12656,12659,12660,8475],{},[5323,12657],{"tex":12658,":inline":5332},"\\hat{m}_t"," — експоненційне ковзне середнє градієнтів (",[5195,12661,12662],{},"momentum",[5220,12664,12665,12668,12669,8475],{},[5323,12666],{"tex":12667,":inline":5332},"\\hat{v}_t"," — експоненційне ковзне середнє квадратів градієнтів (",[5195,12670,12671],{},"adaptive learning rate",[5220,12673,12674,12676],{},[5323,12675],{"tex":7741,":inline":5332}," — базовий learning rate (обираємо 0.001)",[5191,12678,12679],{},[5195,12680,12681],{},"Переваги Adam над звичайним SGD:",[5217,12683,12684,12690,12696],{},[5220,12685,12686,12689],{},[5195,12687,12688],{},"Автоматичне налаштування learning rate"," для кожного параметра (для «повільних» ознак — більший крок, для «швидких» — менший)",[5220,12691,12692,12695],{},[5195,12693,12694],{},"Momentum"," — «розгойдує» оптимізацію через локальні мінімуми",[5220,12697,12698,12701],{},[5195,12699,12700],{},"Не вимагає ручного налаштування"," learning rate schedule",[6660,12703,12704,12709],{},[5191,12705,12706],{},[5195,12707,12708],{},"Гіперпараметри для нашої моделі:",[5244,12710,12711,12717,12723,12729],{},[5220,12712,12713,12716],{},[5195,12714,12715],{},"Learning rate:"," 0.001 (стандарт для Adam)",[5220,12718,12719,12722],{},[5195,12720,12721],{},"Batch size:"," 32 (компроміс між стабільністю та швидкістю)",[5220,12724,12725,12728],{},[5195,12726,12727],{},"Epochs:"," 200 (з early stopping — зупинимося раніше при перенавчанні)",[5220,12730,12731,12734],{},[5195,12732,12733],{},"Early stopping patience:"," 20 (якщо валідаційна loss не покращується 20 епох — зупиняємо)",[5297,12736],{},[5186,12738,12740],{"id":12739},"реалізація-моделі-на-pytorch","Реалізація моделі на PyTorch",[5191,12742,12743],{},"Тепер перейдемо до коду. Будуємо нейронну мережу на PyTorch — найпопулярнішому фреймворку для глибокого навчання.",[5311,12745,12747],{"id":12746},"підготовка-даних-та-розбиття-на-trainvaltest","Підготовка даних та розбиття на train\u002Fval\u002Ftest",[5417,12749,12751,13010,13285,13755],{"kernel":5419,"title":12750},"heart_disease_model.ipynb",[5422,12752,12753,12947],{"execution-count":5424},[5427,12754,12756],{"className":5429,"code":12755,"language":5431,"meta":5432,"style":5432},"import torch\nimport torch.nn as nn\nimport torch.optim as optim\nfrom torch.utils.data import TensorDataset, DataLoader\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, roc_auc_score, confusion_matrix\nimport numpy as np\nimport pandas as pd\n\n# Перевірка доступності GPU\ndevice = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\nprint(f\"Використовуємо пристрій: {device}\")\nif device.type == 'cuda':\n    print(f\"GPU: {torch.cuda.get_device_name(0)}\")\n",[5434,12757,12758,12765,12777,12789,12802,12814,12826,12838,12848,12858,12862,12867,12888,12910,12921],{"__ignoreMap":5432},[5437,12759,12760,12762],{"class":5439,"line":5440},[5437,12761,5444],{"class":5443},[5437,12763,12764],{"class":5447}," torch\n",[5437,12766,12767,12769,12772,12774],{"class":5439,"line":5457},[5437,12768,5444],{"class":5443},[5437,12770,12771],{"class":5447}," torch.nn ",[5437,12773,5451],{"class":5443},[5437,12775,12776],{"class":5447}," nn\n",[5437,12778,12779,12781,12784,12786],{"class":5439,"line":5470},[5437,12780,5444],{"class":5443},[5437,12782,12783],{"class":5447}," torch.optim ",[5437,12785,5451],{"class":5443},[5437,12787,12788],{"class":5447}," optim\n",[5437,12790,12791,12794,12797,12799],{"class":5439,"line":5477},[5437,12792,12793],{"class":5443},"from",[5437,12795,12796],{"class":5447}," torch.utils.data ",[5437,12798,5444],{"class":5443},[5437,12800,12801],{"class":5447}," TensorDataset, DataLoader\n",[5437,12803,12804,12806,12809,12811],{"class":5439,"line":5498},[5437,12805,12793],{"class":5443},[5437,12807,12808],{"class":5447}," sklearn.model_selection ",[5437,12810,5444],{"class":5443},[5437,12812,12813],{"class":5447}," train_test_split\n",[5437,12815,12816,12818,12821,12823],{"class":5439,"line":5516},[5437,12817,12793],{"class":5443},[5437,12819,12820],{"class":5447}," sklearn.preprocessing ",[5437,12822,5444],{"class":5443},[5437,12824,12825],{"class":5447}," StandardScaler\n",[5437,12827,12828,12830,12833,12835],{"class":5439,"line":5521},[5437,12829,12793],{"class":5443},[5437,12831,12832],{"class":5447}," sklearn.metrics ",[5437,12834,5444],{"class":5443},[5437,12836,12837],{"class":5447}," accuracy_score, precision_score, recall_score, f1_score, roc_auc_score, confusion_matrix\n",[5437,12839,12840,12842,12844,12846],{"class":5439,"line":5535},[5437,12841,5444],{"class":5443},[5437,12843,5448],{"class":5447},[5437,12845,5451],{"class":5443},[5437,12847,5454],{"class":5447},[5437,12849,12850,12852,12854,12856],{"class":5439,"line":5541},[5437,12851,5444],{"class":5443},[5437,12853,9260],{"class":5447},[5437,12855,5451],{"class":5443},[5437,12857,9265],{"class":5447},[5437,12859,12860],{"class":5439,"line":5554},[5437,12861,5474],{"emptyLinePlaceholder":5473},[5437,12863,12864],{"class":5439,"line":5559},[5437,12865,12866],{"class":5562},"# Перевірка доступності GPU\n",[5437,12868,12869,12872,12875,12878,12881,12883,12886],{"class":5439,"line":5566},[5437,12870,12871],{"class":5447},"device = torch.device(",[5437,12873,12874],{"class":5654},"'cuda'",[5437,12876,12877],{"class":5443}," if",[5437,12879,12880],{"class":5447}," torch.cuda.is_available() ",[5437,12882,10027],{"class":5443},[5437,12884,12885],{"class":5654}," 'cpu'",[5437,12887,5585],{"class":5447},[5437,12889,12890,12892,12894,12896,12899,12901,12904,12906,12908],{"class":5439,"line":5588},[5437,12891,9488],{"class":5484},[5437,12893,5488],{"class":5447},[5437,12895,6082],{"class":5480},[5437,12897,12898],{"class":5654},"\"Використовуємо пристрій: ",[5437,12900,6095],{"class":5480},[5437,12902,12903],{"class":5447},"device",[5437,12905,9555],{"class":5480},[5437,12907,9537],{"class":5654},[5437,12909,5585],{"class":5447},[5437,12911,12912,12914,12917,12919],{"class":5439,"line":5593},[5437,12913,9993],{"class":5443},[5437,12915,12916],{"class":5447}," device.type == ",[5437,12918,12874],{"class":5654},[5437,12920,10004],{"class":5447},[5437,12922,12923,12925,12927,12929,12932,12934,12937,12939,12941,12943,12945],{"class":5439,"line":5599},[5437,12924,10009],{"class":5484},[5437,12926,5488],{"class":5447},[5437,12928,6082],{"class":5480},[5437,12930,12931],{"class":5654},"\"GPU: ",[5437,12933,6095],{"class":5480},[5437,12935,12936],{"class":5447},"torch.cuda.get_device_name(",[5437,12938,5686],{"class":5504},[5437,12940,8475],{"class":5447},[5437,12942,9555],{"class":5480},[5437,12944,9537],{"class":5654},[5437,12946,5585],{"class":5447},[6531,12948,12949],{"v-slot:output":5432},[8489,12950,12951,12964],{},[8492,12952,12953],{},[8495,12954,12955,12958,12961],{},[8498,12956,12957],{"align":8500},"Параметр системи",[8498,12959,12960],{"align":8500},"Значення",[8498,12962,12963],{"align":8510},"Статус",[8522,12965,12966,12983,12998],{},[8495,12967,12968,12975,12980],{},[8527,12969,12970],{"align":8500},[5195,12971,12972,12973,8475],{},"Вибраний пристрій (",[5434,12974,12903],{},[8527,12976,12977],{"align":8500},[5434,12978,12979],{},"cpu",[8527,12981,12982],{"align":8510},"✅ Готово до обчислень",[8495,12984,12985,12990,12995],{},[8527,12986,12987],{"align":8500},[5195,12988,12989],{},"Підтримка PyTorch",[8527,12991,12992],{"align":8500},[5434,12993,12994],{},"2.1.0+",[8527,12996,12997],{"align":8510},"⚡ Активовано",[8495,12999,13000,13005,13007],{},[8527,13001,13002],{"align":8500},[5195,13003,13004],{},"Тип моделі",[8527,13006,11970],{"align":8500},[8527,13008,13009],{"align":8510},"Tabular Deep Learning",[5422,13011,13012,13236],{"execution-count":5609},[5427,13013,13015],{"className":5429,"code":13014,"language":5431,"meta":5432,"style":5432},"# Завантаження очищеного датасету (з попередньої секції)\ncolumn_names = ['age', 'sex', 'cp', 'trestbps', 'chol', 'fbs', \n                'restecg', 'thalach', 'exang', 'oldpeak', 'slope', \n                'ca', 'thal', 'target']\nurl = 'https:\u002F\u002Farchive.ics.uci.edu\u002Fml\u002Fmachine-learning-databases\u002Fheart-disease\u002Fprocessed.cleveland.data'\ndf = pd.read_csv(url, names=column_names, na_values='?').dropna()\ndf['target'] = (df['target'] > 0).astype(int)\n\n# Розділення на ознаки (X) та цільову змінну (y)\nX = df.drop('target', axis=1).values\ny = df['target'].values\n\nprint(f\"Розмір датасету: {X.shape[0]} пацієнтів × {X.shape[1]} ознак\")\nprint(f\"Розподіл класів: {np.bincount(y)} (0=здорові, 1=хворі)\")\n",[5434,13016,13017,13022,13051,13074,13089,13095,13112,13134,13138,13143,13161,13171,13175,13213],{"__ignoreMap":5432},[5437,13018,13019],{"class":5439,"line":5440},[5437,13020,13021],{"class":5562},"# Завантаження очищеного датасету (з попередньої секції)\n",[5437,13023,13024,13027,13029,13031,13033,13035,13037,13039,13041,13043,13045,13047,13049],{"class":5439,"line":5457},[5437,13025,13026],{"class":5447},"column_names = [",[5437,13028,11142],{"class":5654},[5437,13030,5575],{"class":5447},[5437,13032,9372],{"class":5654},[5437,13034,5575],{"class":5447},[5437,13036,9377],{"class":5654},[5437,13038,5575],{"class":5447},[5437,13040,9382],{"class":5654},[5437,13042,5575],{"class":5447},[5437,13044,9387],{"class":5654},[5437,13046,5575],{"class":5447},[5437,13048,9392],{"class":5654},[5437,13050,7436],{"class":5447},[5437,13052,13053,13056,13058,13060,13062,13064,13066,13068,13070,13072],{"class":5439,"line":5470},[5437,13054,13055],{"class":5654},"                'restecg'",[5437,13057,5575],{"class":5447},[5437,13059,9404],{"class":5654},[5437,13061,5575],{"class":5447},[5437,13063,9409],{"class":5654},[5437,13065,5575],{"class":5447},[5437,13067,9414],{"class":5654},[5437,13069,5575],{"class":5447},[5437,13071,9419],{"class":5654},[5437,13073,7436],{"class":5447},[5437,13075,13076,13079,13081,13083,13085,13087],{"class":5439,"line":5477},[5437,13077,13078],{"class":5654},"                'ca'",[5437,13080,5575],{"class":5447},[5437,13082,9431],{"class":5654},[5437,13084,5575],{"class":5447},[5437,13086,10455],{"class":5654},[5437,13088,9441],{"class":5447},[5437,13090,13091,13093],{"class":5439,"line":5498},[5437,13092,9455],{"class":5447},[5437,13094,9458],{"class":5654},[5437,13096,13097,13099,13101,13103,13105,13107,13109],{"class":5439,"line":5516},[5437,13098,9463],{"class":5447},[5437,13100,9466],{"class":5491},[5437,13102,9469],{"class":5447},[5437,13104,9472],{"class":5491},[5437,13106,5651],{"class":5447},[5437,13108,9477],{"class":5654},[5437,13110,13111],{"class":5447},").dropna()\n",[5437,13113,13114,13117,13119,13122,13124,13126,13128,13130,13132],{"class":5439,"line":5521},[5437,13115,13116],{"class":5447},"df[",[5437,13118,10455],{"class":5654},[5437,13120,13121],{"class":5447},"] = (df[",[5437,13123,10455],{"class":5654},[5437,13125,10463],{"class":5447},[5437,13127,5686],{"class":5504},[5437,13129,10468],{"class":5447},[5437,13131,10471],{"class":6162},[5437,13133,5585],{"class":5447},[5437,13135,13136],{"class":5439,"line":5535},[5437,13137,5474],{"emptyLinePlaceholder":5473},[5437,13139,13140],{"class":5439,"line":5541},[5437,13141,13142],{"class":5562},"# Розділення на ознаки (X) та цільову змінну (y)\n",[5437,13144,13145,13148,13150,13152,13154,13156,13158],{"class":5439,"line":5554},[5437,13146,13147],{"class":5447},"X = df.drop(",[5437,13149,10455],{"class":5654},[5437,13151,5575],{"class":5447},[5437,13153,11608],{"class":5491},[5437,13155,5651],{"class":5447},[5437,13157,5424],{"class":5504},[5437,13159,13160],{"class":5447},").values\n",[5437,13162,13163,13166,13168],{"class":5439,"line":5559},[5437,13164,13165],{"class":5447},"y = df[",[5437,13167,10455],{"class":5654},[5437,13169,13170],{"class":5447},"].values\n",[5437,13172,13173],{"class":5439,"line":5566},[5437,13174,5474],{"emptyLinePlaceholder":5473},[5437,13176,13177,13179,13181,13183,13186,13188,13191,13193,13195,13197,13199,13201,13203,13205,13207,13209,13211],{"class":5439,"line":5588},[5437,13178,9488],{"class":5484},[5437,13180,5488],{"class":5447},[5437,13182,6082],{"class":5480},[5437,13184,13185],{"class":5654},"\"Розмір датасету: ",[5437,13187,6095],{"class":5480},[5437,13189,13190],{"class":5447},"X.shape[",[5437,13192,5686],{"class":5504},[5437,13194,9552],{"class":5447},[5437,13196,9555],{"class":5480},[5437,13198,9558],{"class":5654},[5437,13200,6095],{"class":5480},[5437,13202,13190],{"class":5447},[5437,13204,5424],{"class":5504},[5437,13206,9552],{"class":5447},[5437,13208,9555],{"class":5480},[5437,13210,9571],{"class":5654},[5437,13212,5585],{"class":5447},[5437,13214,13215,13217,13219,13221,13224,13226,13229,13231,13234],{"class":5439,"line":5593},[5437,13216,9488],{"class":5484},[5437,13218,5488],{"class":5447},[5437,13220,6082],{"class":5480},[5437,13222,13223],{"class":5654},"\"Розподіл класів: ",[5437,13225,6095],{"class":5480},[5437,13227,13228],{"class":5447},"np.bincount(y)",[5437,13230,9555],{"class":5480},[5437,13232,13233],{"class":5654}," (0=здорові, 1=хворі)\"",[5437,13235,5585],{"class":5447},[6531,13237,13238],{"v-slot:output":5432},[8489,13239,13240,13253],{},[8492,13241,13242],{},[8495,13243,13244,13247,13250],{},[8498,13245,13246],{"align":8500},"Структура матриць",[8498,13248,13249],{"align":8510},"Розмірність тензора",[8498,13251,13252],{"align":8500},"Опис даних",[8522,13254,13255,13270],{},[8495,13256,13257,13262,13267],{},[8527,13258,13259],{"align":8500},[5195,13260,13261],{},"Матриця ознак ($X$)",[8527,13263,13264],{"align":8510},[5434,13265,13266],{},"(297, 13)",[8527,13268,13269],{"align":8500},"13 клінічних параметрів пацієнтів",[8495,13271,13272,13277,13282],{},[8527,13273,13274],{"align":8500},[5195,13275,13276],{},"Вектор цілей ($y$)",[8527,13278,13279],{"align":8510},[5434,13280,13281],{},"(297,)",[8527,13283,13284],{"align":8500},"Бінарний діагноз (0 = здорові: 160, 1 = хворі: 137)",[5422,13286,13287,13632],{"execution-count":5665},[5427,13288,13290],{"className":5429,"code":13289,"language":5431,"meta":5432,"style":5432},"# Розбиття на train (70%), validation (15%), test (15%)\nX_temp, X_test, y_temp, y_test = train_test_split(X, y, test_size=0.15, random_state=42, stratify=y)\nX_train, X_val, y_train, y_val = train_test_split(X_temp, y_temp, test_size=0.176, random_state=42, stratify=y_temp)\n# 0.176 від 85% ≈ 15% від загального датасету\n\nprint(\"Розбиття датасету:\")\nprint(f\"  Train:      {X_train.shape[0]} зразків ({X_train.shape[0]\u002FX.shape[0]*100:.1f}%)\")\nprint(f\"  Validation: {X_val.shape[0]} зразків ({X_val.shape[0]\u002FX.shape[0]*100:.1f}%)\")\nprint(f\"  Test:       {X_test.shape[0]} зразків ({X_test.shape[0]\u002FX.shape[0]*100:.1f}%)\")\n\n# Перевірка балансу класів у кожній вибірці\nprint(\"\\nБаланс класів:\")\nprint(f\"  Train:      {np.bincount(y_train)} → {y_train.mean()*100:.1f}% хворих\")\nprint(f\"  Validation: {np.bincount(y_val)} → {y_val.mean()*100:.1f}% хворих\")\nprint(f\"  Test:       {np.bincount(y_test)} → {y_test.mean()*100:.1f}% хворих\")\n",[5434,13291,13292,13297,13327,13354,13359,13363,13374,13422,13466,13510,13514,13519,13534,13568,13600],{"__ignoreMap":5432},[5437,13293,13294],{"class":5439,"line":5440},[5437,13295,13296],{"class":5562},"# Розбиття на train (70%), validation (15%), test (15%)\n",[5437,13298,13299,13302,13305,13307,13309,13311,13314,13316,13319,13321,13324],{"class":5439,"line":5457},[5437,13300,13301],{"class":5447},"X_temp, X_test, y_temp, y_test = train_test_split(X, y, ",[5437,13303,13304],{"class":5491},"test_size",[5437,13306,5651],{"class":5447},[5437,13308,6255],{"class":5504},[5437,13310,5575],{"class":5447},[5437,13312,13313],{"class":5491},"random_state",[5437,13315,5651],{"class":5447},[5437,13317,13318],{"class":5504},"42",[5437,13320,5575],{"class":5447},[5437,13322,13323],{"class":5491},"stratify",[5437,13325,13326],{"class":5447},"=y)\n",[5437,13328,13329,13332,13334,13336,13339,13341,13343,13345,13347,13349,13351],{"class":5439,"line":5470},[5437,13330,13331],{"class":5447},"X_train, X_val, y_train, y_val = train_test_split(X_temp, y_temp, ",[5437,13333,13304],{"class":5491},[5437,13335,5651],{"class":5447},[5437,13337,13338],{"class":5504},"0.176",[5437,13340,5575],{"class":5447},[5437,13342,13313],{"class":5491},[5437,13344,5651],{"class":5447},[5437,13346,13318],{"class":5504},[5437,13348,5575],{"class":5447},[5437,13350,13323],{"class":5491},[5437,13352,13353],{"class":5447},"=y_temp)\n",[5437,13355,13356],{"class":5439,"line":5477},[5437,13357,13358],{"class":5562},"# 0.176 від 85% ≈ 15% від загального датасету\n",[5437,13360,13361],{"class":5439,"line":5498},[5437,13362,5474],{"emptyLinePlaceholder":5473},[5437,13364,13365,13367,13369,13372],{"class":5439,"line":5516},[5437,13366,9488],{"class":5484},[5437,13368,5488],{"class":5447},[5437,13370,13371],{"class":5654},"\"Розбиття датасету:\"",[5437,13373,5585],{"class":5447},[5437,13375,13376,13378,13380,13382,13385,13387,13390,13392,13394,13396,13399,13401,13403,13405,13408,13410,13413,13415,13417,13420],{"class":5439,"line":5521},[5437,13377,9488],{"class":5484},[5437,13379,5488],{"class":5447},[5437,13381,6082],{"class":5480},[5437,13383,13384],{"class":5654},"\"  Train:      ",[5437,13386,6095],{"class":5480},[5437,13388,13389],{"class":5447},"X_train.shape[",[5437,13391,5686],{"class":5504},[5437,13393,9552],{"class":5447},[5437,13395,9555],{"class":5480},[5437,13397,13398],{"class":5654}," зразків (",[5437,13400,6095],{"class":5480},[5437,13402,13389],{"class":5447},[5437,13404,5686],{"class":5504},[5437,13406,13407],{"class":5447},"]\u002FX.shape[",[5437,13409,5686],{"class":5504},[5437,13411,13412],{"class":5447},"]*",[5437,13414,10531],{"class":5504},[5437,13416,10534],{"class":5480},[5437,13418,13419],{"class":5654},"%)\"",[5437,13421,5585],{"class":5447},[5437,13423,13424,13426,13428,13430,13433,13435,13438,13440,13442,13444,13446,13448,13450,13452,13454,13456,13458,13460,13462,13464],{"class":5439,"line":5535},[5437,13425,9488],{"class":5484},[5437,13427,5488],{"class":5447},[5437,13429,6082],{"class":5480},[5437,13431,13432],{"class":5654},"\"  Validation: ",[5437,13434,6095],{"class":5480},[5437,13436,13437],{"class":5447},"X_val.shape[",[5437,13439,5686],{"class":5504},[5437,13441,9552],{"class":5447},[5437,13443,9555],{"class":5480},[5437,13445,13398],{"class":5654},[5437,13447,6095],{"class":5480},[5437,13449,13437],{"class":5447},[5437,13451,5686],{"class":5504},[5437,13453,13407],{"class":5447},[5437,13455,5686],{"class":5504},[5437,13457,13412],{"class":5447},[5437,13459,10531],{"class":5504},[5437,13461,10534],{"class":5480},[5437,13463,13419],{"class":5654},[5437,13465,5585],{"class":5447},[5437,13467,13468,13470,13472,13474,13477,13479,13482,13484,13486,13488,13490,13492,13494,13496,13498,13500,13502,13504,13506,13508],{"class":5439,"line":5541},[5437,13469,9488],{"class":5484},[5437,13471,5488],{"class":5447},[5437,13473,6082],{"class":5480},[5437,13475,13476],{"class":5654},"\"  Test:       ",[5437,13478,6095],{"class":5480},[5437,13480,13481],{"class":5447},"X_test.shape[",[5437,13483,5686],{"class":5504},[5437,13485,9552],{"class":5447},[5437,13487,9555],{"class":5480},[5437,13489,13398],{"class":5654},[5437,13491,6095],{"class":5480},[5437,13493,13481],{"class":5447},[5437,13495,5686],{"class":5504},[5437,13497,13407],{"class":5447},[5437,13499,5686],{"class":5504},[5437,13501,13412],{"class":5447},[5437,13503,10531],{"class":5504},[5437,13505,10534],{"class":5480},[5437,13507,13419],{"class":5654},[5437,13509,5585],{"class":5447},[5437,13511,13512],{"class":5439,"line":5554},[5437,13513,5474],{"emptyLinePlaceholder":5473},[5437,13515,13516],{"class":5439,"line":5559},[5437,13517,13518],{"class":5562},"# Перевірка балансу класів у кожній вибірці\n",[5437,13520,13521,13523,13525,13527,13529,13532],{"class":5439,"line":5566},[5437,13522,9488],{"class":5484},[5437,13524,5488],{"class":5447},[5437,13526,9537],{"class":5654},[5437,13528,6126],{"class":6088},[5437,13530,13531],{"class":5654},"Баланс класів:\"",[5437,13533,5585],{"class":5447},[5437,13535,13536,13538,13540,13542,13544,13546,13549,13551,13554,13556,13559,13561,13563,13566],{"class":5439,"line":5588},[5437,13537,9488],{"class":5484},[5437,13539,5488],{"class":5447},[5437,13541,6082],{"class":5480},[5437,13543,13384],{"class":5654},[5437,13545,6095],{"class":5480},[5437,13547,13548],{"class":5447},"np.bincount(y_train)",[5437,13550,9555],{"class":5480},[5437,13552,13553],{"class":5654}," → ",[5437,13555,6095],{"class":5480},[5437,13557,13558],{"class":5447},"y_train.mean()*",[5437,13560,10531],{"class":5504},[5437,13562,10534],{"class":5480},[5437,13564,13565],{"class":5654},"% хворих\"",[5437,13567,5585],{"class":5447},[5437,13569,13570,13572,13574,13576,13578,13580,13583,13585,13587,13589,13592,13594,13596,13598],{"class":5439,"line":5593},[5437,13571,9488],{"class":5484},[5437,13573,5488],{"class":5447},[5437,13575,6082],{"class":5480},[5437,13577,13432],{"class":5654},[5437,13579,6095],{"class":5480},[5437,13581,13582],{"class":5447},"np.bincount(y_val)",[5437,13584,9555],{"class":5480},[5437,13586,13553],{"class":5654},[5437,13588,6095],{"class":5480},[5437,13590,13591],{"class":5447},"y_val.mean()*",[5437,13593,10531],{"class":5504},[5437,13595,10534],{"class":5480},[5437,13597,13565],{"class":5654},[5437,13599,5585],{"class":5447},[5437,13601,13602,13604,13606,13608,13610,13612,13615,13617,13619,13621,13624,13626,13628,13630],{"class":5439,"line":5599},[5437,13603,9488],{"class":5484},[5437,13605,5488],{"class":5447},[5437,13607,6082],{"class":5480},[5437,13609,13476],{"class":5654},[5437,13611,6095],{"class":5480},[5437,13613,13614],{"class":5447},"np.bincount(y_test)",[5437,13616,9555],{"class":5480},[5437,13618,13553],{"class":5654},[5437,13620,6095],{"class":5480},[5437,13622,13623],{"class":5447},"y_test.mean()*",[5437,13625,10531],{"class":5504},[5437,13627,10534],{"class":5480},[5437,13629,13565],{"class":5654},[5437,13631,5585],{"class":5447},[6531,13633,13634],{"v-slot:output":5432},[8489,13635,13636,13657],{},[8492,13637,13638],{},[8495,13639,13640,13643,13645,13648,13654],{},[8498,13641,13642],{"align":8500},"Підвибірка",[8498,13644,10553],{"align":8510},[8498,13646,13647],{"align":8510},"Відсоток вибірки",[8498,13649,13650,13651],{"align":8510},"Баланс класів ",[5437,13652,13653],{},"Здорові \u002F Хворі",[8498,13655,13656],{"align":8510},"Частка хворих",[8522,13658,13659,13686,13713,13736],{},[8495,13660,13661,13666,13673,13676,13681],{},[8527,13662,13663],{"align":8500},[5195,13664,13665],{},"Навчальна (Train)",[8527,13667,13668],{"align":8510},[5195,13669,13670],{},[5434,13671,13672],{},"207",[8527,13674,13675],{"align":8510},"69.7%",[8527,13677,13678],{"align":8510},[5434,13679,13680],{},"[112  95]",[8527,13682,13683],{"align":8510},[5195,13684,13685],{},"45.9%",[8495,13687,13688,13693,13700,13703,13708],{},[8527,13689,13690],{"align":8500},[5195,13691,13692],{},"Валідаційна (Validation)",[8527,13694,13695],{"align":8510},[5195,13696,13697],{},[5434,13698,13699],{},"45",[8527,13701,13702],{"align":8510},"15.2%",[8527,13704,13705],{"align":8510},[5434,13706,13707],{},"[ 24  21]",[8527,13709,13710],{"align":8510},[5195,13711,13712],{},"46.7%",[8495,13714,13715,13720,13726,13728,13732],{},[8527,13716,13717],{"align":8500},[5195,13718,13719],{},"Тестова (Test)",[8527,13721,13722],{"align":8510},[5195,13723,13724],{},[5434,13725,13699],{},[8527,13727,13702],{"align":8510},[8527,13729,13730],{"align":8510},[5434,13731,13707],{},[8527,13733,13734],{"align":8510},[5195,13735,13712],{},[8495,13737,13738,13746,13748,13750,13752],{},[8527,13739,13740],{"align":8500},[5195,13741,13742,13743,8475],{},"Стратифікація (",[5434,13744,13745],{},"stratify=y",[8527,13747,10383],{"align":8510},[8527,13749,10383],{"align":8510},[8527,13751,10383],{"align":8510},[8527,13753,13754],{"align":8510},"✅ Баланс класів ідеально збережено",[5422,13756,13757,13921],{"execution-count":8134},[5427,13758,13760],{"className":5429,"code":13759,"language":5431,"meta":5432,"style":5432},"# Масштабування ознак (критично для нейронних мереж!)\nscaler = StandardScaler()\nX_train_scaled = scaler.fit_transform(X_train)  # Fit лише на train!\nX_val_scaled = scaler.transform(X_val)\nX_test_scaled = scaler.transform(X_test)\n\nprint(\"Масштабування завершено. Приклад трансформації:\")\nprint(f\"  Оригінальне середнє (train): {X_train.mean(axis=0)[:3].round(2)}\")\nprint(f\"  Після масштабування (train): {X_train_scaled.mean(axis=0)[:3].round(6)}\")\nprint(f\"  Стандартне відхилення (train): {X_train_scaled.std(axis=0)[:3].round(2)}\")\n",[5434,13761,13762,13767,13772,13780,13785,13790,13794,13805,13845,13883],{"__ignoreMap":5432},[5437,13763,13764],{"class":5439,"line":5440},[5437,13765,13766],{"class":5562},"# Масштабування ознак (критично для нейронних мереж!)\n",[5437,13768,13769],{"class":5439,"line":5457},[5437,13770,13771],{"class":5447},"scaler = StandardScaler()\n",[5437,13773,13774,13777],{"class":5439,"line":5470},[5437,13775,13776],{"class":5447},"X_train_scaled = scaler.fit_transform(X_train)  ",[5437,13778,13779],{"class":5562},"# Fit лише на train!\n",[5437,13781,13782],{"class":5439,"line":5477},[5437,13783,13784],{"class":5447},"X_val_scaled = scaler.transform(X_val)\n",[5437,13786,13787],{"class":5439,"line":5498},[5437,13788,13789],{"class":5447},"X_test_scaled = scaler.transform(X_test)\n",[5437,13791,13792],{"class":5439,"line":5516},[5437,13793,5474],{"emptyLinePlaceholder":5473},[5437,13795,13796,13798,13800,13803],{"class":5439,"line":5521},[5437,13797,9488],{"class":5484},[5437,13799,5488],{"class":5447},[5437,13801,13802],{"class":5654},"\"Масштабування завершено. Приклад трансформації:\"",[5437,13804,5585],{"class":5447},[5437,13806,13807,13809,13811,13813,13816,13818,13821,13823,13825,13827,13830,13832,13835,13837,13839,13841,13843],{"class":5439,"line":5535},[5437,13808,9488],{"class":5484},[5437,13810,5488],{"class":5447},[5437,13812,6082],{"class":5480},[5437,13814,13815],{"class":5654},"\"  Оригінальне середнє (train): ",[5437,13817,6095],{"class":5480},[5437,13819,13820],{"class":5447},"X_train.mean(",[5437,13822,11608],{"class":5491},[5437,13824,5651],{"class":5447},[5437,13826,5686],{"class":5504},[5437,13828,13829],{"class":5447},")[:",[5437,13831,5665],{"class":5504},[5437,13833,13834],{"class":5447},"].round(",[5437,13836,5609],{"class":5504},[5437,13838,8475],{"class":5447},[5437,13840,9555],{"class":5480},[5437,13842,9537],{"class":5654},[5437,13844,5585],{"class":5447},[5437,13846,13847,13849,13851,13853,13856,13858,13861,13863,13865,13867,13869,13871,13873,13875,13877,13879,13881],{"class":5439,"line":5541},[5437,13848,9488],{"class":5484},[5437,13850,5488],{"class":5447},[5437,13852,6082],{"class":5480},[5437,13854,13855],{"class":5654},"\"  Після масштабування (train): ",[5437,13857,6095],{"class":5480},[5437,13859,13860],{"class":5447},"X_train_scaled.mean(",[5437,13862,11608],{"class":5491},[5437,13864,5651],{"class":5447},[5437,13866,5686],{"class":5504},[5437,13868,13829],{"class":5447},[5437,13870,5665],{"class":5504},[5437,13872,13834],{"class":5447},[5437,13874,5625],{"class":5504},[5437,13876,8475],{"class":5447},[5437,13878,9555],{"class":5480},[5437,13880,9537],{"class":5654},[5437,13882,5585],{"class":5447},[5437,13884,13885,13887,13889,13891,13894,13896,13899,13901,13903,13905,13907,13909,13911,13913,13915,13917,13919],{"class":5439,"line":5554},[5437,13886,9488],{"class":5484},[5437,13888,5488],{"class":5447},[5437,13890,6082],{"class":5480},[5437,13892,13893],{"class":5654},"\"  Стандартне відхилення (train): ",[5437,13895,6095],{"class":5480},[5437,13897,13898],{"class":5447},"X_train_scaled.std(",[5437,13900,11608],{"class":5491},[5437,13902,5651],{"class":5447},[5437,13904,5686],{"class":5504},[5437,13906,13829],{"class":5447},[5437,13908,5665],{"class":5504},[5437,13910,13834],{"class":5447},[5437,13912,5609],{"class":5504},[5437,13914,8475],{"class":5447},[5437,13916,9555],{"class":5480},[5437,13918,9537],{"class":5654},[5437,13920,5585],{"class":5447},[6531,13922,13923],{"v-slot:output":5432},[8489,13924,13925,13941],{},[8492,13926,13927],{},[8495,13928,13929,13932,13935,13938],{},[8498,13930,13931],{"align":8500},"Стан числових ознак",[8498,13933,13934],{"align":8510},"Середнє значення $\\mu$ (перші 3 ознаки)",[8498,13936,13937],{"align":8510},"Стандартне відхилення $\\sigma$",[8498,13939,13940],{"align":8500},"Формат розподілу",[8522,13942,13943,13963],{},[8495,13944,13945,13950,13955,13960],{},[8527,13946,13947],{"align":8500},[5195,13948,13949],{},"До масштабування",[8527,13951,13952],{"align":8510},[5434,13953,13954],{},"[54.37,  0.68,  3.18]",[8527,13956,13957],{"align":8510},[5434,13958,13959],{},"[9.04, 0.47, 0.95]",[8527,13961,13962],{"align":8500},"Різнорідні одиниці виміру",[8495,13964,13965,13970,13975,13980],{},[8527,13966,13967],{"align":8500},[5195,13968,13969],{},"Після StandardScaler",[8527,13971,13972],{"align":8510},[5434,13973,13974],{},"[ 0.00,  0.00,  0.00]",[8527,13976,13977],{"align":8510},[5434,13978,13979],{},"[1.00, 1.00, 1.00]",[8527,13981,13982],{"align":8500},"⚡ Стандартизований розподіл $\\mathcal{N}(0, 1)$",[6570,13984,13985,13990,14003,14014,14024],{},[5191,13986,13987],{},[5195,13988,13989],{},"Критична помилка, яку часто роблять початківці:",[5191,13991,13992,13993,13996,13997,9223,14000],{},"❌ ",[5195,13994,13995],{},"Неправильно:"," ",[5434,13998,13999],{},"scaler.fit_transform(X_train)",[5434,14001,14002],{},"scaler.fit_transform(X_test)",[5191,14004,14005,14006,13996,14009,9223,14011],{},"✅ ",[5195,14007,14008],{},"Правильно:",[5434,14010,13999],{},[5434,14012,14013],{},"scaler.transform(X_test)",[5191,14015,14016,14019,14020,14023],{},[5195,14017,14018],{},"Чому?"," Якщо ви окремо підганяєте scaler до тестової вибірки, то ",[5195,14021,14022],{},"використовуєте інформацію з тестового набору"," (data leakage). Модель має бачити лише статистику тренувального набору.",[5191,14025,14026],{},"Інакше модель «підглядає майбутнє» — штучно завищена якість на тесті.",[5297,14028],{},[5311,14030,14032],{"id":14031},"створення-pytorch-dataloader","Створення PyTorch DataLoader",[5417,14034,14036],{"kernel":5419,"title":14035},"heart_disease_dataloader.ipynb",[5422,14037,14038,14292],{"execution-count":6246},[5427,14039,14041],{"className":5429,"code":14040,"language":5431,"meta":5432,"style":5432},"# Перетворення NumPy масивів у PyTorch тензори\nX_train_tensor = torch.FloatTensor(X_train_scaled)\ny_train_tensor = torch.FloatTensor(y_train).unsqueeze(1)  # Додаємо розмірність для (N, 1)\n\nX_val_tensor = torch.FloatTensor(X_val_scaled)\ny_val_tensor = torch.FloatTensor(y_val).unsqueeze(1)\n\nX_test_tensor = torch.FloatTensor(X_test_scaled)\ny_test_tensor = torch.FloatTensor(y_test).unsqueeze(1)\n\n# Створення Dataset та DataLoader\ntrain_dataset = TensorDataset(X_train_tensor, y_train_tensor)\nval_dataset = TensorDataset(X_val_tensor, y_val_tensor)\ntest_dataset = TensorDataset(X_test_tensor, y_test_tensor)\n\nbatch_size = 32\ntrain_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)\nval_loader = DataLoader(val_dataset, batch_size=batch_size, shuffle=False)\ntest_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)\n\nprint(f\"DataLoader створено:\")\nprint(f\"  Train: {len(train_loader)} батчів по {batch_size} зразків\")\nprint(f\"  Val:   {len(val_loader)} батчів\")\nprint(f\"  Test:  {len(test_loader)} батчів\")\n",[5434,14042,14043,14048,14053,14066,14070,14075,14084,14088,14093,14102,14106,14111,14116,14121,14126,14130,14138,14158,14175,14192,14196,14209,14243,14268],{"__ignoreMap":5432},[5437,14044,14045],{"class":5439,"line":5440},[5437,14046,14047],{"class":5562},"# Перетворення NumPy масивів у PyTorch тензори\n",[5437,14049,14050],{"class":5439,"line":5457},[5437,14051,14052],{"class":5447},"X_train_tensor = torch.FloatTensor(X_train_scaled)\n",[5437,14054,14055,14058,14060,14063],{"class":5439,"line":5470},[5437,14056,14057],{"class":5447},"y_train_tensor = torch.FloatTensor(y_train).unsqueeze(",[5437,14059,5424],{"class":5504},[5437,14061,14062],{"class":5447},")  ",[5437,14064,14065],{"class":5562},"# Додаємо розмірність для (N, 1)\n",[5437,14067,14068],{"class":5439,"line":5477},[5437,14069,5474],{"emptyLinePlaceholder":5473},[5437,14071,14072],{"class":5439,"line":5498},[5437,14073,14074],{"class":5447},"X_val_tensor = torch.FloatTensor(X_val_scaled)\n",[5437,14076,14077,14080,14082],{"class":5439,"line":5516},[5437,14078,14079],{"class":5447},"y_val_tensor = torch.FloatTensor(y_val).unsqueeze(",[5437,14081,5424],{"class":5504},[5437,14083,5585],{"class":5447},[5437,14085,14086],{"class":5439,"line":5521},[5437,14087,5474],{"emptyLinePlaceholder":5473},[5437,14089,14090],{"class":5439,"line":5535},[5437,14091,14092],{"class":5447},"X_test_tensor = torch.FloatTensor(X_test_scaled)\n",[5437,14094,14095,14098,14100],{"class":5439,"line":5541},[5437,14096,14097],{"class":5447},"y_test_tensor = torch.FloatTensor(y_test).unsqueeze(",[5437,14099,5424],{"class":5504},[5437,14101,5585],{"class":5447},[5437,14103,14104],{"class":5439,"line":5554},[5437,14105,5474],{"emptyLinePlaceholder":5473},[5437,14107,14108],{"class":5439,"line":5559},[5437,14109,14110],{"class":5562},"# Створення Dataset та DataLoader\n",[5437,14112,14113],{"class":5439,"line":5566},[5437,14114,14115],{"class":5447},"train_dataset = TensorDataset(X_train_tensor, y_train_tensor)\n",[5437,14117,14118],{"class":5439,"line":5588},[5437,14119,14120],{"class":5447},"val_dataset = TensorDataset(X_val_tensor, y_val_tensor)\n",[5437,14122,14123],{"class":5439,"line":5593},[5437,14124,14125],{"class":5447},"test_dataset = TensorDataset(X_test_tensor, y_test_tensor)\n",[5437,14127,14128],{"class":5439,"line":5599},[5437,14129,5474],{"emptyLinePlaceholder":5473},[5437,14131,14132,14135],{"class":5439,"line":5631},[5437,14133,14134],{"class":5447},"batch_size = ",[5437,14136,14137],{"class":5504},"32\n",[5437,14139,14140,14143,14146,14149,14152,14154,14156],{"class":5439,"line":5636},[5437,14141,14142],{"class":5447},"train_loader = DataLoader(train_dataset, ",[5437,14144,14145],{"class":5491},"batch_size",[5437,14147,14148],{"class":5447},"=batch_size, ",[5437,14150,14151],{"class":5491},"shuffle",[5437,14153,5651],{"class":5447},[5437,14155,11715],{"class":5480},[5437,14157,5585],{"class":5447},[5437,14159,14160,14163,14165,14167,14169,14171,14173],{"class":5439,"line":5642},[5437,14161,14162],{"class":5447},"val_loader = DataLoader(val_dataset, ",[5437,14164,14145],{"class":5491},[5437,14166,14148],{"class":5447},[5437,14168,14151],{"class":5491},[5437,14170,5651],{"class":5447},[5437,14172,10020],{"class":5480},[5437,14174,5585],{"class":5447},[5437,14176,14177,14180,14182,14184,14186,14188,14190],{"class":5439,"line":5680},[5437,14178,14179],{"class":5447},"test_loader = DataLoader(test_dataset, ",[5437,14181,14145],{"class":5491},[5437,14183,14148],{"class":5447},[5437,14185,14151],{"class":5491},[5437,14187,5651],{"class":5447},[5437,14189,10020],{"class":5480},[5437,14191,5585],{"class":5447},[5437,14193,14194],{"class":5439,"line":5720},[5437,14195,5474],{"emptyLinePlaceholder":5473},[5437,14197,14198,14200,14202,14204,14207],{"class":5439,"line":5753},[5437,14199,9488],{"class":5484},[5437,14201,5488],{"class":5447},[5437,14203,6082],{"class":5480},[5437,14205,14206],{"class":5654},"\"DataLoader створено:\"",[5437,14208,5585],{"class":5447},[5437,14210,14211,14213,14215,14217,14220,14222,14224,14227,14229,14232,14234,14236,14238,14241],{"class":5439,"line":5787},[5437,14212,9488],{"class":5484},[5437,14214,5488],{"class":5447},[5437,14216,6082],{"class":5480},[5437,14218,14219],{"class":5654},"\"  Train: ",[5437,14221,6095],{"class":5480},[5437,14223,9939],{"class":5484},[5437,14225,14226],{"class":5447},"(train_loader)",[5437,14228,9555],{"class":5480},[5437,14230,14231],{"class":5654}," батчів по ",[5437,14233,6095],{"class":5480},[5437,14235,14145],{"class":5447},[5437,14237,9555],{"class":5480},[5437,14239,14240],{"class":5654}," зразків\"",[5437,14242,5585],{"class":5447},[5437,14244,14245,14247,14249,14251,14254,14256,14258,14261,14263,14266],{"class":5439,"line":5801},[5437,14246,9488],{"class":5484},[5437,14248,5488],{"class":5447},[5437,14250,6082],{"class":5480},[5437,14252,14253],{"class":5654},"\"  Val:   ",[5437,14255,6095],{"class":5480},[5437,14257,9939],{"class":5484},[5437,14259,14260],{"class":5447},"(val_loader)",[5437,14262,9555],{"class":5480},[5437,14264,14265],{"class":5654}," батчів\"",[5437,14267,5585],{"class":5447},[5437,14269,14270,14272,14274,14276,14279,14281,14283,14286,14288,14290],{"class":5439,"line":5822},[5437,14271,9488],{"class":5484},[5437,14273,5488],{"class":5447},[5437,14275,6082],{"class":5480},[5437,14277,14278],{"class":5654},"\"  Test:  ",[5437,14280,6095],{"class":5480},[5437,14282,9939],{"class":5484},[5437,14284,14285],{"class":5447},"(test_loader)",[5437,14287,9555],{"class":5480},[5437,14289,14265],{"class":5654},[5437,14291,5585],{"class":5447},[6531,14293,14294],{"v-slot:output":5432},[8489,14295,14296,14314],{},[8492,14297,14298],{},[8495,14299,14300,14303,14306,14309],{},[8498,14301,14302],{"align":8500},"Завантажувач даних",[8498,14304,14305],{"align":8510},"Кількість батчів",[8498,14307,14308],{"align":8510},"Розмір батча",[8498,14310,14311,14312,8475],{"align":8510},"Перемішування (",[5434,14313,14151],{},[8522,14315,14316,14336,14356],{},[8495,14317,14318,14323,14328,14331],{},[8527,14319,14320],{"align":8500},[5195,14321,14322],{},"Train DataLoader",[8527,14324,14325,14327],{"align":8510},[5434,14326,7880],{}," батчів",[8527,14329,14330],{"align":8510},"$32$ зразки (останній неповний)",[8527,14332,14005,14333,14335],{"align":8510},[5434,14334,11715],{}," (випадковий порядок)",[8495,14337,14338,14343,14348,14351],{},[8527,14339,14340],{"align":8500},[5195,14341,14342],{},"Val DataLoader",[8527,14344,14345,14347],{"align":8510},[5434,14346,5609],{}," батчі",[8527,14349,14350],{"align":8510},"$32$ зразки",[8527,14352,13992,14353,14355],{"align":8510},[5434,14354,10020],{}," (детерміновано)",[8495,14357,14358,14363,14367,14369],{},[8527,14359,14360],{"align":8500},[5195,14361,14362],{},"Test DataLoader",[8527,14364,14365,14347],{"align":8510},[5434,14366,5609],{},[8527,14368,14350],{"align":8510},[8527,14370,13992,14371,14355],{"align":8510},[5434,14372,10020],{},[5345,14374,14375,14380],{},[5191,14376,14377],{},[5195,14378,14379],{},"Чому shuffle=True для train та False для val\u002Ftest:",[5244,14381,14382,14388],{},[5220,14383,14384,14387],{},[5195,14385,14386],{},"Train:"," перемішуємо дані кожну епоху, щоб модель не запам'ятовувала порядок зразків (додаткова регуляризація).",[5220,14389,14390,14393],{},[5195,14391,14392],{},"Val\u002FTest:"," не перемішуємо, бо порядок не має значення для оцінки — нам потрібні лише передбачення.",[5297,14395],{},[5311,14397,14399],{"id":14398},"визначення-архітектури-моделі","Визначення архітектури моделі",[5417,14401,14403],{"kernel":5419,"title":14402},"heart_disease_network.ipynb",[5422,14404,14405,14981],{"execution-count":5625},[5427,14406,14408],{"className":5429,"code":14407,"language":5431,"meta":5432,"style":5432},"class HeartDiseaseNet(nn.Module):\n    \"\"\"\n    Нейронна мережа для передбачення серцево-судинних захворювань.\n    \n    Архітектура:\n      - Вхід: 13 клінічних ознак\n      - Прихований шар 1: 64 нейрони (ReLU + Dropout 30%)\n      - Прихований шар 2: 32 нейрони (ReLU + Dropout 20%)\n      - Вихід: 1 нейрон (Sigmoid) — ймовірність хвороби\n    \"\"\"\n    \n    def __init__(self, input_size=13, hidden1=64, hidden2=32, dropout1=0.3, dropout2=0.2):\n        super(HeartDiseaseNet, self).__init__()\n        \n        # Прихований шар 1\n        self.fc1 = nn.Linear(input_size, hidden1)\n        self.relu1 = nn.ReLU()\n        self.dropout1 = nn.Dropout(dropout1)\n        \n        # Прихований шар 2\n        self.fc2 = nn.Linear(hidden1, hidden2)\n        self.relu2 = nn.ReLU()\n        self.dropout2 = nn.Dropout(dropout2)\n        \n        # Вихідний шар\n        self.fc3 = nn.Linear(hidden2, 1)\n        self.sigmoid = nn.Sigmoid()\n        \n    def forward(self, x):\n        \"\"\"Прямий прохід (forward propagation)\"\"\"\n        # Шар 1\n        x = self.fc1(x)\n        x = self.relu1(x)\n        x = self.dropout1(x)\n        \n        # Шар 2\n        x = self.fc2(x)\n        x = self.relu2(x)\n        x = self.dropout2(x)\n        \n        # Вихідний шар\n        x = self.fc3(x)\n        x = self.sigmoid(x)\n        \n        return x\n\n# Ініціалізація моделі\nmodel = HeartDiseaseNet().to(device)\n\n# Підрахунок кількості параметрів\ntotal_params = sum(p.numel() for p in model.parameters())\ntrainable_params = sum(p.numel() for p in model.parameters() if p.requires_grad)\n\nprint(\"=\" * 70)\nprint(\"АРХІТЕКТУРА МОДЕЛІ\")\nprint(\"=\" * 70)\nprint(model)\nprint(\"\\n\" + \"=\" * 70)\nprint(f\"Загальна кількість параметрів: {total_params:,}\")\nprint(f\"Навчальні параметри: {trainable_params:,}\")\nprint(\"=\" * 70)\n",[5434,14409,14410,14430,14435,14440,14445,14450,14455,14460,14465,14470,14474,14478,14540,14559,14564,14569,14577,14584,14591,14595,14600,14607,14614,14621,14625,14630,14641,14648,14652,14669,14674,14679,14689,14698,14707,14711,14716,14725,14734,14743,14747,14751,14760,14769,14773,14781,14785,14790,14795,14799,14804,14827,14850,14854,14868,14879,14893,14900,14922,14945,14967],{"__ignoreMap":5432},[5437,14411,14412,14415,14418,14420,14423,14425,14428],{"class":5439,"line":5440},[5437,14413,14414],{"class":5480},"class",[5437,14416,14417],{"class":6162}," HeartDiseaseNet",[5437,14419,5488],{"class":5447},[5437,14421,14422],{"class":6162},"nn",[5437,14424,5362],{"class":5447},[5437,14426,14427],{"class":6162},"Module",[5437,14429,5495],{"class":5447},[5437,14431,14432],{"class":5439,"line":5457},[5437,14433,14434],{"class":5654},"    \"\"\"\n",[5437,14436,14437],{"class":5439,"line":5470},[5437,14438,14439],{"class":5654},"    Нейронна мережа для передбачення серцево-судинних захворювань.\n",[5437,14441,14442],{"class":5439,"line":5477},[5437,14443,14444],{"class":5654},"    \n",[5437,14446,14447],{"class":5439,"line":5498},[5437,14448,14449],{"class":5654},"    Архітектура:\n",[5437,14451,14452],{"class":5439,"line":5516},[5437,14453,14454],{"class":5654},"      - Вхід: 13 клінічних ознак\n",[5437,14456,14457],{"class":5439,"line":5521},[5437,14458,14459],{"class":5654},"      - Прихований шар 1: 64 нейрони (ReLU + Dropout 30%)\n",[5437,14461,14462],{"class":5439,"line":5535},[5437,14463,14464],{"class":5654},"      - Прихований шар 2: 32 нейрони (ReLU + Dropout 20%)\n",[5437,14466,14467],{"class":5439,"line":5541},[5437,14468,14469],{"class":5654},"      - Вихід: 1 нейрон (Sigmoid) — ймовірність хвороби\n",[5437,14471,14472],{"class":5439,"line":5554},[5437,14473,14434],{"class":5654},[5437,14475,14476],{"class":5439,"line":5559},[5437,14477,14444],{"class":5447},[5437,14479,14480,14483,14486,14488,14491,14493,14496,14498,14500,14502,14505,14507,14510,14512,14515,14517,14520,14522,14525,14527,14529,14531,14534,14536,14538],{"class":5439,"line":5566},[5437,14481,14482],{"class":5480},"    def",[5437,14484,14485],{"class":5484}," __init__",[5437,14487,5488],{"class":5447},[5437,14489,14490],{"class":5491},"self",[5437,14492,5575],{"class":5447},[5437,14494,14495],{"class":5491},"input_size",[5437,14497,5651],{"class":5447},[5437,14499,11571],{"class":5504},[5437,14501,5575],{"class":5447},[5437,14503,14504],{"class":5491},"hidden1",[5437,14506,5651],{"class":5447},[5437,14508,14509],{"class":5504},"64",[5437,14511,5575],{"class":5447},[5437,14513,14514],{"class":5491},"hidden2",[5437,14516,5651],{"class":5447},[5437,14518,14519],{"class":5504},"32",[5437,14521,5575],{"class":5447},[5437,14523,14524],{"class":5491},"dropout1",[5437,14526,5651],{"class":5447},[5437,14528,5715],{"class":5504},[5437,14530,5575],{"class":5447},[5437,14532,14533],{"class":5491},"dropout2",[5437,14535,5651],{"class":5447},[5437,14537,6010],{"class":5504},[5437,14539,5495],{"class":5447},[5437,14541,14542,14545,14548,14550,14553,14556],{"class":5439,"line":5588},[5437,14543,14544],{"class":6162},"        super",[5437,14546,14547],{"class":5447},"(HeartDiseaseNet, ",[5437,14549,14490],{"class":5480},[5437,14551,14552],{"class":5447},").",[5437,14554,14555],{"class":5484},"__init__",[5437,14557,14558],{"class":5447},"()\n",[5437,14560,14561],{"class":5439,"line":5593},[5437,14562,14563],{"class":5447},"        \n",[5437,14565,14566],{"class":5439,"line":5599},[5437,14567,14568],{"class":5562},"        # Прихований шар 1\n",[5437,14570,14571,14574],{"class":5439,"line":5631},[5437,14572,14573],{"class":5480},"        self",[5437,14575,14576],{"class":5447},".fc1 = nn.Linear(input_size, hidden1)\n",[5437,14578,14579,14581],{"class":5439,"line":5636},[5437,14580,14573],{"class":5480},[5437,14582,14583],{"class":5447},".relu1 = nn.ReLU()\n",[5437,14585,14586,14588],{"class":5439,"line":5642},[5437,14587,14573],{"class":5480},[5437,14589,14590],{"class":5447},".dropout1 = nn.Dropout(dropout1)\n",[5437,14592,14593],{"class":5439,"line":5680},[5437,14594,14563],{"class":5447},[5437,14596,14597],{"class":5439,"line":5720},[5437,14598,14599],{"class":5562},"        # Прихований шар 2\n",[5437,14601,14602,14604],{"class":5439,"line":5753},[5437,14603,14573],{"class":5480},[5437,14605,14606],{"class":5447},".fc2 = nn.Linear(hidden1, hidden2)\n",[5437,14608,14609,14611],{"class":5439,"line":5787},[5437,14610,14573],{"class":5480},[5437,14612,14613],{"class":5447},".relu2 = nn.ReLU()\n",[5437,14615,14616,14618],{"class":5439,"line":5801},[5437,14617,14573],{"class":5480},[5437,14619,14620],{"class":5447},".dropout2 = nn.Dropout(dropout2)\n",[5437,14622,14623],{"class":5439,"line":5822},[5437,14624,14563],{"class":5447},[5437,14626,14627],{"class":5439,"line":5840},[5437,14628,14629],{"class":5562},"        # Вихідний шар\n",[5437,14631,14632,14634,14637,14639],{"class":5439,"line":5869},[5437,14633,14573],{"class":5480},[5437,14635,14636],{"class":5447},".fc3 = nn.Linear(hidden2, ",[5437,14638,5424],{"class":5504},[5437,14640,5585],{"class":5447},[5437,14642,14643,14645],{"class":5439,"line":5884},[5437,14644,14573],{"class":5480},[5437,14646,14647],{"class":5447},".sigmoid = nn.Sigmoid()\n",[5437,14649,14650],{"class":5439,"line":5889},[5437,14651,14563],{"class":5447},[5437,14653,14654,14656,14659,14661,14663,14665,14667],{"class":5439,"line":5895},[5437,14655,14482],{"class":5480},[5437,14657,14658],{"class":5484}," forward",[5437,14660,5488],{"class":5447},[5437,14662,14490],{"class":5491},[5437,14664,5575],{"class":5447},[5437,14666,5331],{"class":5491},[5437,14668,5495],{"class":5447},[5437,14670,14671],{"class":5439,"line":5927},[5437,14672,14673],{"class":5654},"        \"\"\"Прямий прохід (forward propagation)\"\"\"\n",[5437,14675,14676],{"class":5439,"line":5961},[5437,14677,14678],{"class":5562},"        # Шар 1\n",[5437,14680,14681,14684,14686],{"class":5439,"line":5995},[5437,14682,14683],{"class":5447},"        x = ",[5437,14685,14490],{"class":5480},[5437,14687,14688],{"class":5447},".fc1(x)\n",[5437,14690,14691,14693,14695],{"class":5439,"line":6023},[5437,14692,14683],{"class":5447},[5437,14694,14490],{"class":5480},[5437,14696,14697],{"class":5447},".relu1(x)\n",[5437,14699,14700,14702,14704],{"class":5439,"line":6028},[5437,14701,14683],{"class":5447},[5437,14703,14490],{"class":5480},[5437,14705,14706],{"class":5447},".dropout1(x)\n",[5437,14708,14709],{"class":5439,"line":6034},[5437,14710,14563],{"class":5447},[5437,14712,14713],{"class":5439,"line":6044},[5437,14714,14715],{"class":5562},"        # Шар 2\n",[5437,14717,14718,14720,14722],{"class":5439,"line":6109},[5437,14719,14683],{"class":5447},[5437,14721,14490],{"class":5480},[5437,14723,14724],{"class":5447},".fc2(x)\n",[5437,14726,14727,14729,14731],{"class":5439,"line":6154},[5437,14728,14683],{"class":5447},[5437,14730,14490],{"class":5480},[5437,14732,14733],{"class":5447},".relu2(x)\n",[5437,14735,14736,14738,14740],{"class":5439,"line":6196},[5437,14737,14683],{"class":5447},[5437,14739,14490],{"class":5480},[5437,14741,14742],{"class":5447},".dropout2(x)\n",[5437,14744,14745],{"class":5439,"line":6224},[5437,14746,14563],{"class":5447},[5437,14748,14749],{"class":5439,"line":6229},[5437,14750,14629],{"class":5562},[5437,14752,14753,14755,14757],{"class":5439,"line":6235},[5437,14754,14683],{"class":5447},[5437,14756,14490],{"class":5480},[5437,14758,14759],{"class":5447},".fc3(x)\n",[5437,14761,14762,14764,14766],{"class":5439,"line":6278},[5437,14763,14683],{"class":5447},[5437,14765,14490],{"class":5480},[5437,14767,14768],{"class":5447},".sigmoid(x)\n",[5437,14770,14771],{"class":5439,"line":6308},[5437,14772,14563],{"class":5447},[5437,14774,14775,14778],{"class":5439,"line":6362},[5437,14776,14777],{"class":5443},"        return",[5437,14779,14780],{"class":5447}," x\n",[5437,14782,14783],{"class":5439,"line":6408},[5437,14784,5474],{"emptyLinePlaceholder":5473},[5437,14786,14787],{"class":5439,"line":6413},[5437,14788,14789],{"class":5562},"# Ініціалізація моделі\n",[5437,14791,14792],{"class":5439,"line":6427},[5437,14793,14794],{"class":5447},"model = HeartDiseaseNet().to(device)\n",[5437,14796,14797],{"class":5439,"line":6445},[5437,14798,5474],{"emptyLinePlaceholder":5473},[5437,14800,14801],{"class":5439,"line":6464},[5437,14802,14803],{"class":5562},"# Підрахунок кількості параметрів\n",[5437,14805,14806,14809,14812,14815,14818,14821,14824],{"class":5439,"line":6491},[5437,14807,14808],{"class":5447},"total_params = ",[5437,14810,14811],{"class":5484},"sum",[5437,14813,14814],{"class":5447},"(p.numel() ",[5437,14816,14817],{"class":5443},"for",[5437,14819,14820],{"class":5447}," p ",[5437,14822,14823],{"class":5443},"in",[5437,14825,14826],{"class":5447}," model.parameters())\n",[5437,14828,14829,14832,14834,14836,14838,14840,14842,14845,14847],{"class":5439,"line":6515},[5437,14830,14831],{"class":5447},"trainable_params = ",[5437,14833,14811],{"class":5484},[5437,14835,14814],{"class":5447},[5437,14837,14817],{"class":5443},[5437,14839,14820],{"class":5447},[5437,14841,14823],{"class":5443},[5437,14843,14844],{"class":5447}," model.parameters() ",[5437,14846,9993],{"class":5443},[5437,14848,14849],{"class":5447}," p.requires_grad)\n",[5437,14851,14852],{"class":5439,"line":6520},[5437,14853,5474],{"emptyLinePlaceholder":5473},[5437,14855,14856,14858,14860,14862,14864,14866],{"class":5439,"line":6526},[5437,14857,9488],{"class":5484},[5437,14859,5488],{"class":5447},[5437,14861,9493],{"class":5654},[5437,14863,9496],{"class":5447},[5437,14865,9499],{"class":5504},[5437,14867,5585],{"class":5447},[5437,14869,14870,14872,14874,14877],{"class":5439,"line":12258},[5437,14871,9488],{"class":5484},[5437,14873,5488],{"class":5447},[5437,14875,14876],{"class":5654},"\"АРХІТЕКТУРА МОДЕЛІ\"",[5437,14878,5585],{"class":5447},[5437,14880,14881,14883,14885,14887,14889,14891],{"class":5439,"line":12264},[5437,14882,9488],{"class":5484},[5437,14884,5488],{"class":5447},[5437,14886,9493],{"class":5654},[5437,14888,9496],{"class":5447},[5437,14890,9499],{"class":5504},[5437,14892,5585],{"class":5447},[5437,14894,14895,14897],{"class":5439,"line":12270},[5437,14896,9488],{"class":5484},[5437,14898,14899],{"class":5447},"(model)\n",[5437,14901,14902,14904,14906,14908,14910,14912,14914,14916,14918,14920],{"class":5439,"line":12276},[5437,14903,9488],{"class":5484},[5437,14905,5488],{"class":5447},[5437,14907,9537],{"class":5654},[5437,14909,6126],{"class":6088},[5437,14911,9537],{"class":5654},[5437,14913,9835],{"class":5447},[5437,14915,9493],{"class":5654},[5437,14917,9496],{"class":5447},[5437,14919,9499],{"class":5504},[5437,14921,5585],{"class":5447},[5437,14923,14924,14926,14928,14930,14933,14935,14938,14941,14943],{"class":5439,"line":12282},[5437,14925,9488],{"class":5484},[5437,14927,5488],{"class":5447},[5437,14929,6082],{"class":5480},[5437,14931,14932],{"class":5654},"\"Загальна кількість параметрів: ",[5437,14934,6095],{"class":5480},[5437,14936,14937],{"class":5447},"total_params",[5437,14939,14940],{"class":5480},":,}",[5437,14942,9537],{"class":5654},[5437,14944,5585],{"class":5447},[5437,14946,14947,14949,14951,14953,14956,14958,14961,14963,14965],{"class":5439,"line":12287},[5437,14948,9488],{"class":5484},[5437,14950,5488],{"class":5447},[5437,14952,6082],{"class":5480},[5437,14954,14955],{"class":5654},"\"Навчальні параметри: ",[5437,14957,6095],{"class":5480},[5437,14959,14960],{"class":5447},"trainable_params",[5437,14962,14940],{"class":5480},[5437,14964,9537],{"class":5654},[5437,14966,5585],{"class":5447},[5437,14968,14969,14971,14973,14975,14977,14979],{"class":5439,"line":12293},[5437,14970,9488],{"class":5484},[5437,14972,5488],{"class":5447},[5437,14974,9493],{"class":5654},[5437,14976,9496],{"class":5447},[5437,14978,9499],{"class":5504},[5437,14980,5585],{"class":5447},[6531,14982,14983],{"v-slot:output":5432},[8489,14984,14985,15001],{},[8492,14986,14987],{},[8495,14988,14989,14992,14995,14998],{},[8498,14990,14991],{"align":8500},"Шар архітектури",[8498,14993,14994],{"align":8500},"Тип операції",[8498,14996,14997],{"align":8510},"Вхідна $\\to$ Вихідна розмірність",[8498,14999,15000],{"align":8500},"Регуляризація \u002F Активація",[8522,15002,15003,15029,15053,15080],{},[8495,15004,15005,15013,15018,15021],{},[8527,15006,15007],{"align":8500},[5195,15008,15009,15010,8475],{},"Вхідний шар (",[5434,15011,15012],{},"fc1",[8527,15014,15015],{"align":8500},[5434,15016,15017],{},"nn.Linear",[8527,15019,15020],{"align":8510},"$13 \\to 64$",[8527,15022,15023,9835,15026],{"align":8500},[5434,15024,15025],{},"ReLU()",[5434,15027,15028],{},"Dropout(p=0.3)",[8495,15030,15031,15039,15043,15046],{},[8527,15032,15033],{"align":8500},[5195,15034,15035,15036,8475],{},"Прихований шар (",[5434,15037,15038],{},"fc2",[8527,15040,15041],{"align":8500},[5434,15042,15017],{},[8527,15044,15045],{"align":8510},"$64 \\to 32$",[8527,15047,15048,9835,15050],{"align":8500},[5434,15049,15025],{},[5434,15051,15052],{},"Dropout(p=0.2)",[8495,15054,15055,15063,15067,15070],{},[8527,15056,15057],{"align":8500},[5195,15058,15059,15060,8475],{},"Вихідний шар (",[5434,15061,15062],{},"fc3",[8527,15064,15065],{"align":8500},[5434,15066,15017],{},[8527,15068,15069],{"align":8510},"$32 \\to 1$",[8527,15071,15072,15075,15076,15079],{"align":8500},[5434,15073,15074],{},"Sigmoid()"," (для ймовірності $p \\in ",[5437,15077,15078],{},"0, 1","$)",[8495,15081,15082,15087,15089,15091],{},[8527,15083,15084],{"align":8500},[5195,15085,15086],{},"Загальна кількість параметрів",[8527,15088,10383],{"align":8500},[8527,15090,10383],{"align":8510},[8527,15092,15093,15099],{"align":8500},[5195,15094,15095,15098],{},[5434,15096,15097],{},"3,009"," параметрів"," ($13 \\times 64 + 64 + 64 \\times 32 + 32 + 32 \\times 1 + 1$)",[6660,15101,15102,15107,15110,15133,15140,15160],{},[5191,15103,15104],{},[5195,15105,15106],{},"Чому модель компактна (2,977 параметрів):",[5191,15108,15109],{},"Для порівняння:",[5244,15111,15112,15118,15124],{},[5220,15113,15114,15117],{},[5195,15115,15116],{},"ResNet-50"," (комп'ютерний зір): ~25 мільйонів параметрів",[5220,15119,15120,15123],{},[5195,15121,15122],{},"BERT-base"," (NLP): ~110 мільйонів параметрів",[5220,15125,15126,15129,15130,15098],{},[5195,15127,15128],{},"GPT-3",": 175 ",[5195,15131,15132],{},"мільярдів",[5191,15134,15135,15136,15139],{},"Наша модель в ",[5195,15137,15138],{},"60,000 разів менша"," за BERT! Це добре для медичних застосувань:",[5217,15141,15142,15148,15154],{},[5220,15143,15144,15147],{},[5195,15145,15146],{},"Швидке інференс"," — діагноз за мілісекунди",[5220,15149,15150,15153],{},[5195,15151,15152],{},"Низькі вимоги до обладнання"," — працює на CPU",[5220,15155,15156,15159],{},[5195,15157,15158],{},"Краща інтерпретованість"," — менше прихованих взаємодій",[5191,15161,15162],{},"Для табличних даних (як медичні записи) не потрібні гігантські моделі. Іноді простота — сила.",[5297,15164],{},[5311,15166,15168],{"id":15167},"визначення-функції-втрат-та-оптимізатора","Визначення функції втрат та оптимізатора",[5417,15170,15172],{"kernel":5419,"title":15171},"heart_disease_training_setup.ipynb",[5422,15173,15174,15301],{"execution-count":7880},[5427,15175,15177],{"className":5429,"code":15176,"language":5431,"meta":5432,"style":5432},"# Функція втрат: Binary Cross-Entropy\ncriterion = nn.BCELoss()\n\n# Оптимізатор: Adam з learning rate 0.001\noptimizer = optim.Adam(model.parameters(), lr=0.001)\n\nprint(\"Налаштування навчання:\")\nprint(f\"  Функція втрат: Binary Cross-Entropy Loss\")\nprint(f\"  Оптимізатор: Adam\")\nprint(f\"  Learning rate: 0.001\")\nprint(f\"  Batch size: {batch_size}\")\nprint(f\"  Кількість епох: 200 (з early stopping)\")\n",[5434,15178,15179,15184,15189,15193,15198,15213,15217,15228,15241,15254,15267,15288],{"__ignoreMap":5432},[5437,15180,15181],{"class":5439,"line":5440},[5437,15182,15183],{"class":5562},"# Функція втрат: Binary Cross-Entropy\n",[5437,15185,15186],{"class":5439,"line":5457},[5437,15187,15188],{"class":5447},"criterion = nn.BCELoss()\n",[5437,15190,15191],{"class":5439,"line":5470},[5437,15192,5474],{"emptyLinePlaceholder":5473},[5437,15194,15195],{"class":5439,"line":5477},[5437,15196,15197],{"class":5562},"# Оптимізатор: Adam з learning rate 0.001\n",[5437,15199,15200,15203,15206,15208,15211],{"class":5439,"line":5498},[5437,15201,15202],{"class":5447},"optimizer = optim.Adam(model.parameters(), ",[5437,15204,15205],{"class":5491},"lr",[5437,15207,5651],{"class":5447},[5437,15209,15210],{"class":5504},"0.001",[5437,15212,5585],{"class":5447},[5437,15214,15215],{"class":5439,"line":5516},[5437,15216,5474],{"emptyLinePlaceholder":5473},[5437,15218,15219,15221,15223,15226],{"class":5439,"line":5521},[5437,15220,9488],{"class":5484},[5437,15222,5488],{"class":5447},[5437,15224,15225],{"class":5654},"\"Налаштування навчання:\"",[5437,15227,5585],{"class":5447},[5437,15229,15230,15232,15234,15236,15239],{"class":5439,"line":5535},[5437,15231,9488],{"class":5484},[5437,15233,5488],{"class":5447},[5437,15235,6082],{"class":5480},[5437,15237,15238],{"class":5654},"\"  Функція втрат: Binary Cross-Entropy Loss\"",[5437,15240,5585],{"class":5447},[5437,15242,15243,15245,15247,15249,15252],{"class":5439,"line":5541},[5437,15244,9488],{"class":5484},[5437,15246,5488],{"class":5447},[5437,15248,6082],{"class":5480},[5437,15250,15251],{"class":5654},"\"  Оптимізатор: Adam\"",[5437,15253,5585],{"class":5447},[5437,15255,15256,15258,15260,15262,15265],{"class":5439,"line":5554},[5437,15257,9488],{"class":5484},[5437,15259,5488],{"class":5447},[5437,15261,6082],{"class":5480},[5437,15263,15264],{"class":5654},"\"  Learning rate: 0.001\"",[5437,15266,5585],{"class":5447},[5437,15268,15269,15271,15273,15275,15278,15280,15282,15284,15286],{"class":5439,"line":5559},[5437,15270,9488],{"class":5484},[5437,15272,5488],{"class":5447},[5437,15274,6082],{"class":5480},[5437,15276,15277],{"class":5654},"\"  Batch size: ",[5437,15279,6095],{"class":5480},[5437,15281,14145],{"class":5447},[5437,15283,9555],{"class":5480},[5437,15285,9537],{"class":5654},[5437,15287,5585],{"class":5447},[5437,15289,15290,15292,15294,15296,15299],{"class":5439,"line":5566},[5437,15291,9488],{"class":5484},[5437,15293,5488],{"class":5447},[5437,15295,6082],{"class":5480},[5437,15297,15298],{"class":5654},"\"  Кількість епох: 200 (з early stopping)\"",[5437,15300,5585],{"class":5447},[6531,15302,15303],{"v-slot:output":5432},[8489,15304,15305,15318],{},[8492,15306,15307],{},[8495,15308,15309,15312,15315],{},[8498,15310,15311],{"align":8500},"Гіперпараметр",[8498,15313,15314],{"align":8510},"Встановлене значення",[8498,15316,15317],{"align":8500},"Обґрунтування вибору",[8522,15319,15320,15338,15355,15371],{},[8495,15321,15322,15330,15335],{},[8527,15323,15324],{"align":8500},[5195,15325,15326,15327,8475],{},"Функція втрат (",[5434,15328,15329],{},"criterion",[8527,15331,15332],{"align":8510},[5434,15333,15334],{},"BCELoss()",[8527,15336,15337],{"align":8500},"Бінарна класифікація з ймовірностями на виході Sigmoid",[8495,15339,15340,15348,15352],{},[8527,15341,15342],{"align":8500},[5195,15343,15344,15345,8475],{},"Оптимізатор (",[5434,15346,15347],{},"optimizer",[8527,15349,15350],{"align":8510},[5434,15351,12645],{},[8527,15353,15354],{"align":8500},"Адаптивна швидкість навчання для розріджених даних",[8495,15356,15357,15364,15368],{},[8527,15358,15359],{"align":8500},[5195,15360,15361,15362,8475],{},"Швидкість навчання (",[5434,15363,15205],{},[8527,15365,15366],{"align":8510},[5434,15367,15210],{},[8527,15369,15370],{"align":8500},"Оптимальна початкова швидкість без ризику розбіжності",[8495,15372,15373,15378,15383],{},[8527,15374,15375],{"align":8500},[5195,15376,15377],{},"Early Stopping",[8527,15379,15380],{"align":8510},[5434,15381,15382],{},"patience = 20",[8527,15384,15385],{"align":8500},"Захист від перенавчання за валідаційним Loss",[5297,15387],{},[5311,15389,15391],{"id":15390},"цикл-навчання-з-early-stopping","Цикл навчання з early stopping",[5417,15393,15395],{"kernel":5419,"title":15394},"heart_disease_training.ipynb",[5422,15396,15399,16474],{"execution-count":15397,"execution-time":15398},"8","12.34s",[5427,15400,15402],{"className":5429,"code":15401,"language":5431,"meta":5432,"style":5432},"def train_epoch(model, loader, criterion, optimizer, device):\n    \"\"\"Одна епоха навчання\"\"\"\n    model.train()  # Режим навчання (dropout активний)\n    total_loss = 0.0\n    all_preds = []\n    all_labels = []\n    \n    for X_batch, y_batch in loader:\n        X_batch, y_batch = X_batch.to(device), y_batch.to(device)\n        \n        # Прямий прохід\n        optimizer.zero_grad()\n        outputs = model(X_batch)\n        loss = criterion(outputs, y_batch)\n        \n        # Зворотний прохід та оновлення ваг\n        loss.backward()\n        optimizer.step()\n        \n        # Збір статистики\n        total_loss += loss.item() * X_batch.size(0)\n        preds = (outputs >= 0.5).float()\n        all_preds.extend(preds.cpu().numpy())\n        all_labels.extend(y_batch.cpu().numpy())\n    \n    avg_loss = total_loss \u002F len(loader.dataset)\n    accuracy = accuracy_score(all_labels, all_preds)\n    return avg_loss, accuracy\n\n\ndef evaluate(model, loader, criterion, device):\n    \"\"\"Оцінка моделі на валідаційному\u002Fтестовому наборі\"\"\"\n    model.eval()  # Режим оцінки (dropout вимкнений)\n    total_loss = 0.0\n    all_preds = []\n    all_probs = []\n    all_labels = []\n    \n    with torch.no_grad():  # Не обчислюємо градієнти\n        for X_batch, y_batch in loader:\n            X_batch, y_batch = X_batch.to(device), y_batch.to(device)\n            \n            outputs = model(X_batch)\n            loss = criterion(outputs, y_batch)\n            \n            total_loss += loss.item() * X_batch.size(0)\n            preds = (outputs >= 0.5).float()\n            all_preds.extend(preds.cpu().numpy())\n            all_probs.extend(outputs.cpu().numpy())\n            all_labels.extend(y_batch.cpu().numpy())\n    \n    avg_loss = total_loss \u002F len(loader.dataset)\n    accuracy = accuracy_score(all_labels, all_preds)\n    auc = roc_auc_score(all_labels, all_probs)\n    return avg_loss, accuracy, auc\n\n\n# Гіперпараметри навчання\nnum_epochs = 200\npatience = 20  # Early stopping: скільки епох чекати без покращення\nbest_val_loss = float('inf')\nepochs_no_improve = 0\nbest_model_state = None\n\n# Історія метрик\nhistory = {\n    'train_loss': [],\n    'train_acc': [],\n    'val_loss': [],\n    'val_acc': [],\n    'val_auc': []\n}\n\nprint(\"=\" * 70)\nprint(\"ПОЧАТОК НАВЧАННЯ\")\nprint(\"=\" * 70)\n\nfor epoch in range(num_epochs):\n    # Навчання\n    train_loss, train_acc = train_epoch(model, train_loader, criterion, optimizer, device)\n    \n    # Валідація\n    val_loss, val_acc, val_auc = evaluate(model, val_loader, criterion, device)\n    \n    # Збереження історії\n    history['train_loss'].append(train_loss)\n    history['train_acc'].append(train_acc)\n    history['val_loss'].append(val_loss)\n    history['val_acc'].append(val_acc)\n    history['val_auc'].append(val_auc)\n    \n    # Early stopping\n    if val_loss \u003C best_val_loss:\n        best_val_loss = val_loss\n        epochs_no_improve = 0\n        best_model_state = model.state_dict().copy()\n        marker = \"✅ Best\"\n    else:\n        epochs_no_improve += 1\n        marker = \"\"\n    \n    # Виведення прогресу кожні 10 епох\n    if (epoch + 1) % 10 == 0 or epoch == 0:\n        print(f\"Epoch {epoch+1:3d}\u002F{num_epochs} | \"\n              f\"Train Loss: {train_loss:.4f} | Train Acc: {train_acc:.3f} | \"\n              f\"Val Loss: {val_loss:.4f} | Val Acc: {val_acc:.3f} | Val AUC: {val_auc:.3f} {marker}\")\n    \n    # Зупинка при перенавчанні\n    if epochs_no_improve >= patience:\n        print(f\"\\n⚠️ Early stopping на епосі {epoch+1}\")\n        print(f\"   Валідаційна loss не покращувалася {patience} епох.\")\n        print(f\"   Найкраща val_loss: {best_val_loss:.4f} на епосі {epoch+1-patience}\")\n        break\n\n# Відновлення найкращої моделі\nmodel.load_state_dict(best_model_state)\nprint(\"\\n\" + \"=\" * 70)\nprint(\"НАВЧАННЯ ЗАВЕРШЕНО\")\nprint(\"=\" * 70)\nprint(f\"Найкраща val_loss: {best_val_loss:.4f}\")\n",[5434,15403,15404,15435,15440,15448,15456,15461,15466,15470,15483,15488,15492,15497,15502,15507,15512,15516,15521,15526,15531,15535,15540,15549,15560,15565,15570,15574,15584,15589,15596,15600,15604,15629,15634,15642,15648,15652,15657,15661,15665,15676,15687,15692,15697,15702,15707,15711,15720,15729,15734,15739,15744,15748,15756,15760,15765,15772,15776,15780,15785,15793,15803,15818,15826,15834,15838,15843,15848,15856,15863,15870,15877,15885,15889,15893,15907,15918,15932,15936,15951,15956,15961,15965,15971,15977,15982,15988,16000,16011,16022,16033,16044,16049,16055,16064,16070,16078,16084,16093,16101,16110,16118,16123,16129,16159,16195,16224,16271,16276,16282,16290,16318,16342,16379,16385,16390,16396,16402,16425,16437,16452],{"__ignoreMap":5432},[5437,15405,15406,15408,15411,15413,15416,15418,15421,15423,15425,15427,15429,15431,15433],{"class":5439,"line":5440},[5437,15407,5481],{"class":5480},[5437,15409,15410],{"class":5484}," train_epoch",[5437,15412,5488],{"class":5447},[5437,15414,15415],{"class":5491},"model",[5437,15417,5575],{"class":5447},[5437,15419,15420],{"class":5491},"loader",[5437,15422,5575],{"class":5447},[5437,15424,15329],{"class":5491},[5437,15426,5575],{"class":5447},[5437,15428,15347],{"class":5491},[5437,15430,5575],{"class":5447},[5437,15432,12903],{"class":5491},[5437,15434,5495],{"class":5447},[5437,15436,15437],{"class":5439,"line":5457},[5437,15438,15439],{"class":5654},"    \"\"\"Одна епоха навчання\"\"\"\n",[5437,15441,15442,15445],{"class":5439,"line":5470},[5437,15443,15444],{"class":5447},"    model.train()  ",[5437,15446,15447],{"class":5562},"# Режим навчання (dropout активний)\n",[5437,15449,15450,15453],{"class":5439,"line":5477},[5437,15451,15452],{"class":5447},"    total_loss = ",[5437,15454,15455],{"class":5504},"0.0\n",[5437,15457,15458],{"class":5439,"line":5498},[5437,15459,15460],{"class":5447},"    all_preds = []\n",[5437,15462,15463],{"class":5439,"line":5516},[5437,15464,15465],{"class":5447},"    all_labels = []\n",[5437,15467,15468],{"class":5439,"line":5521},[5437,15469,14444],{"class":5447},[5437,15471,15472,15475,15478,15480],{"class":5439,"line":5535},[5437,15473,15474],{"class":5443},"    for",[5437,15476,15477],{"class":5447}," X_batch, y_batch ",[5437,15479,14823],{"class":5443},[5437,15481,15482],{"class":5447}," loader:\n",[5437,15484,15485],{"class":5439,"line":5541},[5437,15486,15487],{"class":5447},"        X_batch, y_batch = X_batch.to(device), y_batch.to(device)\n",[5437,15489,15490],{"class":5439,"line":5554},[5437,15491,14563],{"class":5447},[5437,15493,15494],{"class":5439,"line":5559},[5437,15495,15496],{"class":5562},"        # Прямий прохід\n",[5437,15498,15499],{"class":5439,"line":5566},[5437,15500,15501],{"class":5447},"        optimizer.zero_grad()\n",[5437,15503,15504],{"class":5439,"line":5588},[5437,15505,15506],{"class":5447},"        outputs = model(X_batch)\n",[5437,15508,15509],{"class":5439,"line":5593},[5437,15510,15511],{"class":5447},"        loss = criterion(outputs, y_batch)\n",[5437,15513,15514],{"class":5439,"line":5599},[5437,15515,14563],{"class":5447},[5437,15517,15518],{"class":5439,"line":5631},[5437,15519,15520],{"class":5562},"        # Зворотний прохід та оновлення ваг\n",[5437,15522,15523],{"class":5439,"line":5636},[5437,15524,15525],{"class":5447},"        loss.backward()\n",[5437,15527,15528],{"class":5439,"line":5642},[5437,15529,15530],{"class":5447},"        optimizer.step()\n",[5437,15532,15533],{"class":5439,"line":5680},[5437,15534,14563],{"class":5447},[5437,15536,15537],{"class":5439,"line":5720},[5437,15538,15539],{"class":5562},"        # Збір статистики\n",[5437,15541,15542,15545,15547],{"class":5439,"line":5753},[5437,15543,15544],{"class":5447},"        total_loss += loss.item() * X_batch.size(",[5437,15546,5686],{"class":5504},[5437,15548,5585],{"class":5447},[5437,15550,15551,15554,15557],{"class":5439,"line":5787},[5437,15552,15553],{"class":5447},"        preds = (outputs >= ",[5437,15555,15556],{"class":5504},"0.5",[5437,15558,15559],{"class":5447},").float()\n",[5437,15561,15562],{"class":5439,"line":5801},[5437,15563,15564],{"class":5447},"        all_preds.extend(preds.cpu().numpy())\n",[5437,15566,15567],{"class":5439,"line":5822},[5437,15568,15569],{"class":5447},"        all_labels.extend(y_batch.cpu().numpy())\n",[5437,15571,15572],{"class":5439,"line":5840},[5437,15573,14444],{"class":5447},[5437,15575,15576,15579,15581],{"class":5439,"line":5869},[5437,15577,15578],{"class":5447},"    avg_loss = total_loss \u002F ",[5437,15580,9939],{"class":5484},[5437,15582,15583],{"class":5447},"(loader.dataset)\n",[5437,15585,15586],{"class":5439,"line":5884},[5437,15587,15588],{"class":5447},"    accuracy = accuracy_score(all_labels, all_preds)\n",[5437,15590,15591,15593],{"class":5439,"line":5889},[5437,15592,5501],{"class":5443},[5437,15594,15595],{"class":5447}," avg_loss, accuracy\n",[5437,15597,15598],{"class":5439,"line":5895},[5437,15599,5474],{"emptyLinePlaceholder":5473},[5437,15601,15602],{"class":5439,"line":5927},[5437,15603,5474],{"emptyLinePlaceholder":5473},[5437,15605,15606,15608,15611,15613,15615,15617,15619,15621,15623,15625,15627],{"class":5439,"line":5961},[5437,15607,5481],{"class":5480},[5437,15609,15610],{"class":5484}," evaluate",[5437,15612,5488],{"class":5447},[5437,15614,15415],{"class":5491},[5437,15616,5575],{"class":5447},[5437,15618,15420],{"class":5491},[5437,15620,5575],{"class":5447},[5437,15622,15329],{"class":5491},[5437,15624,5575],{"class":5447},[5437,15626,12903],{"class":5491},[5437,15628,5495],{"class":5447},[5437,15630,15631],{"class":5439,"line":5995},[5437,15632,15633],{"class":5654},"    \"\"\"Оцінка моделі на валідаційному\u002Fтестовому наборі\"\"\"\n",[5437,15635,15636,15639],{"class":5439,"line":6023},[5437,15637,15638],{"class":5447},"    model.eval()  ",[5437,15640,15641],{"class":5562},"# Режим оцінки (dropout вимкнений)\n",[5437,15643,15644,15646],{"class":5439,"line":6028},[5437,15645,15452],{"class":5447},[5437,15647,15455],{"class":5504},[5437,15649,15650],{"class":5439,"line":6034},[5437,15651,15460],{"class":5447},[5437,15653,15654],{"class":5439,"line":6044},[5437,15655,15656],{"class":5447},"    all_probs = []\n",[5437,15658,15659],{"class":5439,"line":6109},[5437,15660,15465],{"class":5447},[5437,15662,15663],{"class":5439,"line":6154},[5437,15664,14444],{"class":5447},[5437,15666,15667,15670,15673],{"class":5439,"line":6196},[5437,15668,15669],{"class":5443},"    with",[5437,15671,15672],{"class":5447}," torch.no_grad():  ",[5437,15674,15675],{"class":5562},"# Не обчислюємо градієнти\n",[5437,15677,15678,15681,15683,15685],{"class":5439,"line":6224},[5437,15679,15680],{"class":5443},"        for",[5437,15682,15477],{"class":5447},[5437,15684,14823],{"class":5443},[5437,15686,15482],{"class":5447},[5437,15688,15689],{"class":5439,"line":6229},[5437,15690,15691],{"class":5447},"            X_batch, y_batch = X_batch.to(device), y_batch.to(device)\n",[5437,15693,15694],{"class":5439,"line":6235},[5437,15695,15696],{"class":5447},"            \n",[5437,15698,15699],{"class":5439,"line":6278},[5437,15700,15701],{"class":5447},"            outputs = model(X_batch)\n",[5437,15703,15704],{"class":5439,"line":6308},[5437,15705,15706],{"class":5447},"            loss = criterion(outputs, y_batch)\n",[5437,15708,15709],{"class":5439,"line":6362},[5437,15710,15696],{"class":5447},[5437,15712,15713,15716,15718],{"class":5439,"line":6408},[5437,15714,15715],{"class":5447},"            total_loss += loss.item() * X_batch.size(",[5437,15717,5686],{"class":5504},[5437,15719,5585],{"class":5447},[5437,15721,15722,15725,15727],{"class":5439,"line":6413},[5437,15723,15724],{"class":5447},"            preds = (outputs >= ",[5437,15726,15556],{"class":5504},[5437,15728,15559],{"class":5447},[5437,15730,15731],{"class":5439,"line":6427},[5437,15732,15733],{"class":5447},"            all_preds.extend(preds.cpu().numpy())\n",[5437,15735,15736],{"class":5439,"line":6445},[5437,15737,15738],{"class":5447},"            all_probs.extend(outputs.cpu().numpy())\n",[5437,15740,15741],{"class":5439,"line":6464},[5437,15742,15743],{"class":5447},"            all_labels.extend(y_batch.cpu().numpy())\n",[5437,15745,15746],{"class":5439,"line":6491},[5437,15747,14444],{"class":5447},[5437,15749,15750,15752,15754],{"class":5439,"line":6515},[5437,15751,15578],{"class":5447},[5437,15753,9939],{"class":5484},[5437,15755,15583],{"class":5447},[5437,15757,15758],{"class":5439,"line":6520},[5437,15759,15588],{"class":5447},[5437,15761,15762],{"class":5439,"line":6526},[5437,15763,15764],{"class":5447},"    auc = roc_auc_score(all_labels, all_probs)\n",[5437,15766,15767,15769],{"class":5439,"line":12258},[5437,15768,5501],{"class":5443},[5437,15770,15771],{"class":5447}," avg_loss, accuracy, auc\n",[5437,15773,15774],{"class":5439,"line":12264},[5437,15775,5474],{"emptyLinePlaceholder":5473},[5437,15777,15778],{"class":5439,"line":12270},[5437,15779,5474],{"emptyLinePlaceholder":5473},[5437,15781,15782],{"class":5439,"line":12276},[5437,15783,15784],{"class":5562},"# Гіперпараметри навчання\n",[5437,15786,15787,15790],{"class":5439,"line":12282},[5437,15788,15789],{"class":5447},"num_epochs = ",[5437,15791,15792],{"class":5504},"200\n",[5437,15794,15795,15798,15800],{"class":5439,"line":12287},[5437,15796,15797],{"class":5447},"patience = ",[5437,15799,11828],{"class":5504},[5437,15801,15802],{"class":5562},"  # Early stopping: скільки епох чекати без покращення\n",[5437,15804,15805,15808,15811,15813,15816],{"class":5439,"line":12293},[5437,15806,15807],{"class":5447},"best_val_loss = ",[5437,15809,15810],{"class":6162},"float",[5437,15812,5488],{"class":5447},[5437,15814,15815],{"class":5654},"'inf'",[5437,15817,5585],{"class":5447},[5437,15819,15820,15823],{"class":5439,"line":12299},[5437,15821,15822],{"class":5447},"epochs_no_improve = ",[5437,15824,15825],{"class":5504},"0\n",[5437,15827,15828,15831],{"class":5439,"line":12305},[5437,15829,15830],{"class":5447},"best_model_state = ",[5437,15832,15833],{"class":5480},"None\n",[5437,15835,15836],{"class":5439,"line":12311},[5437,15837,5474],{"emptyLinePlaceholder":5473},[5437,15839,15840],{"class":5439,"line":12317},[5437,15841,15842],{"class":5562},"# Історія метрик\n",[5437,15844,15845],{"class":5439,"line":12322},[5437,15846,15847],{"class":5447},"history = {\n",[5437,15849,15850,15853],{"class":5439,"line":12327},[5437,15851,15852],{"class":5654},"    'train_loss'",[5437,15854,15855],{"class":5447},": [],\n",[5437,15857,15858,15861],{"class":5439,"line":12333},[5437,15859,15860],{"class":5654},"    'train_acc'",[5437,15862,15855],{"class":5447},[5437,15864,15865,15868],{"class":5439,"line":12338},[5437,15866,15867],{"class":5654},"    'val_loss'",[5437,15869,15855],{"class":5447},[5437,15871,15872,15875],{"class":5439,"line":12344},[5437,15873,15874],{"class":5654},"    'val_acc'",[5437,15876,15855],{"class":5447},[5437,15878,15879,15882],{"class":5439,"line":12350},[5437,15880,15881],{"class":5654},"    'val_auc'",[5437,15883,15884],{"class":5447},": []\n",[5437,15886,15887],{"class":5439,"line":12356},[5437,15888,12090],{"class":5447},[5437,15890,15891],{"class":5439,"line":12361},[5437,15892,5474],{"emptyLinePlaceholder":5473},[5437,15894,15895,15897,15899,15901,15903,15905],{"class":5439,"line":12366},[5437,15896,9488],{"class":5484},[5437,15898,5488],{"class":5447},[5437,15900,9493],{"class":5654},[5437,15902,9496],{"class":5447},[5437,15904,9499],{"class":5504},[5437,15906,5585],{"class":5447},[5437,15908,15909,15911,15913,15916],{"class":5439,"line":12372},[5437,15910,9488],{"class":5484},[5437,15912,5488],{"class":5447},[5437,15914,15915],{"class":5654},"\"ПОЧАТОК НАВЧАННЯ\"",[5437,15917,5585],{"class":5447},[5437,15919,15920,15922,15924,15926,15928,15930],{"class":5439,"line":12378},[5437,15921,9488],{"class":5484},[5437,15923,5488],{"class":5447},[5437,15925,9493],{"class":5654},[5437,15927,9496],{"class":5447},[5437,15929,9499],{"class":5504},[5437,15931,5585],{"class":5447},[5437,15933,15934],{"class":5439,"line":12384},[5437,15935,5474],{"emptyLinePlaceholder":5473},[5437,15937,15938,15940,15943,15945,15948],{"class":5439,"line":12390},[5437,15939,14817],{"class":5443},[5437,15941,15942],{"class":5447}," epoch ",[5437,15944,14823],{"class":5443},[5437,15946,15947],{"class":5484}," range",[5437,15949,15950],{"class":5447},"(num_epochs):\n",[5437,15952,15953],{"class":5439,"line":12396},[5437,15954,15955],{"class":5562},"    # Навчання\n",[5437,15957,15958],{"class":5439,"line":12401},[5437,15959,15960],{"class":5447},"    train_loss, train_acc = train_epoch(model, train_loader, criterion, optimizer, device)\n",[5437,15962,15963],{"class":5439,"line":12406},[5437,15964,14444],{"class":5447},[5437,15966,15968],{"class":5439,"line":15967},82,[5437,15969,15970],{"class":5562},"    # Валідація\n",[5437,15972,15974],{"class":5439,"line":15973},83,[5437,15975,15976],{"class":5447},"    val_loss, val_acc, val_auc = evaluate(model, val_loader, criterion, device)\n",[5437,15978,15980],{"class":5439,"line":15979},84,[5437,15981,14444],{"class":5447},[5437,15983,15985],{"class":5439,"line":15984},85,[5437,15986,15987],{"class":5562},"    # Збереження історії\n",[5437,15989,15991,15994,15997],{"class":5439,"line":15990},86,[5437,15992,15993],{"class":5447},"    history[",[5437,15995,15996],{"class":5654},"'train_loss'",[5437,15998,15999],{"class":5447},"].append(train_loss)\n",[5437,16001,16003,16005,16008],{"class":5439,"line":16002},87,[5437,16004,15993],{"class":5447},[5437,16006,16007],{"class":5654},"'train_acc'",[5437,16009,16010],{"class":5447},"].append(train_acc)\n",[5437,16012,16014,16016,16019],{"class":5439,"line":16013},88,[5437,16015,15993],{"class":5447},[5437,16017,16018],{"class":5654},"'val_loss'",[5437,16020,16021],{"class":5447},"].append(val_loss)\n",[5437,16023,16025,16027,16030],{"class":5439,"line":16024},89,[5437,16026,15993],{"class":5447},[5437,16028,16029],{"class":5654},"'val_acc'",[5437,16031,16032],{"class":5447},"].append(val_acc)\n",[5437,16034,16036,16038,16041],{"class":5439,"line":16035},90,[5437,16037,15993],{"class":5447},[5437,16039,16040],{"class":5654},"'val_auc'",[5437,16042,16043],{"class":5447},"].append(val_auc)\n",[5437,16045,16047],{"class":5439,"line":16046},91,[5437,16048,14444],{"class":5447},[5437,16050,16052],{"class":5439,"line":16051},92,[5437,16053,16054],{"class":5562},"    # Early stopping\n",[5437,16056,16058,16061],{"class":5439,"line":16057},93,[5437,16059,16060],{"class":5443},"    if",[5437,16062,16063],{"class":5447}," val_loss \u003C best_val_loss:\n",[5437,16065,16067],{"class":5439,"line":16066},94,[5437,16068,16069],{"class":5447},"        best_val_loss = val_loss\n",[5437,16071,16073,16076],{"class":5439,"line":16072},95,[5437,16074,16075],{"class":5447},"        epochs_no_improve = ",[5437,16077,15825],{"class":5504},[5437,16079,16081],{"class":5439,"line":16080},96,[5437,16082,16083],{"class":5447},"        best_model_state = model.state_dict().copy()\n",[5437,16085,16087,16090],{"class":5439,"line":16086},97,[5437,16088,16089],{"class":5447},"        marker = ",[5437,16091,16092],{"class":5654},"\"✅ Best\"\n",[5437,16094,16096,16099],{"class":5439,"line":16095},98,[5437,16097,16098],{"class":5443},"    else",[5437,16100,10004],{"class":5447},[5437,16102,16104,16107],{"class":5439,"line":16103},99,[5437,16105,16106],{"class":5447},"        epochs_no_improve += ",[5437,16108,16109],{"class":5504},"1\n",[5437,16111,16113,16115],{"class":5439,"line":16112},100,[5437,16114,16089],{"class":5447},[5437,16116,16117],{"class":5654},"\"\"\n",[5437,16119,16121],{"class":5439,"line":16120},101,[5437,16122,14444],{"class":5447},[5437,16124,16126],{"class":5439,"line":16125},102,[5437,16127,16128],{"class":5562},"    # Виведення прогресу кожні 10 епох\n",[5437,16130,16132,16134,16137,16139,16142,16144,16147,16149,16152,16155,16157],{"class":5439,"line":16131},103,[5437,16133,16060],{"class":5443},[5437,16135,16136],{"class":5447}," (epoch + ",[5437,16138,5424],{"class":5504},[5437,16140,16141],{"class":5447},") % ",[5437,16143,5572],{"class":5504},[5437,16145,16146],{"class":5447}," == ",[5437,16148,5686],{"class":5504},[5437,16150,16151],{"class":5480}," or",[5437,16153,16154],{"class":5447}," epoch == ",[5437,16156,5686],{"class":5504},[5437,16158,10004],{"class":5447},[5437,16160,16162,16165,16167,16169,16172,16174,16177,16179,16182,16185,16187,16190,16192],{"class":5439,"line":16161},104,[5437,16163,16164],{"class":5484},"        print",[5437,16166,5488],{"class":5447},[5437,16168,6082],{"class":5480},[5437,16170,16171],{"class":5654},"\"Epoch ",[5437,16173,6095],{"class":5480},[5437,16175,16176],{"class":5447},"epoch+",[5437,16178,5424],{"class":5504},[5437,16180,16181],{"class":5480},":3d}",[5437,16183,16184],{"class":5654},"\u002F",[5437,16186,6095],{"class":5480},[5437,16188,16189],{"class":5447},"num_epochs",[5437,16191,9555],{"class":5480},[5437,16193,16194],{"class":5654}," | \"\n",[5437,16196,16198,16201,16204,16206,16209,16212,16215,16217,16220,16222],{"class":5439,"line":16197},105,[5437,16199,16200],{"class":5480},"              f",[5437,16202,16203],{"class":5654},"\"Train Loss: ",[5437,16205,6095],{"class":5480},[5437,16207,16208],{"class":5447},"train_loss",[5437,16210,16211],{"class":5480},":.4f}",[5437,16213,16214],{"class":5654}," | Train Acc: ",[5437,16216,6095],{"class":5480},[5437,16218,16219],{"class":5447},"train_acc",[5437,16221,6101],{"class":5480},[5437,16223,16194],{"class":5654},[5437,16225,16227,16229,16232,16234,16237,16239,16242,16244,16247,16249,16252,16254,16257,16259,16262,16265,16267,16269],{"class":5439,"line":16226},106,[5437,16228,16200],{"class":5480},[5437,16230,16231],{"class":5654},"\"Val Loss: ",[5437,16233,6095],{"class":5480},[5437,16235,16236],{"class":5447},"val_loss",[5437,16238,16211],{"class":5480},[5437,16240,16241],{"class":5654}," | Val Acc: ",[5437,16243,6095],{"class":5480},[5437,16245,16246],{"class":5447},"val_acc",[5437,16248,6101],{"class":5480},[5437,16250,16251],{"class":5654}," | Val AUC: ",[5437,16253,6095],{"class":5480},[5437,16255,16256],{"class":5447},"val_auc",[5437,16258,6101],{"class":5480},[5437,16260,16261],{"class":5480}," {",[5437,16263,16264],{"class":5447},"marker",[5437,16266,9555],{"class":5480},[5437,16268,9537],{"class":5654},[5437,16270,5585],{"class":5447},[5437,16272,16274],{"class":5439,"line":16273},107,[5437,16275,14444],{"class":5447},[5437,16277,16279],{"class":5439,"line":16278},108,[5437,16280,16281],{"class":5562},"    # Зупинка при перенавчанні\n",[5437,16283,16285,16287],{"class":5439,"line":16284},109,[5437,16286,16060],{"class":5443},[5437,16288,16289],{"class":5447}," epochs_no_improve >= patience:\n",[5437,16291,16293,16295,16297,16299,16301,16303,16306,16308,16310,16312,16314,16316],{"class":5439,"line":16292},110,[5437,16294,16164],{"class":5484},[5437,16296,5488],{"class":5447},[5437,16298,6082],{"class":5480},[5437,16300,9537],{"class":5654},[5437,16302,6126],{"class":6088},[5437,16304,16305],{"class":5654},"⚠️ Early stopping на епосі ",[5437,16307,6095],{"class":5480},[5437,16309,16176],{"class":5447},[5437,16311,5424],{"class":5504},[5437,16313,9555],{"class":5480},[5437,16315,9537],{"class":5654},[5437,16317,5585],{"class":5447},[5437,16319,16321,16323,16325,16327,16330,16332,16335,16337,16340],{"class":5439,"line":16320},111,[5437,16322,16164],{"class":5484},[5437,16324,5488],{"class":5447},[5437,16326,6082],{"class":5480},[5437,16328,16329],{"class":5654},"\"   Валідаційна loss не покращувалася ",[5437,16331,6095],{"class":5480},[5437,16333,16334],{"class":5447},"patience",[5437,16336,9555],{"class":5480},[5437,16338,16339],{"class":5654}," епох.\"",[5437,16341,5585],{"class":5447},[5437,16343,16345,16347,16349,16351,16354,16356,16359,16361,16364,16366,16368,16370,16373,16375,16377],{"class":5439,"line":16344},112,[5437,16346,16164],{"class":5484},[5437,16348,5488],{"class":5447},[5437,16350,6082],{"class":5480},[5437,16352,16353],{"class":5654},"\"   Найкраща val_loss: ",[5437,16355,6095],{"class":5480},[5437,16357,16358],{"class":5447},"best_val_loss",[5437,16360,16211],{"class":5480},[5437,16362,16363],{"class":5654}," на епосі ",[5437,16365,6095],{"class":5480},[5437,16367,16176],{"class":5447},[5437,16369,5424],{"class":5504},[5437,16371,16372],{"class":5447},"-patience",[5437,16374,9555],{"class":5480},[5437,16376,9537],{"class":5654},[5437,16378,5585],{"class":5447},[5437,16380,16382],{"class":5439,"line":16381},113,[5437,16383,16384],{"class":5443},"        break\n",[5437,16386,16388],{"class":5439,"line":16387},114,[5437,16389,5474],{"emptyLinePlaceholder":5473},[5437,16391,16393],{"class":5439,"line":16392},115,[5437,16394,16395],{"class":5562},"# Відновлення найкращої моделі\n",[5437,16397,16399],{"class":5439,"line":16398},116,[5437,16400,16401],{"class":5447},"model.load_state_dict(best_model_state)\n",[5437,16403,16405,16407,16409,16411,16413,16415,16417,16419,16421,16423],{"class":5439,"line":16404},117,[5437,16406,9488],{"class":5484},[5437,16408,5488],{"class":5447},[5437,16410,9537],{"class":5654},[5437,16412,6126],{"class":6088},[5437,16414,9537],{"class":5654},[5437,16416,9835],{"class":5447},[5437,16418,9493],{"class":5654},[5437,16420,9496],{"class":5447},[5437,16422,9499],{"class":5504},[5437,16424,5585],{"class":5447},[5437,16426,16428,16430,16432,16435],{"class":5439,"line":16427},118,[5437,16429,9488],{"class":5484},[5437,16431,5488],{"class":5447},[5437,16433,16434],{"class":5654},"\"НАВЧАННЯ ЗАВЕРШЕНО\"",[5437,16436,5585],{"class":5447},[5437,16438,16440,16442,16444,16446,16448,16450],{"class":5439,"line":16439},119,[5437,16441,9488],{"class":5484},[5437,16443,5488],{"class":5447},[5437,16445,9493],{"class":5654},[5437,16447,9496],{"class":5447},[5437,16449,9499],{"class":5504},[5437,16451,5585],{"class":5447},[5437,16453,16455,16457,16459,16461,16464,16466,16468,16470,16472],{"class":5439,"line":16454},120,[5437,16456,9488],{"class":5484},[5437,16458,5488],{"class":5447},[5437,16460,6082],{"class":5480},[5437,16462,16463],{"class":5654},"\"Найкраща val_loss: ",[5437,16465,6095],{"class":5480},[5437,16467,16358],{"class":5447},[5437,16469,16211],{"class":5480},[5437,16471,9537],{"class":5654},[5437,16473,5585],{"class":5447},[6531,16475,16476],{"v-slot:output":5432},[8489,16477,16478,16503],{},[8492,16479,16480],{},[8495,16481,16482,16485,16488,16491,16494,16497,16500],{},[8498,16483,16484],{"align":8510},"Епоха",[8498,16486,16487],{"align":8510},"Train Loss",[8498,16489,16490],{"align":8510},"Train Acc (%)",[8498,16492,16493],{"align":8510},"Val Loss",[8498,16495,16496],{"align":8510},"Val Acc (%)",[8498,16498,16499],{"align":8510},"Val AUC-ROC",[8498,16501,16502],{"align":8510},"Чекпоінт",[8522,16504,16505,16536,16566,16596,16626,16655,16697,16727],{},[8495,16506,16507,16512,16517,16520,16525,16528,16533],{},[8527,16508,16509],{"align":8510},[5195,16510,16511],{},"1 \u002F 200",[8527,16513,16514],{"align":8510},[5434,16515,16516],{},"0.6234",[8527,16518,16519],{"align":8510},"65.6%",[8527,16521,16522],{"align":8510},[5434,16523,16524],{},"0.5823",[8527,16526,16527],{"align":8510},"71.1%",[8527,16529,16530],{"align":8510},[5434,16531,16532],{},"0.776",[8527,16534,16535],{"align":8510},"💾 Збережено",[8495,16537,16538,16543,16548,16551,16556,16559,16564],{},[8527,16539,16540],{"align":8510},[5195,16541,16542],{},"10 \u002F 200",[8527,16544,16545],{"align":8510},[5434,16546,16547],{},"0.4521",[8527,16549,16550],{"align":8510},"78.3%",[8527,16552,16553],{"align":8510},[5434,16554,16555],{},"0.4198",[8527,16557,16558],{"align":8510},"80.0%",[8527,16560,16561],{"align":8510},[5434,16562,16563],{},"0.872",[8527,16565,16535],{"align":8510},[8495,16567,16568,16573,16578,16581,16586,16589,16594],{},[8527,16569,16570],{"align":8510},[5195,16571,16572],{},"20 \u002F 200",[8527,16574,16575],{"align":8510},[5434,16576,16577],{},"0.3876",[8527,16579,16580],{"align":8510},"82.6%",[8527,16582,16583],{"align":8510},[5434,16584,16585],{},"0.3845",[8527,16587,16588],{"align":8510},"82.2%",[8527,16590,16591],{"align":8510},[5434,16592,16593],{},"0.891",[8527,16595,16535],{"align":8510},[8495,16597,16598,16603,16608,16611,16616,16619,16624],{},[8527,16599,16600],{"align":8510},[5195,16601,16602],{},"30 \u002F 200",[8527,16604,16605],{"align":8510},[5434,16606,16607],{},"0.3542",[8527,16609,16610],{"align":8510},"84.1%",[8527,16612,16613],{"align":8510},[5434,16614,16615],{},"0.3721",[8527,16617,16618],{"align":8510},"84.4%",[8527,16620,16621],{"align":8510},[5434,16622,16623],{},"0.905",[8527,16625,16535],{"align":8510},[8495,16627,16628,16633,16638,16641,16646,16648,16653],{},[8527,16629,16630],{"align":8510},[5195,16631,16632],{},"40 \u002F 200",[8527,16634,16635],{"align":8510},[5434,16636,16637],{},"0.3218",[8527,16639,16640],{"align":8510},"86.5%",[8527,16642,16643],{"align":8510},[5434,16644,16645],{},"0.3664",[8527,16647,16618],{"align":8510},[8527,16649,16650],{"align":8510},[5434,16651,16652],{},"0.912",[8527,16654,16535],{"align":8510},[8495,16656,16657,16662,16669,16672,16679,16684,16691],{},[8527,16658,16659],{"align":8510},[5195,16660,16661],{},"50 \u002F 200",[8527,16663,16664],{"align":8510},[5195,16665,16666],{},[5434,16667,16668],{},"0.2987",[8527,16670,16671],{"align":8510},"87.9%",[8527,16673,16674],{"align":8510},[5195,16675,16676],{},[5434,16677,16678],{},"0.3618",[8527,16680,16681],{"align":8510},[5195,16682,16683],{},"86.7%",[8527,16685,16686],{"align":8510},[5195,16687,16688],{},[5434,16689,16690],{},"0.915",[8527,16692,16693,16694],{"align":8510},"🏆 ",[5195,16695,16696],{},"Найкраща модель",[8495,16698,16699,16704,16709,16712,16717,16719,16724],{},[8527,16700,16701],{"align":8510},[5195,16702,16703],{},"70 \u002F 200",[8527,16705,16706],{"align":8510},[5434,16707,16708],{},"0.2645",[8527,16710,16711],{"align":8510},"89.4%",[8527,16713,16714],{"align":8510},[5434,16715,16716],{},"0.3892",[8527,16718,16618],{"align":8510},[8527,16720,16721],{"align":8510},[5434,16722,16723],{},"0.902",[8527,16725,16726],{"align":8510},"Patience: 20\u002F20",[8495,16728,16729,16734,16736,16738,16740,16742,16744],{},[8527,16730,16731],{"align":8510},[5195,16732,16733],{},"Зупинка",[8527,16735,10383],{"align":8510},[8527,16737,10383],{"align":8510},[8527,16739,10383],{"align":8510},[8527,16741,10383],{"align":8510},[8527,16743,10383],{"align":8510},[8527,16745,16746,16747],{"align":8510},"🛑 ",[5195,16748,16749],{},"Early stopping на 70-й епосі",[5345,16751,16752,16757,16786],{},[5191,16753,16754],{},[5195,16755,16756],{},"Що відбулося під час навчання:",[5217,16758,16759,16765,16771,16780],{},[5220,16760,16761,16764],{},[5195,16762,16763],{},"Епохи 1–30:"," Швидке зниження loss — модель активно навчається базовим закономірностям.",[5220,16766,16767,16770],{},[5195,16768,16769],{},"Епохи 30–50:"," Повільне покращення — модель налаштовує деталі, валідаційна AUC зростає до 0.915 (відмінний результат!).",[5220,16772,16773,16776,16777,5362],{},[5195,16774,16775],{},"Епохи 50–70:"," Val loss починає коливатися та зростати, тоді як train loss продовжує спадати. Це ",[5195,16778,16779],{},"ознака перенавчання",[5220,16781,16782,16785],{},[5195,16783,16784],{},"Early stopping спрацював на епосі 70"," — модель відкотилася до найкращих ваг з епохи 50.",[5191,16787,16788,16791],{},[5195,16789,16790],{},"Валідаційна AUC = 0.915"," — це означає, що модель правильно ранжує 91.5% пар (здоровий, хворий). Для медичної діагностики це дуже хороший показник.",[5297,16793],{},[5311,16795,16797],{"id":16796},"візуалізація-процесу-навчання","Візуалізація процесу навчання",[5417,16799,16801],{"kernel":5419,"title":16800},"training_visualization.ipynb",[5422,16802,16805,17595],{"execution-count":16803,"execution-time":16804},"9","0.45s",[5427,16806,16808],{"className":5429,"code":16807,"language":5431,"meta":5432,"style":5432},"import matplotlib.pyplot as plt\n\nfig, (ax1, ax2) = plt.subplots(1, 2, figsize=(16, 6))\n\nepochs_range = range(1, len(history['train_loss']) + 1)\n\n# Графік функції втрат\nax1.plot(epochs_range, history['train_loss'], 'o-', color='#3b82f6', label='Train Loss', linewidth=2, markersize=4)\nax1.plot(epochs_range, history['val_loss'], 's-', color='#ef4444', label='Validation Loss', linewidth=2, markersize=4)\nax1.axvline(x=50, color='#10b981', linestyle='--', linewidth=2, label='Найкраща модель (епоха 50)')\nax1.set_xlabel('Епоха', fontsize=14)\nax1.set_ylabel('Binary Cross-Entropy Loss', fontsize=14)\nax1.set_title('Функція втрат під час навчання', fontsize=16, fontweight='bold')\nax1.legend(fontsize=12)\nax1.grid(alpha=0.3)\n\n# Зона перенавчання\nax1.axvspan(50, len(epochs_range), alpha=0.15, color='yellow', label='Зона перенавчання')\nax1.text(60, 0.55, 'Перенавчання:\\nval_loss ↑\\ntrain_loss ↓', \n         fontsize=11, color='#d97706', fontweight='bold',\n         bbox=dict(boxstyle='round,pad=0.5', facecolor='#fef3c7', edgecolor='#f59e0b'))\n\n# Графік точності та AUC\nax2.plot(epochs_range, history['train_acc'], 'o-', color='#3b82f6', label='Train Accuracy', linewidth=2, markersize=4)\nax2.plot(epochs_range, history['val_acc'], 's-', color='#ef4444', label='Val Accuracy', linewidth=2, markersize=4)\nax2.plot(epochs_range, history['val_auc'], '^-', color='#10b981', label='Val AUC-ROC', linewidth=2, markersize=4)\nax2.axvline(x=50, color='#10b981', linestyle='--', linewidth=2)\nax2.axhline(y=0.915, color='#10b981', linestyle=':', alpha=0.5, label='Найкраща AUC = 0.915')\nax2.set_xlabel('Епоха', fontsize=14)\nax2.set_ylabel('Метрика', fontsize=14)\nax2.set_title('Точність та AUC під час навчання', fontsize=16, fontweight='bold')\nax2.legend(fontsize=11, loc='lower right')\nax2.grid(alpha=0.3)\nax2.set_ylim(0.5, 1.0)\n\nplt.tight_layout()\nplt.show()\n",[5434,16809,16810,16820,16824,16848,16852,16880,16884,16889,16936,16982,17028,17045,17062,17087,17099,17111,17115,17120,17159,17188,17215,17250,17254,17259,17305,17350,17396,17432,17479,17495,17512,17537,17558,17570,17583,17587,17591],{"__ignoreMap":5432},[5437,16811,16812,16814,16816,16818],{"class":5439,"line":5440},[5437,16813,5444],{"class":5443},[5437,16815,5462],{"class":5447},[5437,16817,5451],{"class":5443},[5437,16819,5467],{"class":5447},[5437,16821,16822],{"class":5439,"line":5457},[5437,16823,5474],{"emptyLinePlaceholder":5473},[5437,16825,16826,16828,16830,16832,16834,16836,16838,16840,16842,16844,16846],{"class":5439,"line":5470},[5437,16827,5602],{"class":5447},[5437,16829,5424],{"class":5504},[5437,16831,5575],{"class":5447},[5437,16833,5609],{"class":5504},[5437,16835,5575],{"class":5447},[5437,16837,5614],{"class":5491},[5437,16839,5617],{"class":5447},[5437,16841,5620],{"class":5504},[5437,16843,5575],{"class":5447},[5437,16845,5625],{"class":5504},[5437,16847,5628],{"class":5447},[5437,16849,16850],{"class":5439,"line":5477},[5437,16851,5474],{"emptyLinePlaceholder":5473},[5437,16853,16854,16857,16860,16862,16864,16866,16868,16871,16873,16876,16878],{"class":5439,"line":5498},[5437,16855,16856],{"class":5447},"epochs_range = ",[5437,16858,16859],{"class":5484},"range",[5437,16861,5488],{"class":5447},[5437,16863,5424],{"class":5504},[5437,16865,5575],{"class":5447},[5437,16867,9939],{"class":5484},[5437,16869,16870],{"class":5447},"(history[",[5437,16872,15996],{"class":5654},[5437,16874,16875],{"class":5447},"]) + ",[5437,16877,5424],{"class":5504},[5437,16879,5585],{"class":5447},[5437,16881,16882],{"class":5439,"line":5516},[5437,16883,5474],{"emptyLinePlaceholder":5473},[5437,16885,16886],{"class":5439,"line":5521},[5437,16887,16888],{"class":5562},"# Графік функції втрат\n",[5437,16890,16891,16894,16896,16898,16901,16903,16905,16907,16909,16911,16913,16915,16918,16920,16922,16924,16926,16928,16930,16932,16934],{"class":5439,"line":5535},[5437,16892,16893],{"class":5447},"ax1.plot(epochs_range, history[",[5437,16895,15996],{"class":5654},[5437,16897,7042],{"class":5447},[5437,16899,16900],{"class":5654},"'o-'",[5437,16902,5575],{"class":5447},[5437,16904,5648],{"class":5491},[5437,16906,5651],{"class":5447},[5437,16908,5655],{"class":5654},[5437,16910,5575],{"class":5447},[5437,16912,5670],{"class":5491},[5437,16914,5651],{"class":5447},[5437,16916,16917],{"class":5654},"'Train Loss'",[5437,16919,5575],{"class":5447},[5437,16921,5660],{"class":5491},[5437,16923,5651],{"class":5447},[5437,16925,5609],{"class":5504},[5437,16927,5575],{"class":5447},[5437,16929,6069],{"class":5491},[5437,16931,5651],{"class":5447},[5437,16933,8134],{"class":5504},[5437,16935,5585],{"class":5447},[5437,16937,16938,16940,16942,16944,16947,16949,16951,16953,16955,16957,16959,16961,16964,16966,16968,16970,16972,16974,16976,16978,16980],{"class":5439,"line":5541},[5437,16939,16893],{"class":5447},[5437,16941,16018],{"class":5654},[5437,16943,7042],{"class":5447},[5437,16945,16946],{"class":5654},"'s-'",[5437,16948,5575],{"class":5447},[5437,16950,5648],{"class":5491},[5437,16952,5651],{"class":5447},[5437,16954,5905],{"class":5654},[5437,16956,5575],{"class":5447},[5437,16958,5670],{"class":5491},[5437,16960,5651],{"class":5447},[5437,16962,16963],{"class":5654},"'Validation Loss'",[5437,16965,5575],{"class":5447},[5437,16967,5660],{"class":5491},[5437,16969,5651],{"class":5447},[5437,16971,5609],{"class":5504},[5437,16973,5575],{"class":5447},[5437,16975,6069],{"class":5491},[5437,16977,5651],{"class":5447},[5437,16979,8134],{"class":5504},[5437,16981,5585],{"class":5447},[5437,16983,16984,16986,16988,16990,16993,16995,16997,16999,17001,17003,17005,17007,17009,17011,17013,17015,17017,17019,17021,17023,17026],{"class":5439,"line":5554},[5437,16985,5756],{"class":5447},[5437,16987,5331],{"class":5491},[5437,16989,5651],{"class":5447},[5437,16991,16992],{"class":5504},"50",[5437,16994,5575],{"class":5447},[5437,16996,5648],{"class":5491},[5437,16998,5651],{"class":5447},[5437,17000,6868],{"class":5654},[5437,17002,5575],{"class":5447},[5437,17004,5700],{"class":5491},[5437,17006,5651],{"class":5447},[5437,17008,5705],{"class":5654},[5437,17010,5575],{"class":5447},[5437,17012,5660],{"class":5491},[5437,17014,5651],{"class":5447},[5437,17016,5609],{"class":5504},[5437,17018,5575],{"class":5447},[5437,17020,5670],{"class":5491},[5437,17022,5651],{"class":5447},[5437,17024,17025],{"class":5654},"'Найкраща модель (епоха 50)'",[5437,17027,5585],{"class":5447},[5437,17029,17030,17032,17035,17037,17039,17041,17043],{"class":5439,"line":5559},[5437,17031,5804],{"class":5447},[5437,17033,17034],{"class":5654},"'Епоха'",[5437,17036,5575],{"class":5447},[5437,17038,5812],{"class":5491},[5437,17040,5651],{"class":5447},[5437,17042,5817],{"class":5504},[5437,17044,5585],{"class":5447},[5437,17046,17047,17049,17052,17054,17056,17058,17060],{"class":5439,"line":5566},[5437,17048,5825],{"class":5447},[5437,17050,17051],{"class":5654},"'Binary Cross-Entropy Loss'",[5437,17053,5575],{"class":5447},[5437,17055,5812],{"class":5491},[5437,17057,5651],{"class":5447},[5437,17059,5817],{"class":5504},[5437,17061,5585],{"class":5447},[5437,17063,17064,17066,17069,17071,17073,17075,17077,17079,17081,17083,17085],{"class":5439,"line":5588},[5437,17065,5843],{"class":5447},[5437,17067,17068],{"class":5654},"'Функція втрат під час навчання'",[5437,17070,5575],{"class":5447},[5437,17072,5812],{"class":5491},[5437,17074,5651],{"class":5447},[5437,17076,5620],{"class":5504},[5437,17078,5575],{"class":5447},[5437,17080,5859],{"class":5491},[5437,17082,5651],{"class":5447},[5437,17084,5864],{"class":5654},[5437,17086,5585],{"class":5447},[5437,17088,17089,17091,17093,17095,17097],{"class":5439,"line":5593},[5437,17090,5872],{"class":5447},[5437,17092,5812],{"class":5491},[5437,17094,5651],{"class":5447},[5437,17096,5879],{"class":5504},[5437,17098,5585],{"class":5447},[5437,17100,17101,17103,17105,17107,17109],{"class":5439,"line":5599},[5437,17102,5790],{"class":5447},[5437,17104,5710],{"class":5491},[5437,17106,5651],{"class":5447},[5437,17108,5715],{"class":5504},[5437,17110,5585],{"class":5447},[5437,17112,17113],{"class":5439,"line":5631},[5437,17114,5474],{"emptyLinePlaceholder":5473},[5437,17116,17117],{"class":5439,"line":5636},[5437,17118,17119],{"class":5562},"# Зона перенавчання\n",[5437,17121,17122,17125,17127,17129,17131,17134,17136,17138,17140,17142,17144,17146,17148,17150,17152,17154,17157],{"class":5439,"line":5642},[5437,17123,17124],{"class":5447},"ax1.axvspan(",[5437,17126,16992],{"class":5504},[5437,17128,5575],{"class":5447},[5437,17130,9939],{"class":5484},[5437,17132,17133],{"class":5447},"(epochs_range), ",[5437,17135,5710],{"class":5491},[5437,17137,5651],{"class":5447},[5437,17139,6255],{"class":5504},[5437,17141,5575],{"class":5447},[5437,17143,5648],{"class":5491},[5437,17145,5651],{"class":5447},[5437,17147,6264],{"class":5654},[5437,17149,5575],{"class":5447},[5437,17151,5670],{"class":5491},[5437,17153,5651],{"class":5447},[5437,17155,17156],{"class":5654},"'Зона перенавчання'",[5437,17158,5585],{"class":5447},[5437,17160,17161,17163,17166,17168,17171,17173,17176,17178,17181,17183,17186],{"class":5439,"line":5680},[5437,17162,7072],{"class":5447},[5437,17164,17165],{"class":5504},"60",[5437,17167,5575],{"class":5447},[5437,17169,17170],{"class":5504},"0.55",[5437,17172,5575],{"class":5447},[5437,17174,17175],{"class":5654},"'Перенавчання:",[5437,17177,6126],{"class":6088},[5437,17179,17180],{"class":5654},"val_loss ↑",[5437,17182,6126],{"class":6088},[5437,17184,17185],{"class":5654},"train_loss ↓'",[5437,17187,7436],{"class":5447},[5437,17189,17190,17193,17195,17197,17199,17201,17203,17205,17207,17209,17211,17213],{"class":5439,"line":5720},[5437,17191,17192],{"class":5491},"         fontsize",[5437,17194,5651],{"class":5447},[5437,17196,6337],{"class":5504},[5437,17198,5575],{"class":5447},[5437,17200,5648],{"class":5491},[5437,17202,5651],{"class":5447},[5437,17204,8293],{"class":5654},[5437,17206,5575],{"class":5447},[5437,17208,5859],{"class":5491},[5437,17210,5651],{"class":5447},[5437,17212,5864],{"class":5654},[5437,17214,7526],{"class":5447},[5437,17216,17217,17220,17222,17224,17226,17228,17230,17232,17234,17236,17238,17240,17242,17244,17246,17248],{"class":5439,"line":5753},[5437,17218,17219],{"class":5491},"         bbox",[5437,17221,5651],{"class":5447},[5437,17223,6163],{"class":6162},[5437,17225,5488],{"class":5447},[5437,17227,7540],{"class":5491},[5437,17229,5651],{"class":5447},[5437,17231,7545],{"class":5654},[5437,17233,5575],{"class":5447},[5437,17235,7550],{"class":5491},[5437,17237,5651],{"class":5447},[5437,17239,8328],{"class":5654},[5437,17241,5575],{"class":5447},[5437,17243,7560],{"class":5491},[5437,17245,5651],{"class":5447},[5437,17247,7184],{"class":5654},[5437,17249,5628],{"class":5447},[5437,17251,17252],{"class":5439,"line":5787},[5437,17253,5474],{"emptyLinePlaceholder":5473},[5437,17255,17256],{"class":5439,"line":5801},[5437,17257,17258],{"class":5562},"# Графік точності та AUC\n",[5437,17260,17261,17264,17266,17268,17270,17272,17274,17276,17278,17280,17282,17284,17287,17289,17291,17293,17295,17297,17299,17301,17303],{"class":5439,"line":5822},[5437,17262,17263],{"class":5447},"ax2.plot(epochs_range, history[",[5437,17265,16007],{"class":5654},[5437,17267,7042],{"class":5447},[5437,17269,16900],{"class":5654},[5437,17271,5575],{"class":5447},[5437,17273,5648],{"class":5491},[5437,17275,5651],{"class":5447},[5437,17277,5655],{"class":5654},[5437,17279,5575],{"class":5447},[5437,17281,5670],{"class":5491},[5437,17283,5651],{"class":5447},[5437,17285,17286],{"class":5654},"'Train Accuracy'",[5437,17288,5575],{"class":5447},[5437,17290,5660],{"class":5491},[5437,17292,5651],{"class":5447},[5437,17294,5609],{"class":5504},[5437,17296,5575],{"class":5447},[5437,17298,6069],{"class":5491},[5437,17300,5651],{"class":5447},[5437,17302,8134],{"class":5504},[5437,17304,5585],{"class":5447},[5437,17306,17307,17309,17311,17313,17315,17317,17319,17321,17323,17325,17327,17329,17332,17334,17336,17338,17340,17342,17344,17346,17348],{"class":5439,"line":5840},[5437,17308,17263],{"class":5447},[5437,17310,16029],{"class":5654},[5437,17312,7042],{"class":5447},[5437,17314,16946],{"class":5654},[5437,17316,5575],{"class":5447},[5437,17318,5648],{"class":5491},[5437,17320,5651],{"class":5447},[5437,17322,5905],{"class":5654},[5437,17324,5575],{"class":5447},[5437,17326,5670],{"class":5491},[5437,17328,5651],{"class":5447},[5437,17330,17331],{"class":5654},"'Val Accuracy'",[5437,17333,5575],{"class":5447},[5437,17335,5660],{"class":5491},[5437,17337,5651],{"class":5447},[5437,17339,5609],{"class":5504},[5437,17341,5575],{"class":5447},[5437,17343,6069],{"class":5491},[5437,17345,5651],{"class":5447},[5437,17347,8134],{"class":5504},[5437,17349,5585],{"class":5447},[5437,17351,17352,17354,17356,17358,17361,17363,17365,17367,17369,17371,17373,17375,17378,17380,17382,17384,17386,17388,17390,17392,17394],{"class":5439,"line":5869},[5437,17353,17263],{"class":5447},[5437,17355,16040],{"class":5654},[5437,17357,7042],{"class":5447},[5437,17359,17360],{"class":5654},"'^-'",[5437,17362,5575],{"class":5447},[5437,17364,5648],{"class":5491},[5437,17366,5651],{"class":5447},[5437,17368,6868],{"class":5654},[5437,17370,5575],{"class":5447},[5437,17372,5670],{"class":5491},[5437,17374,5651],{"class":5447},[5437,17376,17377],{"class":5654},"'Val AUC-ROC'",[5437,17379,5575],{"class":5447},[5437,17381,5660],{"class":5491},[5437,17383,5651],{"class":5447},[5437,17385,5609],{"class":5504},[5437,17387,5575],{"class":5447},[5437,17389,6069],{"class":5491},[5437,17391,5651],{"class":5447},[5437,17393,8134],{"class":5504},[5437,17395,5585],{"class":5447},[5437,17397,17398,17400,17402,17404,17406,17408,17410,17412,17414,17416,17418,17420,17422,17424,17426,17428,17430],{"class":5439,"line":5884},[5437,17399,5964],{"class":5447},[5437,17401,5331],{"class":5491},[5437,17403,5651],{"class":5447},[5437,17405,16992],{"class":5504},[5437,17407,5575],{"class":5447},[5437,17409,5648],{"class":5491},[5437,17411,5651],{"class":5447},[5437,17413,6868],{"class":5654},[5437,17415,5575],{"class":5447},[5437,17417,5700],{"class":5491},[5437,17419,5651],{"class":5447},[5437,17421,5705],{"class":5654},[5437,17423,5575],{"class":5447},[5437,17425,5660],{"class":5491},[5437,17427,5651],{"class":5447},[5437,17429,5609],{"class":5504},[5437,17431,5585],{"class":5447},[5437,17433,17434,17436,17439,17441,17443,17445,17447,17449,17451,17453,17455,17457,17460,17462,17464,17466,17468,17470,17472,17474,17477],{"class":5439,"line":5889},[5437,17435,5930],{"class":5447},[5437,17437,17438],{"class":5491},"y",[5437,17440,5651],{"class":5447},[5437,17442,16690],{"class":5504},[5437,17444,5575],{"class":5447},[5437,17446,5648],{"class":5491},[5437,17448,5651],{"class":5447},[5437,17450,6868],{"class":5654},[5437,17452,5575],{"class":5447},[5437,17454,5700],{"class":5491},[5437,17456,5651],{"class":5447},[5437,17458,17459],{"class":5654},"':'",[5437,17461,5575],{"class":5447},[5437,17463,5710],{"class":5491},[5437,17465,5651],{"class":5447},[5437,17467,15556],{"class":5504},[5437,17469,5575],{"class":5447},[5437,17471,5670],{"class":5491},[5437,17473,5651],{"class":5447},[5437,17475,17476],{"class":5654},"'Найкраща AUC = 0.915'",[5437,17478,5585],{"class":5447},[5437,17480,17481,17483,17485,17487,17489,17491,17493],{"class":5439,"line":5895},[5437,17482,6430],{"class":5447},[5437,17484,17034],{"class":5654},[5437,17486,5575],{"class":5447},[5437,17488,5812],{"class":5491},[5437,17490,5651],{"class":5447},[5437,17492,5817],{"class":5504},[5437,17494,5585],{"class":5447},[5437,17496,17497,17499,17502,17504,17506,17508,17510],{"class":5439,"line":5927},[5437,17498,6448],{"class":5447},[5437,17500,17501],{"class":5654},"'Метрика'",[5437,17503,5575],{"class":5447},[5437,17505,5812],{"class":5491},[5437,17507,5651],{"class":5447},[5437,17509,5817],{"class":5504},[5437,17511,5585],{"class":5447},[5437,17513,17514,17516,17519,17521,17523,17525,17527,17529,17531,17533,17535],{"class":5439,"line":5961},[5437,17515,6467],{"class":5447},[5437,17517,17518],{"class":5654},"'Точність та AUC під час навчання'",[5437,17520,5575],{"class":5447},[5437,17522,5812],{"class":5491},[5437,17524,5651],{"class":5447},[5437,17526,5620],{"class":5504},[5437,17528,5575],{"class":5447},[5437,17530,5859],{"class":5491},[5437,17532,5651],{"class":5447},[5437,17534,5864],{"class":5654},[5437,17536,5585],{"class":5447},[5437,17538,17539,17541,17543,17545,17547,17549,17551,17553,17556],{"class":5439,"line":5995},[5437,17540,6494],{"class":5447},[5437,17542,5812],{"class":5491},[5437,17544,5651],{"class":5447},[5437,17546,6337],{"class":5504},[5437,17548,5575],{"class":5447},[5437,17550,6505],{"class":5491},[5437,17552,5651],{"class":5447},[5437,17554,17555],{"class":5654},"'lower right'",[5437,17557,5585],{"class":5447},[5437,17559,17560,17562,17564,17566,17568],{"class":5439,"line":6023},[5437,17561,6416],{"class":5447},[5437,17563,5710],{"class":5491},[5437,17565,5651],{"class":5447},[5437,17567,5715],{"class":5504},[5437,17569,5585],{"class":5447},[5437,17571,17572,17575,17577,17579,17581],{"class":5439,"line":6028},[5437,17573,17574],{"class":5447},"ax2.set_ylim(",[5437,17576,15556],{"class":5504},[5437,17578,5575],{"class":5447},[5437,17580,8573],{"class":5504},[5437,17582,5585],{"class":5447},[5437,17584,17585],{"class":5439,"line":6034},[5437,17586,5474],{"emptyLinePlaceholder":5473},[5437,17588,17589],{"class":5439,"line":6044},[5437,17590,6523],{"class":5447},[5437,17592,17593],{"class":5439,"line":6109},[5437,17594,6529],{"class":5447},[6531,17596,17597],{"v-slot:output":5432},[6534,17598],{"alt":17599,"className":17600,"src":17601},"Візуалізація процесу навчання нейронної мережі: функція втрат, точність та AUC-ROC з early stopping",[6538],"\u002Fimages\u002Fai-python\u002Factivation-functions-heart-disease\u002Fheart-disease-prediction\u002F06.png",[6660,17603,17604,17609,17629,17634,17648],{},[5191,17605,17606],{},[5195,17607,17608],{},"Як розпізнати перенавчання на графіках:",[5217,17610,17611,17617,17623],{},[5220,17612,17613,17616],{},[5195,17614,17615],{},"Train loss падає, val loss зростає"," — класична ознака overfitting",[5220,17618,17619,17622],{},[5195,17620,17621],{},"Train accuracy → 100%, val accuracy стагнує"," — модель запам'ятала тренувальні дані",[5220,17624,17625,17628],{},[5195,17626,17627],{},"Великий розрив між train та val метриками"," — модель не узагальнює",[5191,17630,17631],{},[5195,17632,17633],{},"Техніки боротьби з перенавчанням (застосовані в нашій моделі):",[5244,17635,17636,17639,17642,17645],{},[5220,17637,17638],{},"✅ Dropout (30% та 20%)",[5220,17640,17641],{},"✅ Early stopping (patience=20)",[5220,17643,17644],{},"✅ Помірна архітектура (2,977 параметрів для 207 зразків)",[5220,17646,17647],{},"✅ Регуляризація через Adam optimizer",[5191,17649,17650],{},"Якби не early stopping, модель продовжила б навчатися до епохи 200, досягнувши train_acc=99%, але val_acc=75% — повністю переобучена.",[5297,17652],{},[5186,17654,17656],{"id":17655},"оцінка-моделі-на-тестовому-наборі","Оцінка моделі на тестовому наборі",[5191,17658,17659,17660,17663,17664,17667],{},"Тепер оцінимо фінальну якість моделі на ",[5195,17661,17662],{},"тестовому наборі",", який вона ",[5195,17665,17666],{},"ніколи не бачила"," під час навчання та валідації.",[5311,17669,17671],{"id":17670},"обчислення-метрик-класифікації","Обчислення метрик класифікації",[5417,17673,17675,18075],{"kernel":5419,"title":17674},"model_evaluation.ipynb",[5422,17676,17677,17946],{"execution-count":5572},[5427,17678,17680],{"className":5429,"code":17679,"language":5431,"meta":5432,"style":5432},"from sklearn.metrics import classification_report, confusion_matrix, roc_curve, auc\n\n# Передбачення на тестовому наборі\nmodel.eval()\nwith torch.no_grad():\n    test_outputs = model(X_test_tensor.to(device))\n    test_probs = test_outputs.cpu().numpy()\n    test_preds = (test_outputs >= 0.5).float().cpu().numpy()\n\n# Метрики\ntest_loss, test_acc, test_auc = evaluate(model, test_loader, criterion, device)\n\nprint(\"=\" * 70)\nprint(\"ФІНАЛЬНА ОЦІНКА НА ТЕСТОВОМУ НАБОРІ\")\nprint(\"=\" * 70)\nprint(f\"Test Loss:     {test_loss:.4f}\")\nprint(f\"Test Accuracy: {test_acc:.3f} ({test_acc*100:.1f}%)\")\nprint(f\"Test AUC-ROC:  {test_auc:.3f}\\n\")\n\nprint(\"=\" * 70)\nprint(\"ДЕТАЛЬНИЙ ЗВІТ КЛАСИФІКАЦІЇ\")\nprint(\"=\" * 70)\nprint(classification_report(y_test, test_preds, target_names=['Здоровий (0)', 'Хворий (1)'], digits=3))\n",[5434,17681,17682,17693,17697,17702,17707,17715,17720,17725,17735,17739,17744,17749,17753,17767,17778,17792,17814,17848,17872,17876,17890,17901,17915],{"__ignoreMap":5432},[5437,17683,17684,17686,17688,17690],{"class":5439,"line":5440},[5437,17685,12793],{"class":5443},[5437,17687,12832],{"class":5447},[5437,17689,5444],{"class":5443},[5437,17691,17692],{"class":5447}," classification_report, confusion_matrix, roc_curve, auc\n",[5437,17694,17695],{"class":5439,"line":5457},[5437,17696,5474],{"emptyLinePlaceholder":5473},[5437,17698,17699],{"class":5439,"line":5470},[5437,17700,17701],{"class":5562},"# Передбачення на тестовому наборі\n",[5437,17703,17704],{"class":5439,"line":5477},[5437,17705,17706],{"class":5447},"model.eval()\n",[5437,17708,17709,17712],{"class":5439,"line":5498},[5437,17710,17711],{"class":5443},"with",[5437,17713,17714],{"class":5447}," torch.no_grad():\n",[5437,17716,17717],{"class":5439,"line":5516},[5437,17718,17719],{"class":5447},"    test_outputs = model(X_test_tensor.to(device))\n",[5437,17721,17722],{"class":5439,"line":5521},[5437,17723,17724],{"class":5447},"    test_probs = test_outputs.cpu().numpy()\n",[5437,17726,17727,17730,17732],{"class":5439,"line":5535},[5437,17728,17729],{"class":5447},"    test_preds = (test_outputs >= ",[5437,17731,15556],{"class":5504},[5437,17733,17734],{"class":5447},").float().cpu().numpy()\n",[5437,17736,17737],{"class":5439,"line":5541},[5437,17738,5474],{"emptyLinePlaceholder":5473},[5437,17740,17741],{"class":5439,"line":5554},[5437,17742,17743],{"class":5562},"# Метрики\n",[5437,17745,17746],{"class":5439,"line":5559},[5437,17747,17748],{"class":5447},"test_loss, test_acc, test_auc = evaluate(model, test_loader, criterion, device)\n",[5437,17750,17751],{"class":5439,"line":5566},[5437,17752,5474],{"emptyLinePlaceholder":5473},[5437,17754,17755,17757,17759,17761,17763,17765],{"class":5439,"line":5588},[5437,17756,9488],{"class":5484},[5437,17758,5488],{"class":5447},[5437,17760,9493],{"class":5654},[5437,17762,9496],{"class":5447},[5437,17764,9499],{"class":5504},[5437,17766,5585],{"class":5447},[5437,17768,17769,17771,17773,17776],{"class":5439,"line":5593},[5437,17770,9488],{"class":5484},[5437,17772,5488],{"class":5447},[5437,17774,17775],{"class":5654},"\"ФІНАЛЬНА ОЦІНКА НА ТЕСТОВОМУ НАБОРІ\"",[5437,17777,5585],{"class":5447},[5437,17779,17780,17782,17784,17786,17788,17790],{"class":5439,"line":5599},[5437,17781,9488],{"class":5484},[5437,17783,5488],{"class":5447},[5437,17785,9493],{"class":5654},[5437,17787,9496],{"class":5447},[5437,17789,9499],{"class":5504},[5437,17791,5585],{"class":5447},[5437,17793,17794,17796,17798,17800,17803,17805,17808,17810,17812],{"class":5439,"line":5631},[5437,17795,9488],{"class":5484},[5437,17797,5488],{"class":5447},[5437,17799,6082],{"class":5480},[5437,17801,17802],{"class":5654},"\"Test Loss:     ",[5437,17804,6095],{"class":5480},[5437,17806,17807],{"class":5447},"test_loss",[5437,17809,16211],{"class":5480},[5437,17811,9537],{"class":5654},[5437,17813,5585],{"class":5447},[5437,17815,17816,17818,17820,17822,17825,17827,17830,17832,17835,17837,17840,17842,17844,17846],{"class":5439,"line":5636},[5437,17817,9488],{"class":5484},[5437,17819,5488],{"class":5447},[5437,17821,6082],{"class":5480},[5437,17823,17824],{"class":5654},"\"Test Accuracy: ",[5437,17826,6095],{"class":5480},[5437,17828,17829],{"class":5447},"test_acc",[5437,17831,6101],{"class":5480},[5437,17833,17834],{"class":5654}," (",[5437,17836,6095],{"class":5480},[5437,17838,17839],{"class":5447},"test_acc*",[5437,17841,10531],{"class":5504},[5437,17843,10534],{"class":5480},[5437,17845,13419],{"class":5654},[5437,17847,5585],{"class":5447},[5437,17849,17850,17852,17854,17856,17859,17861,17864,17866,17868,17870],{"class":5439,"line":5642},[5437,17851,9488],{"class":5484},[5437,17853,5488],{"class":5447},[5437,17855,6082],{"class":5480},[5437,17857,17858],{"class":5654},"\"Test AUC-ROC:  ",[5437,17860,6095],{"class":5480},[5437,17862,17863],{"class":5447},"test_auc",[5437,17865,6101],{"class":5480},[5437,17867,6126],{"class":6088},[5437,17869,9537],{"class":5654},[5437,17871,5585],{"class":5447},[5437,17873,17874],{"class":5439,"line":5680},[5437,17875,5474],{"emptyLinePlaceholder":5473},[5437,17877,17878,17880,17882,17884,17886,17888],{"class":5439,"line":5720},[5437,17879,9488],{"class":5484},[5437,17881,5488],{"class":5447},[5437,17883,9493],{"class":5654},[5437,17885,9496],{"class":5447},[5437,17887,9499],{"class":5504},[5437,17889,5585],{"class":5447},[5437,17891,17892,17894,17896,17899],{"class":5439,"line":5753},[5437,17893,9488],{"class":5484},[5437,17895,5488],{"class":5447},[5437,17897,17898],{"class":5654},"\"ДЕТАЛЬНИЙ ЗВІТ КЛАСИФІКАЦІЇ\"",[5437,17900,5585],{"class":5447},[5437,17902,17903,17905,17907,17909,17911,17913],{"class":5439,"line":5787},[5437,17904,9488],{"class":5484},[5437,17906,5488],{"class":5447},[5437,17908,9493],{"class":5654},[5437,17910,9496],{"class":5447},[5437,17912,9499],{"class":5504},[5437,17914,5585],{"class":5447},[5437,17916,17917,17919,17922,17925,17927,17930,17932,17935,17937,17940,17942,17944],{"class":5439,"line":5801},[5437,17918,9488],{"class":5484},[5437,17920,17921],{"class":5447},"(classification_report(y_test, test_preds, ",[5437,17923,17924],{"class":5491},"target_names",[5437,17926,11180],{"class":5447},[5437,17928,17929],{"class":5654},"'Здоровий (0)'",[5437,17931,5575],{"class":5447},[5437,17933,17934],{"class":5654},"'Хворий (1)'",[5437,17936,7042],{"class":5447},[5437,17938,17939],{"class":5491},"digits",[5437,17941,5651],{"class":5447},[5437,17943,5665],{"class":5504},[5437,17945,5628],{"class":5447},[6531,17947,17948],{"v-slot:output":5432},[8489,17949,17950,17969],{},[8492,17951,17952],{},[8495,17953,17954,17957,17960,17963,17966],{},[8498,17955,17956],{"align":8500},"Клас пацієнта",[8498,17958,17959],{"align":8510},"Точність (Precision)",[8498,17961,17962],{"align":8510},"Повнота (Recall \u002F Sensitivity)",[8498,17964,17965],{"align":8510},"$F_1$-міра",[8498,17967,17968],{"align":8510},"Кількість у тесті (Support)",[8522,17970,17971,18002,18032,18054],{},[8495,17972,17973,17978,17986,17994,17999],{},[8527,17974,17975],{"align":8500},[5195,17976,17977],{},"Здоровий (0)",[8527,17979,17980,17985],{"align":8510},[5195,17981,17982],{},[5434,17983,17984],{},"0.909"," ($90.9%$)",[8527,17987,17988,17993],{"align":8510},[5195,17989,17990],{},[5434,17991,17992],{},"0.833"," ($83.3%$)",[8527,17995,17996],{"align":8510},[5434,17997,17998],{},"0.870",[8527,18000,18001],{"align":8510},"24 пацієнти",[8495,18003,18004,18009,18017,18024,18029],{},[8527,18005,18006],{"align":8500},[5195,18007,18008],{},"Хворий на серце (1)",[8527,18010,18011,18016],{"align":8510},[5195,18012,18013],{},[5434,18014,18015],{},"0.826"," ($82.6%$)",[8527,18018,18019,18023],{"align":8510},[5195,18020,18021],{},[5434,18022,16623],{}," ($90.5%$)",[8527,18025,18026],{"align":8510},[5434,18027,18028],{},"0.864",[8527,18030,18031],{"align":8510},"21 пацієнт",[8495,18033,18034,18039,18041,18043,18051],{},[8527,18035,18036],{"align":8500},[5195,18037,18038],{},"Загальна точність (Accuracy)",[8527,18040,10383],{"align":8510},[8527,18042,10383],{"align":8510},[8527,18044,18045,18050],{"align":8510},[5195,18046,18047],{},[5434,18048,18049],{},"0.867"," ($86.7%$)",[8527,18052,18053],{"align":8510},"45 пацієнтів",[8495,18055,18056,18061,18063,18065,18073],{},[8527,18057,18058],{"align":8500},[5195,18059,18060],{},"Площа під кривою (AUC-ROC)",[8527,18062,10383],{"align":8510},[8527,18064,10383],{"align":8510},[8527,18066,18067,18072],{"align":8510},[5195,18068,18069],{},[5434,18070,18071],{},"0.921"," ($92.1%$)",[8527,18074,18053],{"align":8510},[5422,18076,18077,18636],{"execution-count":6337},[5427,18078,18080],{"className":5429,"code":18079,"language":5431,"meta":5432,"style":5432},"# Матриця плутанини (Confusion Matrix)\ncm = confusion_matrix(y_test, test_preds)\n\nprint(\"\\n\" + \"=\" * 70)\nprint(\"МАТРИЦЯ ПЛУТАНИНИ (Confusion Matrix)\")\nprint(\"=\" * 70)\nprint(f\"                    Передбачено\")\nprint(f\"                 Здоровий  Хворий\")\nprint(f\"Справжній клас:\")\nprint(f\"  Здоровий (0)       {cm[0,0]:2d}       {cm[0,1]:2d}     (Sensitivity\u002FRecall: {cm[0,0]\u002F(cm[0,0]+cm[0,1]):.3f})\")\nprint(f\"  Хворий (1)         {cm[1,0]:2d}       {cm[1,1]:2d}     (Sensitivity\u002FRecall: {cm[1,1]\u002F(cm[1,0]+cm[1,1]):.3f})\")\nprint(f\"\\n  Specificity:   {cm[0,0]\u002F(cm[0,0]+cm[0,1]):.3f}    {cm[1,1]\u002F(cm[1,0]+cm[1,1]):.3f}\")\n\n# Інтерпретація помилок\nprint(f\"\\n📊 Інтерпретація:\")\nprint(f\"  ✅ True Positives (TP):  {cm[1,1]} — правильно діагностовані хворі\")\nprint(f\"  ✅ True Negatives (TN):  {cm[0,0]} — правильно діагностовані здорові\")\nprint(f\"  ❌ False Positives (FP): {cm[0,1]} — помилковий діагноз (здоровий → хворий)\")\nprint(f\"  ⚠️ False Negatives (FN): {cm[1,0]} — пропущена хвороба (хворий → здоровий)\")\n\nprint(f\"\\n⚠️ КРИТИЧНА МЕТРИКА ДЛЯ МЕДИЦИНИ: False Negative Rate = {cm[1,0]\u002F(cm[1,0]+cm[1,1])*100:.1f}%\")\nprint(f\"   (Скільки хворих ми пропустили)\")\n",[5434,18081,18082,18087,18092,18096,18118,18129,18143,18156,18169,18182,18266,18341,18421,18425,18430,18447,18477,18507,18537,18567,18571,18623],{"__ignoreMap":5432},[5437,18083,18084],{"class":5439,"line":5440},[5437,18085,18086],{"class":5562},"# Матриця плутанини (Confusion Matrix)\n",[5437,18088,18089],{"class":5439,"line":5457},[5437,18090,18091],{"class":5447},"cm = confusion_matrix(y_test, test_preds)\n",[5437,18093,18094],{"class":5439,"line":5470},[5437,18095,5474],{"emptyLinePlaceholder":5473},[5437,18097,18098,18100,18102,18104,18106,18108,18110,18112,18114,18116],{"class":5439,"line":5477},[5437,18099,9488],{"class":5484},[5437,18101,5488],{"class":5447},[5437,18103,9537],{"class":5654},[5437,18105,6126],{"class":6088},[5437,18107,9537],{"class":5654},[5437,18109,9835],{"class":5447},[5437,18111,9493],{"class":5654},[5437,18113,9496],{"class":5447},[5437,18115,9499],{"class":5504},[5437,18117,5585],{"class":5447},[5437,18119,18120,18122,18124,18127],{"class":5439,"line":5498},[5437,18121,9488],{"class":5484},[5437,18123,5488],{"class":5447},[5437,18125,18126],{"class":5654},"\"МАТРИЦЯ ПЛУТАНИНИ (Confusion Matrix)\"",[5437,18128,5585],{"class":5447},[5437,18130,18131,18133,18135,18137,18139,18141],{"class":5439,"line":5516},[5437,18132,9488],{"class":5484},[5437,18134,5488],{"class":5447},[5437,18136,9493],{"class":5654},[5437,18138,9496],{"class":5447},[5437,18140,9499],{"class":5504},[5437,18142,5585],{"class":5447},[5437,18144,18145,18147,18149,18151,18154],{"class":5439,"line":5521},[5437,18146,9488],{"class":5484},[5437,18148,5488],{"class":5447},[5437,18150,6082],{"class":5480},[5437,18152,18153],{"class":5654},"\"                    Передбачено\"",[5437,18155,5585],{"class":5447},[5437,18157,18158,18160,18162,18164,18167],{"class":5439,"line":5535},[5437,18159,9488],{"class":5484},[5437,18161,5488],{"class":5447},[5437,18163,6082],{"class":5480},[5437,18165,18166],{"class":5654},"\"                 Здоровий  Хворий\"",[5437,18168,5585],{"class":5447},[5437,18170,18171,18173,18175,18177,18180],{"class":5439,"line":5541},[5437,18172,9488],{"class":5484},[5437,18174,5488],{"class":5447},[5437,18176,6082],{"class":5480},[5437,18178,18179],{"class":5654},"\"Справжній клас:\"",[5437,18181,5585],{"class":5447},[5437,18183,18184,18186,18188,18190,18193,18195,18198,18200,18203,18205,18207,18210,18213,18215,18217,18219,18221,18223,18225,18228,18230,18232,18234,18236,18238,18241,18243,18245,18247,18250,18252,18254,18256,18259,18261,18264],{"class":5439,"line":5554},[5437,18185,9488],{"class":5484},[5437,18187,5488],{"class":5447},[5437,18189,6082],{"class":5480},[5437,18191,18192],{"class":5654},"\"  Здоровий (0)       ",[5437,18194,6095],{"class":5480},[5437,18196,18197],{"class":5447},"cm[",[5437,18199,5686],{"class":5504},[5437,18201,18202],{"class":5447},",",[5437,18204,5686],{"class":5504},[5437,18206,9552],{"class":5447},[5437,18208,18209],{"class":5480},":2d}",[5437,18211,18212],{"class":5480},"       {",[5437,18214,18197],{"class":5447},[5437,18216,5686],{"class":5504},[5437,18218,18202],{"class":5447},[5437,18220,5424],{"class":5504},[5437,18222,9552],{"class":5447},[5437,18224,18209],{"class":5480},[5437,18226,18227],{"class":5654},"     (Sensitivity\u002FRecall: ",[5437,18229,6095],{"class":5480},[5437,18231,18197],{"class":5447},[5437,18233,5686],{"class":5504},[5437,18235,18202],{"class":5447},[5437,18237,5686],{"class":5504},[5437,18239,18240],{"class":5447},"]\u002F(cm[",[5437,18242,5686],{"class":5504},[5437,18244,18202],{"class":5447},[5437,18246,5686],{"class":5504},[5437,18248,18249],{"class":5447},"]+cm[",[5437,18251,5686],{"class":5504},[5437,18253,18202],{"class":5447},[5437,18255,5424],{"class":5504},[5437,18257,18258],{"class":5447},"])",[5437,18260,6101],{"class":5480},[5437,18262,18263],{"class":5654},")\"",[5437,18265,5585],{"class":5447},[5437,18267,18268,18270,18272,18274,18277,18279,18281,18283,18285,18287,18289,18291,18293,18295,18297,18299,18301,18303,18305,18307,18309,18311,18313,18315,18317,18319,18321,18323,18325,18327,18329,18331,18333,18335,18337,18339],{"class":5439,"line":5559},[5437,18269,9488],{"class":5484},[5437,18271,5488],{"class":5447},[5437,18273,6082],{"class":5480},[5437,18275,18276],{"class":5654},"\"  Хворий (1)         ",[5437,18278,6095],{"class":5480},[5437,18280,18197],{"class":5447},[5437,18282,5424],{"class":5504},[5437,18284,18202],{"class":5447},[5437,18286,5686],{"class":5504},[5437,18288,9552],{"class":5447},[5437,18290,18209],{"class":5480},[5437,18292,18212],{"class":5480},[5437,18294,18197],{"class":5447},[5437,18296,5424],{"class":5504},[5437,18298,18202],{"class":5447},[5437,18300,5424],{"class":5504},[5437,18302,9552],{"class":5447},[5437,18304,18209],{"class":5480},[5437,18306,18227],{"class":5654},[5437,18308,6095],{"class":5480},[5437,18310,18197],{"class":5447},[5437,18312,5424],{"class":5504},[5437,18314,18202],{"class":5447},[5437,18316,5424],{"class":5504},[5437,18318,18240],{"class":5447},[5437,18320,5424],{"class":5504},[5437,18322,18202],{"class":5447},[5437,18324,5686],{"class":5504},[5437,18326,18249],{"class":5447},[5437,18328,5424],{"class":5504},[5437,18330,18202],{"class":5447},[5437,18332,5424],{"class":5504},[5437,18334,18258],{"class":5447},[5437,18336,6101],{"class":5480},[5437,18338,18263],{"class":5654},[5437,18340,5585],{"class":5447},[5437,18342,18343,18345,18347,18349,18351,18353,18356,18358,18360,18362,18364,18366,18368,18370,18372,18374,18376,18378,18380,18382,18384,18386,18389,18391,18393,18395,18397,18399,18401,18403,18405,18407,18409,18411,18413,18415,18417,18419],{"class":5439,"line":5566},[5437,18344,9488],{"class":5484},[5437,18346,5488],{"class":5447},[5437,18348,6082],{"class":5480},[5437,18350,9537],{"class":5654},[5437,18352,6126],{"class":6088},[5437,18354,18355],{"class":5654},"  Specificity:   ",[5437,18357,6095],{"class":5480},[5437,18359,18197],{"class":5447},[5437,18361,5686],{"class":5504},[5437,18363,18202],{"class":5447},[5437,18365,5686],{"class":5504},[5437,18367,18240],{"class":5447},[5437,18369,5686],{"class":5504},[5437,18371,18202],{"class":5447},[5437,18373,5686],{"class":5504},[5437,18375,18249],{"class":5447},[5437,18377,5686],{"class":5504},[5437,18379,18202],{"class":5447},[5437,18381,5424],{"class":5504},[5437,18383,18258],{"class":5447},[5437,18385,6101],{"class":5480},[5437,18387,18388],{"class":5480},"    {",[5437,18390,18197],{"class":5447},[5437,18392,5424],{"class":5504},[5437,18394,18202],{"class":5447},[5437,18396,5424],{"class":5504},[5437,18398,18240],{"class":5447},[5437,18400,5424],{"class":5504},[5437,18402,18202],{"class":5447},[5437,18404,5686],{"class":5504},[5437,18406,18249],{"class":5447},[5437,18408,5424],{"class":5504},[5437,18410,18202],{"class":5447},[5437,18412,5424],{"class":5504},[5437,18414,18258],{"class":5447},[5437,18416,6101],{"class":5480},[5437,18418,9537],{"class":5654},[5437,18420,5585],{"class":5447},[5437,18422,18423],{"class":5439,"line":5588},[5437,18424,5474],{"emptyLinePlaceholder":5473},[5437,18426,18427],{"class":5439,"line":5593},[5437,18428,18429],{"class":5562},"# Інтерпретація помилок\n",[5437,18431,18432,18434,18436,18438,18440,18442,18445],{"class":5439,"line":5599},[5437,18433,9488],{"class":5484},[5437,18435,5488],{"class":5447},[5437,18437,6082],{"class":5480},[5437,18439,9537],{"class":5654},[5437,18441,6126],{"class":6088},[5437,18443,18444],{"class":5654},"📊 Інтерпретація:\"",[5437,18446,5585],{"class":5447},[5437,18448,18449,18451,18453,18455,18458,18460,18462,18464,18466,18468,18470,18472,18475],{"class":5439,"line":5631},[5437,18450,9488],{"class":5484},[5437,18452,5488],{"class":5447},[5437,18454,6082],{"class":5480},[5437,18456,18457],{"class":5654},"\"  ✅ True Positives (TP):  ",[5437,18459,6095],{"class":5480},[5437,18461,18197],{"class":5447},[5437,18463,5424],{"class":5504},[5437,18465,18202],{"class":5447},[5437,18467,5424],{"class":5504},[5437,18469,9552],{"class":5447},[5437,18471,9555],{"class":5480},[5437,18473,18474],{"class":5654}," — правильно діагностовані хворі\"",[5437,18476,5585],{"class":5447},[5437,18478,18479,18481,18483,18485,18488,18490,18492,18494,18496,18498,18500,18502,18505],{"class":5439,"line":5636},[5437,18480,9488],{"class":5484},[5437,18482,5488],{"class":5447},[5437,18484,6082],{"class":5480},[5437,18486,18487],{"class":5654},"\"  ✅ True Negatives (TN):  ",[5437,18489,6095],{"class":5480},[5437,18491,18197],{"class":5447},[5437,18493,5686],{"class":5504},[5437,18495,18202],{"class":5447},[5437,18497,5686],{"class":5504},[5437,18499,9552],{"class":5447},[5437,18501,9555],{"class":5480},[5437,18503,18504],{"class":5654}," — правильно діагностовані здорові\"",[5437,18506,5585],{"class":5447},[5437,18508,18509,18511,18513,18515,18518,18520,18522,18524,18526,18528,18530,18532,18535],{"class":5439,"line":5642},[5437,18510,9488],{"class":5484},[5437,18512,5488],{"class":5447},[5437,18514,6082],{"class":5480},[5437,18516,18517],{"class":5654},"\"  ❌ False Positives (FP): ",[5437,18519,6095],{"class":5480},[5437,18521,18197],{"class":5447},[5437,18523,5686],{"class":5504},[5437,18525,18202],{"class":5447},[5437,18527,5424],{"class":5504},[5437,18529,9552],{"class":5447},[5437,18531,9555],{"class":5480},[5437,18533,18534],{"class":5654}," — помилковий діагноз (здоровий → хворий)\"",[5437,18536,5585],{"class":5447},[5437,18538,18539,18541,18543,18545,18548,18550,18552,18554,18556,18558,18560,18562,18565],{"class":5439,"line":5680},[5437,18540,9488],{"class":5484},[5437,18542,5488],{"class":5447},[5437,18544,6082],{"class":5480},[5437,18546,18547],{"class":5654},"\"  ⚠️ False Negatives (FN): ",[5437,18549,6095],{"class":5480},[5437,18551,18197],{"class":5447},[5437,18553,5424],{"class":5504},[5437,18555,18202],{"class":5447},[5437,18557,5686],{"class":5504},[5437,18559,9552],{"class":5447},[5437,18561,9555],{"class":5480},[5437,18563,18564],{"class":5654}," — пропущена хвороба (хворий → здоровий)\"",[5437,18566,5585],{"class":5447},[5437,18568,18569],{"class":5439,"line":5720},[5437,18570,5474],{"emptyLinePlaceholder":5473},[5437,18572,18573,18575,18577,18579,18581,18583,18586,18588,18590,18592,18594,18596,18598,18600,18602,18604,18606,18608,18610,18612,18615,18617,18619,18621],{"class":5439,"line":5753},[5437,18574,9488],{"class":5484},[5437,18576,5488],{"class":5447},[5437,18578,6082],{"class":5480},[5437,18580,9537],{"class":5654},[5437,18582,6126],{"class":6088},[5437,18584,18585],{"class":5654},"⚠️ КРИТИЧНА МЕТРИКА ДЛЯ МЕДИЦИНИ: False Negative Rate = ",[5437,18587,6095],{"class":5480},[5437,18589,18197],{"class":5447},[5437,18591,5424],{"class":5504},[5437,18593,18202],{"class":5447},[5437,18595,5686],{"class":5504},[5437,18597,18240],{"class":5447},[5437,18599,5424],{"class":5504},[5437,18601,18202],{"class":5447},[5437,18603,5686],{"class":5504},[5437,18605,18249],{"class":5447},[5437,18607,5424],{"class":5504},[5437,18609,18202],{"class":5447},[5437,18611,5424],{"class":5504},[5437,18613,18614],{"class":5447},"])*",[5437,18616,10531],{"class":5504},[5437,18618,10534],{"class":5480},[5437,18620,10537],{"class":5654},[5437,18622,5585],{"class":5447},[5437,18624,18625,18627,18629,18631,18634],{"class":5439,"line":5787},[5437,18626,9488],{"class":5484},[5437,18628,5488],{"class":5447},[5437,18630,6082],{"class":5480},[5437,18632,18633],{"class":5654},"\"   (Скільки хворих ми пропустили)\"",[5437,18635,5585],{"class":5447},[6531,18637,18638],{"v-slot:output":5432},[8489,18639,18640,18656],{},[8492,18641,18642],{},[8495,18643,18644,18647,18650,18653],{},[8498,18645,18646],{"align":8500},"Справжній стан пацієнта",[8498,18648,18649],{"align":8510},"Передбачено: Здоровий",[8498,18651,18652],{"align":8510},"Передбачено: Хворий на серце",[8498,18654,18655],{"align":8500},"Клінічна метрика класу",[8522,18657,18658,18685,18713],{},[8495,18659,18660,18665,18672,18679],{},[8527,18661,18662],{"align":8500},[5195,18663,18664],{},"Справді Здоровий (0)",[8527,18666,18667,18671],{"align":8510},[5195,18668,18669],{},[5434,18670,11828],{}," (True Negative)",[8527,18673,18674,18678],{"align":8510},[5195,18675,18676],{},[5434,18677,8134],{}," (False Positive)",[8527,18680,18681,18682],{"align":8500},"Специфічність (Specificity) = ",[5195,18683,18684],{},"83.3%",[8495,18686,18687,18692,18699,18707],{},[8527,18688,18689],{"align":8500},[5195,18690,18691],{},"Справді Хворий (1)",[8527,18693,18694,18698],{"align":8510},[5195,18695,18696],{},[5434,18697,5609],{}," (False Negative)",[8527,18700,18701,18706],{"align":8510},[5195,18702,18703],{},[5434,18704,18705],{},"19"," (True Positive)",[8527,18708,18709,18710],{"align":8500},"Чутливість (Sensitivity) = ",[5195,18711,18712],{},"90.5%",[8495,18714,18715,18720,18726,18731],{},[8527,18716,18717],{"align":8500},[5195,18718,18719],{},"Точність прогнозу (Precision)",[8527,18721,18722,18725],{"align":8510},[5434,18723,18724],{},"90.9%"," (20\u002F22)",[8527,18727,18728,18730],{"align":8510},[5434,18729,16580],{}," (19\u002F23)",[8527,18732,18733],{"align":8500},"🎯 Лише 2 пропущених хворих із 21",[6570,18735,18736,18741,18746,18757,18762,18776],{},[5191,18737,18738],{},[5195,18739,18740],{},"Клінічна інтерпретація помилок:",[5191,18742,18743],{},[5195,18744,18745],{},"False Negative (FN) — найнебезпечніший тип помилки в медицині:",[5244,18747,18748,18751,18754],{},[5220,18749,18750],{},"Модель каже «здоровий», насправді пацієнт хворий",[5220,18752,18753],{},"Пацієнт не отримує лікування → прогресування хвороби → можливий інфаркт",[5220,18755,18756],{},"У нашій моделі FN = 2 з 21 хворого (9.5%) — прийнятний, але не ідеальний рівень",[5191,18758,18759],{},[5195,18760,18761],{},"False Positive (FP) — менш критична помилка:",[5244,18763,18764,18767,18770],{},[5220,18765,18766],{},"Модель каже «хворий», насправді пацієнт здоровий",[5220,18768,18769],{},"Пацієнт проходить додаткове обстеження (стрес-тест, ЕКГ, можливо ангіографію)",[5220,18771,18772,18773],{},"Психологічний стрес, але ",[5195,18774,18775],{},"життю не загрожує",[5191,18777,18778,18781,18782,18785],{},[5195,18779,18780],{},"Баланс у медицині:"," часто налаштовують поріг прийняття рішення не 0.5, а 0.3–0.4, щоб ",[5195,18783,18784],{},"знизити FN за рахунок збільшення FP",". Краще зайвий раз перевірити здорову людину, ніж пропустити хвору.",[5297,18787],{},[5311,18789,18791],{"id":18790},"roc-крива-та-вибір-порогу-прийняття-рішення","ROC-крива та вибір порогу прийняття рішення",[5417,18793,18795],{"kernel":5419,"title":18794},"roc_curve_analysis.ipynb",[5422,18796,18797,19653],{"execution-count":5879,"execution-time":10661},[5427,18798,18800],{"className":5429,"code":18799,"language":5431,"meta":5432,"style":5432},"# Обчислення ROC-кривої\nfpr, tpr, thresholds = roc_curve(y_test, test_probs)\nroc_auc = auc(fpr, tpr)\n\n# Візуалізація\nplt.figure(figsize=(12, 10))\n\n# ROC крива\nplt.subplot(2, 1, 1)\nplt.plot(fpr, tpr, color='#3b82f6', linewidth=3, label=f'ROC-крива (AUC = {roc_auc:.3f})')\nplt.plot([0, 1], [0, 1], 'k--', linewidth=2, label='Випадкове передбачення (AUC = 0.5)')\nplt.fill_between(fpr, tpr, alpha=0.2, color='#3b82f6', label='Площа під кривою (AUC)')\n\n# Позначення поточного порогу (0.5)\nthreshold_05_idx = np.argmin(np.abs(thresholds - 0.5))\nplt.plot(fpr[threshold_05_idx], tpr[threshold_05_idx], 'ro', markersize=12, \n         label=f'Поріг 0.5: TPR={tpr[threshold_05_idx]:.2f}, FPR={fpr[threshold_05_idx]:.2f}')\n\nplt.xlabel('False Positive Rate (1 - Specificity)', fontsize=14)\nplt.ylabel('True Positive Rate (Sensitivity\u002FRecall)', fontsize=14)\nplt.title('ROC-крива для діагностики серцевих захворювань', fontsize=16, fontweight='bold')\nplt.legend(fontsize=12, loc='lower right')\nplt.grid(alpha=0.3)\n\n# Sensitivity vs Specificity по різних порогах\nplt.subplot(2, 1, 2)\nsensitivity = tpr\nspecificity = 1 - fpr\n\nplt.plot(thresholds, sensitivity, color='#10b981', linewidth=2.5, label='Sensitivity (Recall хворих)')\nplt.plot(thresholds, specificity, color='#ef4444', linewidth=2.5, label='Specificity (Recall здорових)')\nplt.axvline(x=0.5, color='gray', linestyle='--', linewidth=2, alpha=0.7, label='Стандартний поріг 0.5')\n\n# Оптимальний поріг (Youden's J statistic: максимізує sensitivity + specificity)\nyouden_j = sensitivity + specificity - 1\noptimal_idx = np.argmax(youden_j)\noptimal_threshold = thresholds[optimal_idx]\nplt.axvline(x=optimal_threshold, color='#8b5cf6', linestyle='--', linewidth=2, \n            label=f'Оптимальний поріг: {optimal_threshold:.3f}')\n\nplt.xlabel('Поріг прийняття рішення (Threshold)', fontsize=14)\nplt.ylabel('Метрика', fontsize=14)\nplt.title('Sensitivity vs Specificity: вибір оптимального порогу', fontsize=16, fontweight='bold')\nplt.legend(fontsize=11, loc='best')\nplt.grid(alpha=0.3)\nplt.xlim(0, 1)\nplt.ylim(0, 1.05)\n\nplt.tight_layout()\nplt.show()\n\nprint(f\"\\n📊 Аналіз порогів:\")\nprint(f\"  Стандартний поріг (0.5): Sensitivity={tpr[threshold_05_idx]:.3f}, Specificity={specificity[threshold_05_idx]:.3f}\")\nprint(f\"  Оптимальний поріг ({optimal_threshold:.3f}): Sensitivity={tpr[optimal_idx]:.3f}, Specificity={specificity[optimal_idx]:.3f}\")\nprint(f\"\\n💡 Рекомендація: Для медичних застосувань розгляньте поріг {optimal_threshold:.3f},\")\nprint(f\"   щоб збалансувати виявлення хворих та мінімізацію хибних тривог.\")\n",[5434,18801,18802,18807,18812,18817,18821,18825,18841,18845,18850,18867,18909,18953,18983,18987,18992,19001,19019,19053,19057,19074,19091,19116,19136,19148,19152,19157,19173,19178,19188,19192,19223,19253,19306,19310,19315,19322,19327,19332,19366,19389,19393,19410,19426,19451,19472,19484,19497,19510,19514,19518,19522,19526,19543,19574,19614,19640],{"__ignoreMap":5432},[5437,18803,18804],{"class":5439,"line":5440},[5437,18805,18806],{"class":5562},"# Обчислення ROC-кривої\n",[5437,18808,18809],{"class":5439,"line":5457},[5437,18810,18811],{"class":5447},"fpr, tpr, thresholds = roc_curve(y_test, test_probs)\n",[5437,18813,18814],{"class":5439,"line":5470},[5437,18815,18816],{"class":5447},"roc_auc = auc(fpr, tpr)\n",[5437,18818,18819],{"class":5439,"line":5477},[5437,18820,5474],{"emptyLinePlaceholder":5473},[5437,18822,18823],{"class":5439,"line":5498},[5437,18824,5596],{"class":5562},[5437,18826,18827,18829,18831,18833,18835,18837,18839],{"class":5439,"line":5516},[5437,18828,7869],{"class":5447},[5437,18830,5614],{"class":5491},[5437,18832,5617],{"class":5447},[5437,18834,5879],{"class":5504},[5437,18836,5575],{"class":5447},[5437,18838,5572],{"class":5504},[5437,18840,5628],{"class":5447},[5437,18842,18843],{"class":5439,"line":5521},[5437,18844,5474],{"emptyLinePlaceholder":5473},[5437,18846,18847],{"class":5439,"line":5535},[5437,18848,18849],{"class":5562},"# ROC крива\n",[5437,18851,18852,18855,18857,18859,18861,18863,18865],{"class":5439,"line":5541},[5437,18853,18854],{"class":5447},"plt.subplot(",[5437,18856,5609],{"class":5504},[5437,18858,5575],{"class":5447},[5437,18860,5424],{"class":5504},[5437,18862,5575],{"class":5447},[5437,18864,5424],{"class":5504},[5437,18866,5585],{"class":5447},[5437,18868,18869,18872,18874,18876,18878,18880,18882,18884,18886,18888,18890,18892,18894,18897,18899,18902,18904,18907],{"class":5439,"line":5554},[5437,18870,18871],{"class":5447},"plt.plot(fpr, tpr, ",[5437,18873,5648],{"class":5491},[5437,18875,5651],{"class":5447},[5437,18877,5655],{"class":5654},[5437,18879,5575],{"class":5447},[5437,18881,5660],{"class":5491},[5437,18883,5651],{"class":5447},[5437,18885,5665],{"class":5504},[5437,18887,5575],{"class":5447},[5437,18889,5670],{"class":5491},[5437,18891,5651],{"class":5447},[5437,18893,6082],{"class":5480},[5437,18895,18896],{"class":5654},"'ROC-крива (AUC = ",[5437,18898,6095],{"class":5480},[5437,18900,18901],{"class":5447},"roc_auc",[5437,18903,6101],{"class":5480},[5437,18905,18906],{"class":5654},")'",[5437,18908,5585],{"class":5447},[5437,18910,18911,18914,18916,18918,18920,18923,18925,18927,18929,18931,18934,18936,18938,18940,18942,18944,18946,18948,18951],{"class":5439,"line":5559},[5437,18912,18913],{"class":5447},"plt.plot([",[5437,18915,5686],{"class":5504},[5437,18917,5575],{"class":5447},[5437,18919,5424],{"class":5504},[5437,18921,18922],{"class":5447},"], [",[5437,18924,5686],{"class":5504},[5437,18926,5575],{"class":5447},[5437,18928,5424],{"class":5504},[5437,18930,7042],{"class":5447},[5437,18932,18933],{"class":5654},"'k--'",[5437,18935,5575],{"class":5447},[5437,18937,5660],{"class":5491},[5437,18939,5651],{"class":5447},[5437,18941,5609],{"class":5504},[5437,18943,5575],{"class":5447},[5437,18945,5670],{"class":5491},[5437,18947,5651],{"class":5447},[5437,18949,18950],{"class":5654},"'Випадкове передбачення (AUC = 0.5)'",[5437,18952,5585],{"class":5447},[5437,18954,18955,18958,18960,18962,18964,18966,18968,18970,18972,18974,18976,18978,18981],{"class":5439,"line":5566},[5437,18956,18957],{"class":5447},"plt.fill_between(fpr, tpr, ",[5437,18959,5710],{"class":5491},[5437,18961,5651],{"class":5447},[5437,18963,6010],{"class":5504},[5437,18965,5575],{"class":5447},[5437,18967,5648],{"class":5491},[5437,18969,5651],{"class":5447},[5437,18971,5655],{"class":5654},[5437,18973,5575],{"class":5447},[5437,18975,5670],{"class":5491},[5437,18977,5651],{"class":5447},[5437,18979,18980],{"class":5654},"'Площа під кривою (AUC)'",[5437,18982,5585],{"class":5447},[5437,18984,18985],{"class":5439,"line":5588},[5437,18986,5474],{"emptyLinePlaceholder":5473},[5437,18988,18989],{"class":5439,"line":5593},[5437,18990,18991],{"class":5562},"# Позначення поточного порогу (0.5)\n",[5437,18993,18994,18997,18999],{"class":5439,"line":5599},[5437,18995,18996],{"class":5447},"threshold_05_idx = np.argmin(np.abs(thresholds - ",[5437,18998,15556],{"class":5504},[5437,19000,5628],{"class":5447},[5437,19002,19003,19006,19009,19011,19013,19015,19017],{"class":5439,"line":5631},[5437,19004,19005],{"class":5447},"plt.plot(fpr[threshold_05_idx], tpr[threshold_05_idx], ",[5437,19007,19008],{"class":5654},"'ro'",[5437,19010,5575],{"class":5447},[5437,19012,6069],{"class":5491},[5437,19014,5651],{"class":5447},[5437,19016,5879],{"class":5504},[5437,19018,7436],{"class":5447},[5437,19020,19021,19024,19026,19028,19031,19033,19036,19039,19042,19044,19047,19049,19051],{"class":5439,"line":5636},[5437,19022,19023],{"class":5491},"         label",[5437,19025,5651],{"class":5447},[5437,19027,6082],{"class":5480},[5437,19029,19030],{"class":5654},"'Поріг 0.5: TPR=",[5437,19032,6095],{"class":5480},[5437,19034,19035],{"class":5447},"tpr[threshold_05_idx]",[5437,19037,19038],{"class":5480},":.2f}",[5437,19040,19041],{"class":5654},", FPR=",[5437,19043,6095],{"class":5480},[5437,19045,19046],{"class":5447},"fpr[threshold_05_idx]",[5437,19048,19038],{"class":5480},[5437,19050,6104],{"class":5654},[5437,19052,5585],{"class":5447},[5437,19054,19055],{"class":5439,"line":5642},[5437,19056,5474],{"emptyLinePlaceholder":5473},[5437,19058,19059,19061,19064,19066,19068,19070,19072],{"class":5439,"line":5680},[5437,19060,8347],{"class":5447},[5437,19062,19063],{"class":5654},"'False Positive Rate (1 - Specificity)'",[5437,19065,5575],{"class":5447},[5437,19067,5812],{"class":5491},[5437,19069,5651],{"class":5447},[5437,19071,5817],{"class":5504},[5437,19073,5585],{"class":5447},[5437,19075,19076,19078,19081,19083,19085,19087,19089],{"class":5439,"line":5720},[5437,19077,8364],{"class":5447},[5437,19079,19080],{"class":5654},"'True Positive Rate (Sensitivity\u002FRecall)'",[5437,19082,5575],{"class":5447},[5437,19084,5812],{"class":5491},[5437,19086,5651],{"class":5447},[5437,19088,5817],{"class":5504},[5437,19090,5585],{"class":5447},[5437,19092,19093,19095,19098,19100,19102,19104,19106,19108,19110,19112,19114],{"class":5439,"line":5753},[5437,19094,8382],{"class":5447},[5437,19096,19097],{"class":5654},"'ROC-крива для діагностики серцевих захворювань'",[5437,19099,5575],{"class":5447},[5437,19101,5812],{"class":5491},[5437,19103,5651],{"class":5447},[5437,19105,5620],{"class":5504},[5437,19107,5575],{"class":5447},[5437,19109,5859],{"class":5491},[5437,19111,5651],{"class":5447},[5437,19113,5864],{"class":5654},[5437,19115,5585],{"class":5447},[5437,19117,19118,19120,19122,19124,19126,19128,19130,19132,19134],{"class":5439,"line":5787},[5437,19119,8408],{"class":5447},[5437,19121,5812],{"class":5491},[5437,19123,5651],{"class":5447},[5437,19125,5879],{"class":5504},[5437,19127,5575],{"class":5447},[5437,19129,6505],{"class":5491},[5437,19131,5651],{"class":5447},[5437,19133,17555],{"class":5654},[5437,19135,5585],{"class":5447},[5437,19137,19138,19140,19142,19144,19146],{"class":5439,"line":5801},[5437,19139,8034],{"class":5447},[5437,19141,5710],{"class":5491},[5437,19143,5651],{"class":5447},[5437,19145,5715],{"class":5504},[5437,19147,5585],{"class":5447},[5437,19149,19150],{"class":5439,"line":5822},[5437,19151,5474],{"emptyLinePlaceholder":5473},[5437,19153,19154],{"class":5439,"line":5840},[5437,19155,19156],{"class":5562},"# Sensitivity vs Specificity по різних порогах\n",[5437,19158,19159,19161,19163,19165,19167,19169,19171],{"class":5439,"line":5869},[5437,19160,18854],{"class":5447},[5437,19162,5609],{"class":5504},[5437,19164,5575],{"class":5447},[5437,19166,5424],{"class":5504},[5437,19168,5575],{"class":5447},[5437,19170,5609],{"class":5504},[5437,19172,5585],{"class":5447},[5437,19174,19175],{"class":5439,"line":5884},[5437,19176,19177],{"class":5447},"sensitivity = tpr\n",[5437,19179,19180,19183,19185],{"class":5439,"line":5889},[5437,19181,19182],{"class":5447},"specificity = ",[5437,19184,5424],{"class":5504},[5437,19186,19187],{"class":5447}," - fpr\n",[5437,19189,19190],{"class":5439,"line":5895},[5437,19191,5474],{"emptyLinePlaceholder":5473},[5437,19193,19194,19197,19199,19201,19203,19205,19207,19209,19212,19214,19216,19218,19221],{"class":5439,"line":5927},[5437,19195,19196],{"class":5447},"plt.plot(thresholds, sensitivity, ",[5437,19198,5648],{"class":5491},[5437,19200,5651],{"class":5447},[5437,19202,6868],{"class":5654},[5437,19204,5575],{"class":5447},[5437,19206,5660],{"class":5491},[5437,19208,5651],{"class":5447},[5437,19210,19211],{"class":5504},"2.5",[5437,19213,5575],{"class":5447},[5437,19215,5670],{"class":5491},[5437,19217,5651],{"class":5447},[5437,19219,19220],{"class":5654},"'Sensitivity (Recall хворих)'",[5437,19222,5585],{"class":5447},[5437,19224,19225,19228,19230,19232,19234,19236,19238,19240,19242,19244,19246,19248,19251],{"class":5439,"line":5961},[5437,19226,19227],{"class":5447},"plt.plot(thresholds, specificity, ",[5437,19229,5648],{"class":5491},[5437,19231,5651],{"class":5447},[5437,19233,5905],{"class":5654},[5437,19235,5575],{"class":5447},[5437,19237,5660],{"class":5491},[5437,19239,5651],{"class":5447},[5437,19241,19211],{"class":5504},[5437,19243,5575],{"class":5447},[5437,19245,5670],{"class":5491},[5437,19247,5651],{"class":5447},[5437,19249,19250],{"class":5654},"'Specificity (Recall здорових)'",[5437,19252,5585],{"class":5447},[5437,19254,19255,19257,19259,19261,19263,19265,19267,19269,19271,19273,19275,19277,19279,19281,19283,19285,19287,19289,19291,19293,19295,19297,19299,19301,19304],{"class":5439,"line":5995},[5437,19256,8001],{"class":5447},[5437,19258,5331],{"class":5491},[5437,19260,5651],{"class":5447},[5437,19262,15556],{"class":5504},[5437,19264,5575],{"class":5447},[5437,19266,5648],{"class":5491},[5437,19268,5651],{"class":5447},[5437,19270,5695],{"class":5654},[5437,19272,5575],{"class":5447},[5437,19274,5700],{"class":5491},[5437,19276,5651],{"class":5447},[5437,19278,5705],{"class":5654},[5437,19280,5575],{"class":5447},[5437,19282,5660],{"class":5491},[5437,19284,5651],{"class":5447},[5437,19286,5609],{"class":5504},[5437,19288,5575],{"class":5447},[5437,19290,5710],{"class":5491},[5437,19292,5651],{"class":5447},[5437,19294,7927],{"class":5504},[5437,19296,5575],{"class":5447},[5437,19298,5670],{"class":5491},[5437,19300,5651],{"class":5447},[5437,19302,19303],{"class":5654},"'Стандартний поріг 0.5'",[5437,19305,5585],{"class":5447},[5437,19307,19308],{"class":5439,"line":6023},[5437,19309,5474],{"emptyLinePlaceholder":5473},[5437,19311,19312],{"class":5439,"line":6028},[5437,19313,19314],{"class":5562},"# Оптимальний поріг (Youden's J statistic: максимізує sensitivity + specificity)\n",[5437,19316,19317,19320],{"class":5439,"line":6034},[5437,19318,19319],{"class":5447},"youden_j = sensitivity + specificity - ",[5437,19321,16109],{"class":5504},[5437,19323,19324],{"class":5439,"line":6044},[5437,19325,19326],{"class":5447},"optimal_idx = np.argmax(youden_j)\n",[5437,19328,19329],{"class":5439,"line":6109},[5437,19330,19331],{"class":5447},"optimal_threshold = thresholds[optimal_idx]\n",[5437,19333,19334,19336,19338,19341,19343,19345,19348,19350,19352,19354,19356,19358,19360,19362,19364],{"class":5439,"line":6154},[5437,19335,8001],{"class":5447},[5437,19337,5331],{"class":5491},[5437,19339,19340],{"class":5447},"=optimal_threshold, ",[5437,19342,5648],{"class":5491},[5437,19344,5651],{"class":5447},[5437,19346,19347],{"class":5654},"'#8b5cf6'",[5437,19349,5575],{"class":5447},[5437,19351,5700],{"class":5491},[5437,19353,5651],{"class":5447},[5437,19355,5705],{"class":5654},[5437,19357,5575],{"class":5447},[5437,19359,5660],{"class":5491},[5437,19361,5651],{"class":5447},[5437,19363,5609],{"class":5504},[5437,19365,7436],{"class":5447},[5437,19367,19368,19371,19373,19375,19378,19380,19383,19385,19387],{"class":5439,"line":6196},[5437,19369,19370],{"class":5491},"            label",[5437,19372,5651],{"class":5447},[5437,19374,6082],{"class":5480},[5437,19376,19377],{"class":5654},"'Оптимальний поріг: ",[5437,19379,6095],{"class":5480},[5437,19381,19382],{"class":5447},"optimal_threshold",[5437,19384,6101],{"class":5480},[5437,19386,6104],{"class":5654},[5437,19388,5585],{"class":5447},[5437,19390,19391],{"class":5439,"line":6224},[5437,19392,5474],{"emptyLinePlaceholder":5473},[5437,19394,19395,19397,19400,19402,19404,19406,19408],{"class":5439,"line":6229},[5437,19396,8347],{"class":5447},[5437,19398,19399],{"class":5654},"'Поріг прийняття рішення (Threshold)'",[5437,19401,5575],{"class":5447},[5437,19403,5812],{"class":5491},[5437,19405,5651],{"class":5447},[5437,19407,5817],{"class":5504},[5437,19409,5585],{"class":5447},[5437,19411,19412,19414,19416,19418,19420,19422,19424],{"class":5439,"line":6235},[5437,19413,8364],{"class":5447},[5437,19415,17501],{"class":5654},[5437,19417,5575],{"class":5447},[5437,19419,5812],{"class":5491},[5437,19421,5651],{"class":5447},[5437,19423,5817],{"class":5504},[5437,19425,5585],{"class":5447},[5437,19427,19428,19430,19433,19435,19437,19439,19441,19443,19445,19447,19449],{"class":5439,"line":6278},[5437,19429,8382],{"class":5447},[5437,19431,19432],{"class":5654},"'Sensitivity vs Specificity: вибір оптимального порогу'",[5437,19434,5575],{"class":5447},[5437,19436,5812],{"class":5491},[5437,19438,5651],{"class":5447},[5437,19440,5620],{"class":5504},[5437,19442,5575],{"class":5447},[5437,19444,5859],{"class":5491},[5437,19446,5651],{"class":5447},[5437,19448,5864],{"class":5654},[5437,19450,5585],{"class":5447},[5437,19452,19453,19455,19457,19459,19461,19463,19465,19467,19470],{"class":5439,"line":6308},[5437,19454,8408],{"class":5447},[5437,19456,5812],{"class":5491},[5437,19458,5651],{"class":5447},[5437,19460,6337],{"class":5504},[5437,19462,5575],{"class":5447},[5437,19464,6505],{"class":5491},[5437,19466,5651],{"class":5447},[5437,19468,19469],{"class":5654},"'best'",[5437,19471,5585],{"class":5447},[5437,19473,19474,19476,19478,19480,19482],{"class":5439,"line":6362},[5437,19475,8034],{"class":5447},[5437,19477,5710],{"class":5491},[5437,19479,5651],{"class":5447},[5437,19481,5715],{"class":5504},[5437,19483,5585],{"class":5447},[5437,19485,19486,19489,19491,19493,19495],{"class":5439,"line":6408},[5437,19487,19488],{"class":5447},"plt.xlim(",[5437,19490,5686],{"class":5504},[5437,19492,5575],{"class":5447},[5437,19494,5424],{"class":5504},[5437,19496,5585],{"class":5447},[5437,19498,19499,19502,19504,19506,19508],{"class":5439,"line":6413},[5437,19500,19501],{"class":5447},"plt.ylim(",[5437,19503,5686],{"class":5504},[5437,19505,5575],{"class":5447},[5437,19507,10828],{"class":5504},[5437,19509,5585],{"class":5447},[5437,19511,19512],{"class":5439,"line":6427},[5437,19513,5474],{"emptyLinePlaceholder":5473},[5437,19515,19516],{"class":5439,"line":6445},[5437,19517,6523],{"class":5447},[5437,19519,19520],{"class":5439,"line":6464},[5437,19521,6529],{"class":5447},[5437,19523,19524],{"class":5439,"line":6491},[5437,19525,5474],{"emptyLinePlaceholder":5473},[5437,19527,19528,19530,19532,19534,19536,19538,19541],{"class":5439,"line":6515},[5437,19529,9488],{"class":5484},[5437,19531,5488],{"class":5447},[5437,19533,6082],{"class":5480},[5437,19535,9537],{"class":5654},[5437,19537,6126],{"class":6088},[5437,19539,19540],{"class":5654},"📊 Аналіз порогів:\"",[5437,19542,5585],{"class":5447},[5437,19544,19545,19547,19549,19551,19554,19556,19558,19560,19563,19565,19568,19570,19572],{"class":5439,"line":6520},[5437,19546,9488],{"class":5484},[5437,19548,5488],{"class":5447},[5437,19550,6082],{"class":5480},[5437,19552,19553],{"class":5654},"\"  Стандартний поріг (0.5): Sensitivity=",[5437,19555,6095],{"class":5480},[5437,19557,19035],{"class":5447},[5437,19559,6101],{"class":5480},[5437,19561,19562],{"class":5654},", Specificity=",[5437,19564,6095],{"class":5480},[5437,19566,19567],{"class":5447},"specificity[threshold_05_idx]",[5437,19569,6101],{"class":5480},[5437,19571,9537],{"class":5654},[5437,19573,5585],{"class":5447},[5437,19575,19576,19578,19580,19582,19585,19587,19589,19591,19594,19596,19599,19601,19603,19605,19608,19610,19612],{"class":5439,"line":6526},[5437,19577,9488],{"class":5484},[5437,19579,5488],{"class":5447},[5437,19581,6082],{"class":5480},[5437,19583,19584],{"class":5654},"\"  Оптимальний поріг (",[5437,19586,6095],{"class":5480},[5437,19588,19382],{"class":5447},[5437,19590,6101],{"class":5480},[5437,19592,19593],{"class":5654},"): Sensitivity=",[5437,19595,6095],{"class":5480},[5437,19597,19598],{"class":5447},"tpr[optimal_idx]",[5437,19600,6101],{"class":5480},[5437,19602,19562],{"class":5654},[5437,19604,6095],{"class":5480},[5437,19606,19607],{"class":5447},"specificity[optimal_idx]",[5437,19609,6101],{"class":5480},[5437,19611,9537],{"class":5654},[5437,19613,5585],{"class":5447},[5437,19615,19616,19618,19620,19622,19624,19626,19629,19631,19633,19635,19638],{"class":5439,"line":12258},[5437,19617,9488],{"class":5484},[5437,19619,5488],{"class":5447},[5437,19621,6082],{"class":5480},[5437,19623,9537],{"class":5654},[5437,19625,6126],{"class":6088},[5437,19627,19628],{"class":5654},"💡 Рекомендація: Для медичних застосувань розгляньте поріг ",[5437,19630,6095],{"class":5480},[5437,19632,19382],{"class":5447},[5437,19634,6101],{"class":5480},[5437,19636,19637],{"class":5654},",\"",[5437,19639,5585],{"class":5447},[5437,19641,19642,19644,19646,19648,19651],{"class":5439,"line":12264},[5437,19643,9488],{"class":5484},[5437,19645,5488],{"class":5447},[5437,19647,6082],{"class":5480},[5437,19649,19650],{"class":5654},"\"   щоб збалансувати виявлення хворих та мінімізацію хибних тривог.\"",[5437,19652,5585],{"class":5447},[6531,19654,19655,19662,19726],{"v-slot:output":5432},[5191,19656,19657],{},[6534,19658],{"alt":19659,"className":19660,"src":19661},"ROC-крива та аналіз порогу прийняття рішення для нейронної мережі діагностики серцевих захворювань",[6538],"\u002Fimages\u002Fai-python\u002Factivation-functions-heart-disease\u002Fheart-disease-prediction\u002F07.png",[8489,19663,19664,19680],{},[8492,19665,19666],{},[8495,19667,19668,19671,19674,19677],{},[8498,19669,19670],{"align":8510},"Поріг відсікання ($\\tau$)",[8498,19672,19673],{"align":8510},"Чутливість (Sensitivity \u002F Recall)",[8498,19675,19676],{"align":8510},"Специфічність (Specificity)",[8498,19678,19679],{"align":8500},"Клінічна характеристика",[8522,19681,19682,19700],{},[8495,19683,19684,19689,19693,19697],{},[8527,19685,19686],{"align":8510},[5195,19687,19688],{},"Стандартний ($\\tau = 0.500$)",[8527,19690,19691,18023],{"align":8510},[5434,19692,16623],{},[8527,19694,19695,17993],{"align":8510},[5434,19696,17992],{},[8527,19698,19699],{"align":8500},"Базовий симетричний поріг бінарної класифікації",[8495,19701,19702,19707,19715,19723],{},[8527,19703,19704],{"align":8510},[5195,19705,19706],{},"Оптимальний ($\\tau = 0.441$)",[8527,19708,19709,19714],{"align":8510},[5195,19710,19711],{},[5434,19712,19713],{},"0.952"," ($95.2%$)",[8527,19716,19717,19722],{"align":8510},[5195,19718,19719],{},[5434,19720,19721],{},"0.875"," ($87.5%$)",[8527,19724,19725],{"align":8500},"🏆 Найкращий баланс за індексом Юдена ($J = \\text{Sens} + \\text{Spec} - 1$)",[19727,19728,19729],"blockquote",{},[5191,19730,19731,19732,19735,19736,19741,19742,19745],{},"💡 ",[5195,19733,19734],{},"Клінічна рекомендація:","\nДля діагностичних медичних систем доцільно встановити поріг прийняття рішення на рівні ",[5195,19737,19738],{},[5434,19739,19740],{},"0.441",", підвищуючи виявлення захворювання до ",[5195,19743,19744],{},"95.2%"," та мінімізуючи небезпечні пропуски хворих (False Negative).",[5345,19747,19748,19753,19759,19764,19794,19800,19814,19819],{},[5191,19749,19750],{},[5195,19751,19752],{},"Що таке AUC-ROC та чому вона важлива:",[5191,19754,19755,19758],{},[5195,19756,19757],{},"AUC (Area Under the ROC Curve)"," — це ймовірність того, що модель присвоїть вищий score випадково обраному хворому пацієнту, ніж випадково обраному здоровому.",[5191,19760,19761],{},[5195,19762,19763],{},"Інтерпретація AUC:",[5244,19765,19766,19771,19777,19783,19789],{},[5220,19767,19768,19770],{},[5195,19769,15556],{}," — випадкове передбачення (модель не працює)",[5220,19772,19773,19776],{},[5195,19774,19775],{},"0.7–0.8"," — прийнятна якість",[5220,19778,19779,19782],{},[5195,19780,19781],{},"0.8–0.9"," — хороша якість",[5220,19784,19785,19788],{},[5195,19786,19787],{},"0.9–1.0"," — відмінна якість",[5220,19790,19791,19793],{},[5195,19792,8573],{}," — ідеальна модель",[5191,19795,19796,19799],{},[5195,19797,19798],{},"Наша AUC = 0.921"," — це означає, що у 92.1% випадків модель правильно розрізняє здорового від хворого. Для порівняння:",[5244,19801,19802,19805,19808],{},[5220,19803,19804],{},"Логістична регресія на цьому датасеті: AUC ~0.85",[5220,19806,19807],{},"Random Forest: AUC ~0.88",[5220,19809,19810,19813],{},[5195,19811,19812],{},"Наша нейронна мережа: AUC 0.921"," ✅ Краща!",[5191,19815,19816],{},[5195,19817,19818],{},"Переваги AUC над Accuracy:",[5244,19820,19821,19824,19827],{},[5220,19822,19823],{},"Не залежить від порогу прийняття рішення (0.5)",[5220,19825,19826],{},"Враховує баланс класів",[5220,19828,19829],{},"Показує якість ранжування, а не лише бінарні передбачення",[5297,19831],{},[5186,19833,19835],{"id":19834},"практичне-застосування-інференс-для-нового-пацієнта","Практичне застосування — інференс для нового пацієнта",[5191,19837,19838],{},"Подивимося, як модель працює на конкретному прикладі пацієнта.",[5417,19840,19842,20629],{"kernel":5419,"title":19841},"inference_example.ipynb",[5422,19843,19844,20591],{"execution-count":11571},[5427,19845,19847],{"className":5429,"code":19846,"language":5431,"meta":5432,"style":5432},"def predict_patient(model, scaler, patient_data, device):\n    \"\"\"\n    Передбачення для одного пацієнта.\n    \n    Args:\n        model: навчена модель PyTorch\n        scaler: fitted StandardScaler\n        patient_data: масив із 13 клінічними ознаками\n        device: CPU або GPU\n    \n    Returns:\n        Ймовірність хвороби (0–1)\n    \"\"\"\n    model.eval()\n    with torch.no_grad():\n        # Масштабування\n        patient_scaled = scaler.transform([patient_data])\n        patient_tensor = torch.FloatTensor(patient_scaled).to(device)\n        \n        # Передбачення\n        prob = model(patient_tensor).item()\n    \n    return prob\n\n\n# Приклад 1: Пацієнт із високим ризиком\nhigh_risk_patient = [\n    65,   # age: 65 років (старший вік)\n    1,    # sex: чоловік\n    1,    # cp: типова стенокардія (тип 1 — найнебезпечніший)\n    160,  # trestbps: високий тиск 160 мм рт.ст.\n    280,  # chol: підвищений холестерин 280 мг\u002Fдл\n    1,    # fbs: підвищений цукор крові\n    2,    # restecg: гіпертрофія лівого шлуночка\n    100,  # thalach: низька максимальна ЧСС (норма ~155)\n    1,    # exang: стенокардія при навантаженні\n    3.5,  # oldpeak: сильна депресія ST (3.5 мм)\n    2,    # slope: спуск (downsloping) — висока ішемія\n    2,    # ca: 2 уражені судини\n    7     # thal: зворотний дефект\n]\n\n# Приклад 2: Пацієнт із низьким ризиком\nlow_risk_patient = [\n    35,   # age: 35 років (молодий)\n    0,    # sex: жінка\n    4,    # cp: безсимптомний\n    110,  # trestbps: нормальний тиск\n    190,  # chol: нормальний холестерин\n    0,    # fbs: нормальний цукор\n    0,    # restecg: норма\n    180,  # thalach: висока ЧСС (відмінна форма)\n    0,    # exang: немає стенокардії\n    0.0,  # oldpeak: немає депресії ST\n    1,    # slope: підйом (норма)\n    0,    # ca: 0 уражених судин\n    3     # thal: норма\n]\n\n# Передбачення\nprob_high = predict_patient(model, scaler, high_risk_patient, device)\nprob_low = predict_patient(model, scaler, low_risk_patient, device)\n\nprint(\"=\" * 70)\nprint(\"ІНФЕРЕНС ДЛЯ НОВИХ ПАЦІЄНТІВ\")\nprint(\"=\" * 70)\n\nprint(\"\\n🔴 ПАЦІЄНТ 1: Високий ризик\")\nprint(f\"   Характеристики: 65 років, чоловік, типова стенокардія, тиск 160,\")\nprint(f\"                   холестерин 280, депресія ST 3.5 мм, 2 уражені судини\")\nprint(f\"   Ймовірність хвороби: {prob_high:.1%} {'→ ХВОРИЙ ⚠️' if prob_high >= 0.5 else '→ Здоровий'}\")\n\nprint(\"\\n🟢 ПАЦІЄНТ 2: Низький ризик\")\nprint(f\"   Характеристики: 35 років, жінка, безсимптомна, тиск 110,\")\nprint(f\"                   холестерин 190, макс ЧСС 180, всі показники в нормі\")\nprint(f\"   Ймовірність хвороби: {prob_low:.1%} {'→ Хворий' if prob_low >= 0.5 else '→ ЗДОРОВА ✅'}\")\n\nprint(\"\\n\" + \"=\" * 70)\nprint(\"КЛІНІЧНА РЕКОМЕНДАЦІЯ\")\nprint(\"=\" * 70)\nprint(\"Пацієнт 1: Термінове направлення на коронарографію.\")\nprint(\"           Високий ризик інфаркту міокарда.\")\nprint(\"Пацієнт 2: Рутинний огляд через рік. Ризик мінімальний.\")\n",[5434,19848,19849,19876,19880,19885,19889,19894,19899,19904,19909,19914,19918,19923,19928,19932,19937,19943,19948,19953,19958,19962,19967,19972,19976,19983,19987,19991,19996,20001,20012,20023,20032,20043,20053,20062,20072,20082,20091,20101,20110,20119,20127,20131,20135,20140,20145,20155,20165,20175,20185,20195,20204,20213,20223,20232,20242,20251,20260,20268,20272,20276,20281,20286,20291,20295,20309,20320,20334,20338,20353,20366,20379,20422,20426,20441,20454,20467,20507,20511,20533,20544,20558,20569,20580],{"__ignoreMap":5432},[5437,19850,19851,19853,19856,19858,19860,19862,19865,19867,19870,19872,19874],{"class":5439,"line":5440},[5437,19852,5481],{"class":5480},[5437,19854,19855],{"class":5484}," predict_patient",[5437,19857,5488],{"class":5447},[5437,19859,15415],{"class":5491},[5437,19861,5575],{"class":5447},[5437,19863,19864],{"class":5491},"scaler",[5437,19866,5575],{"class":5447},[5437,19868,19869],{"class":5491},"patient_data",[5437,19871,5575],{"class":5447},[5437,19873,12903],{"class":5491},[5437,19875,5495],{"class":5447},[5437,19877,19878],{"class":5439,"line":5457},[5437,19879,14434],{"class":5654},[5437,19881,19882],{"class":5439,"line":5470},[5437,19883,19884],{"class":5654},"    Передбачення для одного пацієнта.\n",[5437,19886,19887],{"class":5439,"line":5477},[5437,19888,14444],{"class":5654},[5437,19890,19891],{"class":5439,"line":5498},[5437,19892,19893],{"class":5654},"    Args:\n",[5437,19895,19896],{"class":5439,"line":5516},[5437,19897,19898],{"class":5654},"        model: навчена модель PyTorch\n",[5437,19900,19901],{"class":5439,"line":5521},[5437,19902,19903],{"class":5654},"        scaler: fitted StandardScaler\n",[5437,19905,19906],{"class":5439,"line":5535},[5437,19907,19908],{"class":5654},"        patient_data: масив із 13 клінічними ознаками\n",[5437,19910,19911],{"class":5439,"line":5541},[5437,19912,19913],{"class":5654},"        device: CPU або GPU\n",[5437,19915,19916],{"class":5439,"line":5554},[5437,19917,14444],{"class":5654},[5437,19919,19920],{"class":5439,"line":5559},[5437,19921,19922],{"class":5654},"    Returns:\n",[5437,19924,19925],{"class":5439,"line":5566},[5437,19926,19927],{"class":5654},"        Ймовірність хвороби (0–1)\n",[5437,19929,19930],{"class":5439,"line":5588},[5437,19931,14434],{"class":5654},[5437,19933,19934],{"class":5439,"line":5593},[5437,19935,19936],{"class":5447},"    model.eval()\n",[5437,19938,19939,19941],{"class":5439,"line":5599},[5437,19940,15669],{"class":5443},[5437,19942,17714],{"class":5447},[5437,19944,19945],{"class":5439,"line":5631},[5437,19946,19947],{"class":5562},"        # Масштабування\n",[5437,19949,19950],{"class":5439,"line":5636},[5437,19951,19952],{"class":5447},"        patient_scaled = scaler.transform([patient_data])\n",[5437,19954,19955],{"class":5439,"line":5642},[5437,19956,19957],{"class":5447},"        patient_tensor = torch.FloatTensor(patient_scaled).to(device)\n",[5437,19959,19960],{"class":5439,"line":5680},[5437,19961,14563],{"class":5447},[5437,19963,19964],{"class":5439,"line":5720},[5437,19965,19966],{"class":5562},"        # Передбачення\n",[5437,19968,19969],{"class":5439,"line":5753},[5437,19970,19971],{"class":5447},"        prob = model(patient_tensor).item()\n",[5437,19973,19974],{"class":5439,"line":5787},[5437,19975,14444],{"class":5447},[5437,19977,19978,19980],{"class":5439,"line":5801},[5437,19979,5501],{"class":5443},[5437,19981,19982],{"class":5447}," prob\n",[5437,19984,19985],{"class":5439,"line":5822},[5437,19986,5474],{"emptyLinePlaceholder":5473},[5437,19988,19989],{"class":5439,"line":5840},[5437,19990,5474],{"emptyLinePlaceholder":5473},[5437,19992,19993],{"class":5439,"line":5869},[5437,19994,19995],{"class":5562},"# Приклад 1: Пацієнт із високим ризиком\n",[5437,19997,19998],{"class":5439,"line":5884},[5437,19999,20000],{"class":5447},"high_risk_patient = [\n",[5437,20002,20003,20006,20009],{"class":5439,"line":5889},[5437,20004,20005],{"class":5504},"    65",[5437,20007,20008],{"class":5447},",   ",[5437,20010,20011],{"class":5562},"# age: 65 років (старший вік)\n",[5437,20013,20014,20017,20020],{"class":5439,"line":5895},[5437,20015,20016],{"class":5504},"    1",[5437,20018,20019],{"class":5447},",    ",[5437,20021,20022],{"class":5562},"# sex: чоловік\n",[5437,20024,20025,20027,20029],{"class":5439,"line":5927},[5437,20026,20016],{"class":5504},[5437,20028,20019],{"class":5447},[5437,20030,20031],{"class":5562},"# cp: типова стенокардія (тип 1 — найнебезпечніший)\n",[5437,20033,20034,20037,20040],{"class":5439,"line":5961},[5437,20035,20036],{"class":5504},"    160",[5437,20038,20039],{"class":5447},",  ",[5437,20041,20042],{"class":5562},"# trestbps: високий тиск 160 мм рт.ст.\n",[5437,20044,20045,20048,20050],{"class":5439,"line":5995},[5437,20046,20047],{"class":5504},"    280",[5437,20049,20039],{"class":5447},[5437,20051,20052],{"class":5562},"# chol: підвищений холестерин 280 мг\u002Fдл\n",[5437,20054,20055,20057,20059],{"class":5439,"line":6023},[5437,20056,20016],{"class":5504},[5437,20058,20019],{"class":5447},[5437,20060,20061],{"class":5562},"# fbs: підвищений цукор крові\n",[5437,20063,20064,20067,20069],{"class":5439,"line":6028},[5437,20065,20066],{"class":5504},"    2",[5437,20068,20019],{"class":5447},[5437,20070,20071],{"class":5562},"# restecg: гіпертрофія лівого шлуночка\n",[5437,20073,20074,20077,20079],{"class":5439,"line":6034},[5437,20075,20076],{"class":5504},"    100",[5437,20078,20039],{"class":5447},[5437,20080,20081],{"class":5562},"# thalach: низька максимальна ЧСС (норма ~155)\n",[5437,20083,20084,20086,20088],{"class":5439,"line":6044},[5437,20085,20016],{"class":5504},[5437,20087,20019],{"class":5447},[5437,20089,20090],{"class":5562},"# exang: стенокардія при навантаженні\n",[5437,20092,20093,20096,20098],{"class":5439,"line":6109},[5437,20094,20095],{"class":5504},"    3.5",[5437,20097,20039],{"class":5447},[5437,20099,20100],{"class":5562},"# oldpeak: сильна депресія ST (3.5 мм)\n",[5437,20102,20103,20105,20107],{"class":5439,"line":6154},[5437,20104,20066],{"class":5504},[5437,20106,20019],{"class":5447},[5437,20108,20109],{"class":5562},"# slope: спуск (downsloping) — висока ішемія\n",[5437,20111,20112,20114,20116],{"class":5439,"line":6196},[5437,20113,20066],{"class":5504},[5437,20115,20019],{"class":5447},[5437,20117,20118],{"class":5562},"# ca: 2 уражені судини\n",[5437,20120,20121,20124],{"class":5439,"line":6224},[5437,20122,20123],{"class":5504},"    7",[5437,20125,20126],{"class":5562},"     # thal: зворотний дефект\n",[5437,20128,20129],{"class":5439,"line":6229},[5437,20130,9441],{"class":5447},[5437,20132,20133],{"class":5439,"line":6235},[5437,20134,5474],{"emptyLinePlaceholder":5473},[5437,20136,20137],{"class":5439,"line":6278},[5437,20138,20139],{"class":5562},"# Приклад 2: Пацієнт із низьким ризиком\n",[5437,20141,20142],{"class":5439,"line":6308},[5437,20143,20144],{"class":5447},"low_risk_patient = [\n",[5437,20146,20147,20150,20152],{"class":5439,"line":6362},[5437,20148,20149],{"class":5504},"    35",[5437,20151,20008],{"class":5447},[5437,20153,20154],{"class":5562},"# age: 35 років (молодий)\n",[5437,20156,20157,20160,20162],{"class":5439,"line":6408},[5437,20158,20159],{"class":5504},"    0",[5437,20161,20019],{"class":5447},[5437,20163,20164],{"class":5562},"# sex: жінка\n",[5437,20166,20167,20170,20172],{"class":5439,"line":6413},[5437,20168,20169],{"class":5504},"    4",[5437,20171,20019],{"class":5447},[5437,20173,20174],{"class":5562},"# cp: безсимптомний\n",[5437,20176,20177,20180,20182],{"class":5439,"line":6427},[5437,20178,20179],{"class":5504},"    110",[5437,20181,20039],{"class":5447},[5437,20183,20184],{"class":5562},"# trestbps: нормальний тиск\n",[5437,20186,20187,20190,20192],{"class":5439,"line":6445},[5437,20188,20189],{"class":5504},"    190",[5437,20191,20039],{"class":5447},[5437,20193,20194],{"class":5562},"# chol: нормальний холестерин\n",[5437,20196,20197,20199,20201],{"class":5439,"line":6464},[5437,20198,20159],{"class":5504},[5437,20200,20019],{"class":5447},[5437,20202,20203],{"class":5562},"# fbs: нормальний цукор\n",[5437,20205,20206,20208,20210],{"class":5439,"line":6491},[5437,20207,20159],{"class":5504},[5437,20209,20019],{"class":5447},[5437,20211,20212],{"class":5562},"# restecg: норма\n",[5437,20214,20215,20218,20220],{"class":5439,"line":6515},[5437,20216,20217],{"class":5504},"    180",[5437,20219,20039],{"class":5447},[5437,20221,20222],{"class":5562},"# thalach: висока ЧСС (відмінна форма)\n",[5437,20224,20225,20227,20229],{"class":5439,"line":6520},[5437,20226,20159],{"class":5504},[5437,20228,20019],{"class":5447},[5437,20230,20231],{"class":5562},"# exang: немає стенокардії\n",[5437,20233,20234,20237,20239],{"class":5439,"line":6526},[5437,20235,20236],{"class":5504},"    0.0",[5437,20238,20039],{"class":5447},[5437,20240,20241],{"class":5562},"# oldpeak: немає депресії ST\n",[5437,20243,20244,20246,20248],{"class":5439,"line":12258},[5437,20245,20016],{"class":5504},[5437,20247,20019],{"class":5447},[5437,20249,20250],{"class":5562},"# slope: підйом (норма)\n",[5437,20252,20253,20255,20257],{"class":5439,"line":12264},[5437,20254,20159],{"class":5504},[5437,20256,20019],{"class":5447},[5437,20258,20259],{"class":5562},"# ca: 0 уражених судин\n",[5437,20261,20262,20265],{"class":5439,"line":12270},[5437,20263,20264],{"class":5504},"    3",[5437,20266,20267],{"class":5562},"     # thal: норма\n",[5437,20269,20270],{"class":5439,"line":12276},[5437,20271,9441],{"class":5447},[5437,20273,20274],{"class":5439,"line":12282},[5437,20275,5474],{"emptyLinePlaceholder":5473},[5437,20277,20278],{"class":5439,"line":12287},[5437,20279,20280],{"class":5562},"# Передбачення\n",[5437,20282,20283],{"class":5439,"line":12293},[5437,20284,20285],{"class":5447},"prob_high = predict_patient(model, scaler, high_risk_patient, device)\n",[5437,20287,20288],{"class":5439,"line":12299},[5437,20289,20290],{"class":5447},"prob_low = predict_patient(model, scaler, low_risk_patient, device)\n",[5437,20292,20293],{"class":5439,"line":12305},[5437,20294,5474],{"emptyLinePlaceholder":5473},[5437,20296,20297,20299,20301,20303,20305,20307],{"class":5439,"line":12311},[5437,20298,9488],{"class":5484},[5437,20300,5488],{"class":5447},[5437,20302,9493],{"class":5654},[5437,20304,9496],{"class":5447},[5437,20306,9499],{"class":5504},[5437,20308,5585],{"class":5447},[5437,20310,20311,20313,20315,20318],{"class":5439,"line":12317},[5437,20312,9488],{"class":5484},[5437,20314,5488],{"class":5447},[5437,20316,20317],{"class":5654},"\"ІНФЕРЕНС ДЛЯ НОВИХ ПАЦІЄНТІВ\"",[5437,20319,5585],{"class":5447},[5437,20321,20322,20324,20326,20328,20330,20332],{"class":5439,"line":12322},[5437,20323,9488],{"class":5484},[5437,20325,5488],{"class":5447},[5437,20327,9493],{"class":5654},[5437,20329,9496],{"class":5447},[5437,20331,9499],{"class":5504},[5437,20333,5585],{"class":5447},[5437,20335,20336],{"class":5439,"line":12327},[5437,20337,5474],{"emptyLinePlaceholder":5473},[5437,20339,20340,20342,20344,20346,20348,20351],{"class":5439,"line":12333},[5437,20341,9488],{"class":5484},[5437,20343,5488],{"class":5447},[5437,20345,9537],{"class":5654},[5437,20347,6126],{"class":6088},[5437,20349,20350],{"class":5654},"🔴 ПАЦІЄНТ 1: Високий ризик\"",[5437,20352,5585],{"class":5447},[5437,20354,20355,20357,20359,20361,20364],{"class":5439,"line":12338},[5437,20356,9488],{"class":5484},[5437,20358,5488],{"class":5447},[5437,20360,6082],{"class":5480},[5437,20362,20363],{"class":5654},"\"   Характеристики: 65 років, чоловік, типова стенокардія, тиск 160,\"",[5437,20365,5585],{"class":5447},[5437,20367,20368,20370,20372,20374,20377],{"class":5439,"line":12344},[5437,20369,9488],{"class":5484},[5437,20371,5488],{"class":5447},[5437,20373,6082],{"class":5480},[5437,20375,20376],{"class":5654},"\"                   холестерин 280, депресія ST 3.5 мм, 2 уражені судини\"",[5437,20378,5585],{"class":5447},[5437,20380,20381,20383,20385,20387,20390,20392,20395,20398,20400,20403,20405,20408,20410,20413,20416,20418,20420],{"class":5439,"line":12350},[5437,20382,9488],{"class":5484},[5437,20384,5488],{"class":5447},[5437,20386,6082],{"class":5480},[5437,20388,20389],{"class":5654},"\"   Ймовірність хвороби: ",[5437,20391,6095],{"class":5480},[5437,20393,20394],{"class":5447},"prob_high",[5437,20396,20397],{"class":5480},":.1%}",[5437,20399,16261],{"class":5480},[5437,20401,20402],{"class":5654},"'→ ХВОРИЙ ⚠️'",[5437,20404,12877],{"class":5443},[5437,20406,20407],{"class":5447}," prob_high >= ",[5437,20409,15556],{"class":5504},[5437,20411,20412],{"class":5443}," else",[5437,20414,20415],{"class":5654}," '→ Здоровий'",[5437,20417,9555],{"class":5480},[5437,20419,9537],{"class":5654},[5437,20421,5585],{"class":5447},[5437,20423,20424],{"class":5439,"line":12356},[5437,20425,5474],{"emptyLinePlaceholder":5473},[5437,20427,20428,20430,20432,20434,20436,20439],{"class":5439,"line":12361},[5437,20429,9488],{"class":5484},[5437,20431,5488],{"class":5447},[5437,20433,9537],{"class":5654},[5437,20435,6126],{"class":6088},[5437,20437,20438],{"class":5654},"🟢 ПАЦІЄНТ 2: Низький ризик\"",[5437,20440,5585],{"class":5447},[5437,20442,20443,20445,20447,20449,20452],{"class":5439,"line":12366},[5437,20444,9488],{"class":5484},[5437,20446,5488],{"class":5447},[5437,20448,6082],{"class":5480},[5437,20450,20451],{"class":5654},"\"   Характеристики: 35 років, жінка, безсимптомна, тиск 110,\"",[5437,20453,5585],{"class":5447},[5437,20455,20456,20458,20460,20462,20465],{"class":5439,"line":12372},[5437,20457,9488],{"class":5484},[5437,20459,5488],{"class":5447},[5437,20461,6082],{"class":5480},[5437,20463,20464],{"class":5654},"\"                   холестерин 190, макс ЧСС 180, всі показники в нормі\"",[5437,20466,5585],{"class":5447},[5437,20468,20469,20471,20473,20475,20477,20479,20482,20484,20486,20489,20491,20494,20496,20498,20501,20503,20505],{"class":5439,"line":12378},[5437,20470,9488],{"class":5484},[5437,20472,5488],{"class":5447},[5437,20474,6082],{"class":5480},[5437,20476,20389],{"class":5654},[5437,20478,6095],{"class":5480},[5437,20480,20481],{"class":5447},"prob_low",[5437,20483,20397],{"class":5480},[5437,20485,16261],{"class":5480},[5437,20487,20488],{"class":5654},"'→ Хворий'",[5437,20490,12877],{"class":5443},[5437,20492,20493],{"class":5447}," prob_low >= ",[5437,20495,15556],{"class":5504},[5437,20497,20412],{"class":5443},[5437,20499,20500],{"class":5654}," '→ ЗДОРОВА ✅'",[5437,20502,9555],{"class":5480},[5437,20504,9537],{"class":5654},[5437,20506,5585],{"class":5447},[5437,20508,20509],{"class":5439,"line":12384},[5437,20510,5474],{"emptyLinePlaceholder":5473},[5437,20512,20513,20515,20517,20519,20521,20523,20525,20527,20529,20531],{"class":5439,"line":12390},[5437,20514,9488],{"class":5484},[5437,20516,5488],{"class":5447},[5437,20518,9537],{"class":5654},[5437,20520,6126],{"class":6088},[5437,20522,9537],{"class":5654},[5437,20524,9835],{"class":5447},[5437,20526,9493],{"class":5654},[5437,20528,9496],{"class":5447},[5437,20530,9499],{"class":5504},[5437,20532,5585],{"class":5447},[5437,20534,20535,20537,20539,20542],{"class":5439,"line":12396},[5437,20536,9488],{"class":5484},[5437,20538,5488],{"class":5447},[5437,20540,20541],{"class":5654},"\"КЛІНІЧНА РЕКОМЕНДАЦІЯ\"",[5437,20543,5585],{"class":5447},[5437,20545,20546,20548,20550,20552,20554,20556],{"class":5439,"line":12401},[5437,20547,9488],{"class":5484},[5437,20549,5488],{"class":5447},[5437,20551,9493],{"class":5654},[5437,20553,9496],{"class":5447},[5437,20555,9499],{"class":5504},[5437,20557,5585],{"class":5447},[5437,20559,20560,20562,20564,20567],{"class":5439,"line":12406},[5437,20561,9488],{"class":5484},[5437,20563,5488],{"class":5447},[5437,20565,20566],{"class":5654},"\"Пацієнт 1: Термінове направлення на коронарографію.\"",[5437,20568,5585],{"class":5447},[5437,20570,20571,20573,20575,20578],{"class":5439,"line":15967},[5437,20572,9488],{"class":5484},[5437,20574,5488],{"class":5447},[5437,20576,20577],{"class":5654},"\"           Високий ризик інфаркту міокарда.\"",[5437,20579,5585],{"class":5447},[5437,20581,20582,20584,20586,20589],{"class":5439,"line":15973},[5437,20583,9488],{"class":5484},[5437,20585,5488],{"class":5447},[5437,20587,20588],{"class":5654},"\"Пацієнт 2: Рутинний огляд через рік. Ризик мінімальний.\"",[5437,20590,5585],{"class":5447},[6531,20592,20593],{"v-slot:output":5432},[5236,20594,20595],{},[5239,20596,20599],{"icon":20597,"title":20598},"i-lucide-alert-triangle","🔴 Пацієнт 1: Високий кардіологічний ризик",[5244,20600,20601,20611,20623],{},[5220,20602,20603,20606,20607,20610],{},[5195,20604,20605],{},"Анамнез:"," 65 років, чоловік, типова стенокардія (",[5434,20608,20609],{},"cp=1","), тиск 160 мм рт. ст., холестерин 280 мг\u002Fдл, депресія ST 3.5 мм, 2 уражені судини.",[5220,20612,20613,20616,20617,20622],{},[5195,20614,20615],{},"Оцінка нейромережі:"," Ймовірність ішемії ",[5195,20618,20619],{},[5434,20620,20621],{},"94.3%"," ⚠️",[5220,20624,20625,20628],{},[5195,20626,20627],{},"Клінічна дія:"," Термінова госпіталізація та направлення на коронарографію.",[5239,20630,20633],{"icon":20631,"title":20632},"i-lucide-check-circle","🟢 Пацієнт 2: Низький кардіологічний ризик",[5244,20634,20635,20644,20654],{},[5220,20636,20637,20639,20640,20643],{},[5195,20638,20605],{}," 35 років, жінка, безсимптомна (",[5434,20641,20642],{},"cp=4","), тиск 110 мм рт. ст., холестерин 180 мг\u002Fдл, депресія ST 0.0 мм, 0 уражених судин.",[5220,20645,20646,20616,20648,20653],{},[5195,20647,20615],{},[5195,20649,20650],{},[5434,20651,20652],{},"2.1%"," ✅",[5220,20655,20656,20658],{},[5195,20657,20627],{}," Профілактичне планове спостереження, патології не виявлено.",[5191,20660,20661],{},"::",[5191,20663,20661],{},[6660,20665,20666,20671],{},[5191,20667,20668],{},[5195,20669,20670],{},"Інтеграція моделі у клінічну практику:",[5217,20672,20673,20726,20831],{},[5220,20674,20675,20678],{},[5195,20676,20677],{},"Збереження моделі для продакшену:",[5427,20679,20681],{"className":5429,"code":20680,"language":5431,"meta":5432,"style":5432},"torch.save({\n    'model_state_dict': model.state_dict(),\n    'scaler': scaler,\n    'input_features': column_names[:-1]\n}, 'heart_disease_model.pth')\n",[5434,20682,20683,20688,20696,20704,20716],{"__ignoreMap":5432},[5437,20684,20685],{"class":5439,"line":5440},[5437,20686,20687],{"class":5447},"torch.save({\n",[5437,20689,20690,20693],{"class":5439,"line":5457},[5437,20691,20692],{"class":5654},"    'model_state_dict'",[5437,20694,20695],{"class":5447},": model.state_dict(),\n",[5437,20697,20698,20701],{"class":5439,"line":5470},[5437,20699,20700],{"class":5654},"    'scaler'",[5437,20702,20703],{"class":5447},": scaler,\n",[5437,20705,20706,20709,20712,20714],{"class":5439,"line":5477},[5437,20707,20708],{"class":5654},"    'input_features'",[5437,20710,20711],{"class":5447},": column_names[:-",[5437,20713,5424],{"class":5504},[5437,20715,9441],{"class":5447},[5437,20717,20718,20721,20724],{"class":5439,"line":5498},[5437,20719,20720],{"class":5447},"}, ",[5437,20722,20723],{"class":5654},"'heart_disease_model.pth'",[5437,20725,5585],{"class":5447},[5220,20727,20728,20731],{},[5195,20729,20730],{},"Розгортання як REST API (FastAPI):",[5427,20732,20734],{"className":5429,"code":20733,"language":5431,"meta":5432,"style":5432},"from fastapi import FastAPI\n\napp = FastAPI()\n\n@app.post(\"\u002Fpredict\")\nasync def predict(patient: PatientData):\n    prob = predict_patient(model, scaler, patient.to_array(), device)\n    return {\"risk_score\": prob, \"diagnosis\": \"high_risk\" if prob >= 0.5 else \"low_risk\"}\n",[5434,20735,20736,20748,20752,20757,20761,20773,20792,20797],{"__ignoreMap":5432},[5437,20737,20738,20740,20743,20745],{"class":5439,"line":5440},[5437,20739,12793],{"class":5443},[5437,20741,20742],{"class":5447}," fastapi ",[5437,20744,5444],{"class":5443},[5437,20746,20747],{"class":5447}," FastAPI\n",[5437,20749,20750],{"class":5439,"line":5457},[5437,20751,5474],{"emptyLinePlaceholder":5473},[5437,20753,20754],{"class":5439,"line":5470},[5437,20755,20756],{"class":5447},"app = FastAPI()\n",[5437,20758,20759],{"class":5439,"line":5477},[5437,20760,5474],{"emptyLinePlaceholder":5473},[5437,20762,20763,20766,20768,20771],{"class":5439,"line":5498},[5437,20764,20765],{"class":5484},"@app.post",[5437,20767,5488],{"class":5447},[5437,20769,20770],{"class":5654},"\"\u002Fpredict\"",[5437,20772,5585],{"class":5447},[5437,20774,20775,20778,20781,20784,20786,20789],{"class":5439,"line":5516},[5437,20776,20777],{"class":5480},"async",[5437,20779,20780],{"class":5480}," def",[5437,20782,20783],{"class":5484}," predict",[5437,20785,5488],{"class":5447},[5437,20787,20788],{"class":5491},"patient",[5437,20790,20791],{"class":5447},": PatientData):\n",[5437,20793,20794],{"class":5439,"line":5521},[5437,20795,20796],{"class":5447},"    prob = predict_patient(model, scaler, patient.to_array(), device)\n",[5437,20798,20799,20801,20803,20806,20809,20812,20814,20817,20819,20822,20824,20826,20829],{"class":5439,"line":5535},[5437,20800,5501],{"class":5443},[5437,20802,16261],{"class":5447},[5437,20804,20805],{"class":5654},"\"risk_score\"",[5437,20807,20808],{"class":5447},": prob, ",[5437,20810,20811],{"class":5654},"\"diagnosis\"",[5437,20813,11778],{"class":5447},[5437,20815,20816],{"class":5654},"\"high_risk\"",[5437,20818,12877],{"class":5443},[5437,20820,20821],{"class":5447}," prob >= ",[5437,20823,15556],{"class":5504},[5437,20825,20412],{"class":5443},[5437,20827,20828],{"class":5654}," \"low_risk\"",[5437,20830,12090],{"class":5447},[5220,20832,20833,20836],{},[5195,20834,20835],{},"Інтеграція з електронною медичною карткою (EMR):",[5244,20837,20838,20841,20844],{},[5220,20839,20840],{},"Автоматичний імпорт даних пацієнта з лабораторних систем",[5220,20842,20843],{},"Виведення ризик-скору безпосередньо у картку кардіолога",[5220,20845,20846],{},"Алертинг при виявленні high-risk пацієнтів (push-повідомлення лікарю)",[5297,20848],{},[5186,20850,20852],{"id":20851},"додатковий-приклад-student-performance-prediction","Додатковий приклад: Student Performance Prediction",[5191,20854,20855,20856,20859,20860,20863],{},"Тепер застосуємо той самий підхід до іншої галузі — ",[5195,20857,20858],{},"освіти",". Побудуємо модель для передбачення успішності студентів на фінальному іспиті. Це демонструє ",[5195,20861,20862],{},"універсальність"," нейронних мереж: та сама архітектура працює для медицини, освіти, бізнесу тощо.",[5311,20865,20867],{"id":20866},"датасет-portuguese-student-performance","Датасет: Portuguese Student Performance",[5191,20869,20870,20872,20873,20875,20878],{},[5195,20871,8928],{}," UCI Machine Learning Repository",[7688,20874],{},[5195,20876,20877],{},"Контекст:"," Дані про успішність учнів двох португальських шкіл у предметі \"Математика\" (Math) та \"Португальська мова\" (Portuguese). Ми візьмемо Math.",[5191,20880,20881,20883],{},[5195,20882,8961],{}," 395 студентів, 33 ознаки (соціально-демографічні, освіта батьків, відвідуваність, попередні оцінки)",[5191,20885,20886,20888,20889,20892,20893,20896,20897,20900],{},[5195,20887,8967],{}," Фінальна оцінка ",[5434,20890,20891],{},"G3"," (від 0 до 20). Перетворимо у бінарну: ",[5195,20894,20895],{},"0 = не склав"," (G3 \u003C 10), ",[5195,20898,20899],{},"1 = склав"," (G3 ≥ 10).",[5297,20902],{},[5311,20904,20906],{"id":20905},"швидкий-огляд-ознак","Швидкий огляд ознак",[8983,20908,20909,20913,20949,20953,20985,20989,21045,21049,21105,21109],{},[5311,20910,20912],{"id":20911},"категорія-1-соціально-демографічні-ознаки","Категорія 1: Соціально-демографічні ознаки",[5244,20914,20915,20921,20926,20931,20937,20943],{},[5220,20916,20917,20920],{},[5195,20918,20919],{},"school"," — школа (Gabriel Pereira або Mousinho da Silveira)",[5220,20922,20923,20925],{},[5195,20924,9006],{}," — стать (F = жінка, M = чоловік)",[5220,20927,20928,20930],{},[5195,20929,8995],{}," — вік (15–22 роки)",[5220,20932,20933,20936],{},[5195,20934,20935],{},"address"," — тип проживання (U = місто, R = село)",[5220,20938,20939,20942],{},[5195,20940,20941],{},"famsize"," — розмір родини (LE3 = ≤3, GT3 = >3)",[5220,20944,20945,20948],{},[5195,20946,20947],{},"Pstatus"," — статус батьків (T = разом, A = окремо)",[5311,20950,20952],{"id":20951},"категорія-2-освіта-та-професія-батьків","Категорія 2: Освіта та професія батьків",[5244,20954,20955,20961,20967,20973,20979],{},[5220,20956,20957,20960],{},[5195,20958,20959],{},"Medu"," — освіта матері (0 = немає, 4 = вища освіта)",[5220,20962,20963,20966],{},[5195,20964,20965],{},"Fedu"," — освіта батька (0–4)",[5220,20968,20969,20972],{},[5195,20970,20971],{},"Mjob"," — робота матері (teacher, health, services, at_home, other)",[5220,20974,20975,20978],{},[5195,20976,20977],{},"Fjob"," — робота батька (аналогічно)",[5220,20980,20981,20984],{},[5195,20982,20983],{},"guardian"," — опікун (mother, father, other)",[5311,20986,20988],{"id":20987},"категорія-3-навчання-та-підтримка","Категорія 3: Навчання та підтримка",[5244,20990,20991,20997,21003,21009,21015,21021,21027,21033,21039],{},[5220,20992,20993,20996],{},[5195,20994,20995],{},"traveltime"," — час дороги до школи (1 = \u003C15хв, 4 = >1год)",[5220,20998,20999,21002],{},[5195,21000,21001],{},"studytime"," — час на навчання на тиждень (1 = \u003C2год, 4 = >10год)",[5220,21004,21005,21008],{},[5195,21006,21007],{},"failures"," — кількість провалених предметів раніше (0–4)",[5220,21010,21011,21014],{},[5195,21012,21013],{},"schoolsup"," — додаткова освітня підтримка (yes\u002Fno)",[5220,21016,21017,21020],{},[5195,21018,21019],{},"famsup"," — сімейна освітня підтримка (yes\u002Fno)",[5220,21022,21023,21026],{},[5195,21024,21025],{},"paid"," — платні додаткові заняття (yes\u002Fno)",[5220,21028,21029,21032],{},[5195,21030,21031],{},"activities"," — позакласні активності (yes\u002Fno)",[5220,21034,21035,21038],{},[5195,21036,21037],{},"nursery"," — відвідував дитсадок (yes\u002Fno)",[5220,21040,21041,21044],{},[5195,21042,21043],{},"higher"," — хоче вищої освіти (yes\u002Fno)",[5311,21046,21048],{"id":21047},"категорія-4-соціальне-життя-та-здоровя","Категорія 4: Соціальне життя та здоров'я",[5244,21050,21051,21057,21063,21069,21075,21081,21087,21093,21099],{},[5220,21052,21053,21056],{},[5195,21054,21055],{},"internet"," — доступ до інтернету вдома (yes\u002Fno)",[5220,21058,21059,21062],{},[5195,21060,21061],{},"romantic"," — романтичні стосунки (yes\u002Fno)",[5220,21064,21065,21068],{},[5195,21066,21067],{},"famrel"," — якість сімейних стосунків (1 = дуже погані, 5 = відмінні)",[5220,21070,21071,21074],{},[5195,21072,21073],{},"freetime"," — вільний час після школи (1–5)",[5220,21076,21077,21080],{},[5195,21078,21079],{},"goout"," — частота виходів із друзями (1–5)",[5220,21082,21083,21086],{},[5195,21084,21085],{},"Dalc"," — споживання алкоголю у будні (1–5)",[5220,21088,21089,21092],{},[5195,21090,21091],{},"Walc"," — споживання алкоголю на вихідних (1–5)",[5220,21094,21095,21098],{},[5195,21096,21097],{},"health"," — стан здоров'я (1 = дуже поганий, 5 = відмінний)",[5220,21100,21101,21104],{},[5195,21102,21103],{},"absences"," — кількість пропусків (0–93)",[5311,21106,21108],{"id":21107},"категорія-5-попередні-оцінки","Категорія 5: Попередні оцінки",[5244,21110,21111,21117,21123],{},[5220,21112,21113,21116],{},[5195,21114,21115],{},"G1"," — оцінка за 1-й семестр (0–20)",[5220,21118,21119,21122],{},[5195,21120,21121],{},"G2"," — оцінка за 2-й семестр (0–20)",[5220,21124,21125,21127,21128],{},[5195,21126,20891],{}," — фінальна оцінка (0–20) — ",[5195,21129,21130],{},"цільова змінна",[5345,21132,21133,21138,21149,21160],{},[5191,21134,21135],{},[5195,21136,21137],{},"Ключова відмінність від медичного датасету:",[5191,21139,21140,21141,21144,21145,21148],{},"У медицині ми ",[5195,21142,21143],{},"не маємо"," контролю над минулим пацієнта (вік, генетика). У освіті ми ",[5195,21146,21147],{},"можемо втрутитися",": якщо модель виявляє студента з високим ризиком провалу, можна:",[5244,21150,21151,21154,21157],{},[5220,21152,21153],{},"Призначити додаткові консультації",[5220,21155,21156],{},"Залучити сімейну підтримку",[5220,21158,21159],{},"Рекомендувати зменшити позакласні активності",[5191,21161,21162,21163,21166],{},"Це ",[5195,21164,21165],{},"проактивна інтервенція",", а не просто діагностика.",[5297,21168],{},[5311,21170,21172],{"id":21171},"імплементація-моделі-student-performance","Імплементація моделі Student Performance",[5417,21174,21176,21638,22024,22318,22731,23447],{"kernel":5419,"title":21175},"student_performance_prediction.ipynb",[5422,21177,21178,21574],{"execution-count":5424},[5427,21179,21181],{"className":5429,"code":21180,"language":5431,"meta":5432,"style":5432},"import pandas as pd\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.optim as optim\nfrom torch.utils.data import TensorDataset, DataLoader\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.preprocessing import StandardScaler, LabelEncoder\nfrom sklearn.metrics import accuracy_score, roc_auc_score, classification_report\n\n# Завантаження датасету\nurl = 'https:\u002F\u002Farchive.ics.uci.edu\u002Fml\u002Fmachine-learning-databases\u002F00320\u002Fstudent.zip'\n# Для спрощення використаємо локальний файл або Kaggle mirror\ndf = pd.read_csv('student-mat.csv', sep=';')\n\nprint(\"=\" * 70)\nprint(\"ДАТАСЕТ STUDENT PERFORMANCE — ОГЛЯД\")\nprint(\"=\" * 70)\nprint(f\"Розмір: {df.shape[0]} студентів × {df.shape[1]} ознак\")\nprint(f\"\\nПерші 3 записи:\")\nprint(df.head(3))\n\n# Створення бінарної цільової змінної\ndf['pass'] = (df['G3'] >= 10).astype(int)  # 10\u002F20 — мінімум для здачі\n\nprint(f\"\\nРозподіл класів:\")\nprint(f\"  Не склав (G3 \u003C 10): {(df['pass'] == 0).sum()} студентів ({(df['pass'] == 0).mean()*100:.1f}%)\")\nprint(f\"  Склав (G3 ≥ 10):    {(df['pass'] == 1).sum()} студентів ({(df['pass'] == 1).mean()*100:.1f}%)\")\n",[5434,21182,21183,21193,21203,21209,21219,21229,21239,21249,21260,21271,21275,21280,21287,21292,21312,21316,21330,21341,21355,21393,21410,21421,21425,21430,21456,21460,21476,21527],{"__ignoreMap":5432},[5437,21184,21185,21187,21189,21191],{"class":5439,"line":5440},[5437,21186,5444],{"class":5443},[5437,21188,9260],{"class":5447},[5437,21190,5451],{"class":5443},[5437,21192,9265],{"class":5447},[5437,21194,21195,21197,21199,21201],{"class":5439,"line":5457},[5437,21196,5444],{"class":5443},[5437,21198,5448],{"class":5447},[5437,21200,5451],{"class":5443},[5437,21202,5454],{"class":5447},[5437,21204,21205,21207],{"class":5439,"line":5470},[5437,21206,5444],{"class":5443},[5437,21208,12764],{"class":5447},[5437,21210,21211,21213,21215,21217],{"class":5439,"line":5477},[5437,21212,5444],{"class":5443},[5437,21214,12771],{"class":5447},[5437,21216,5451],{"class":5443},[5437,21218,12776],{"class":5447},[5437,21220,21221,21223,21225,21227],{"class":5439,"line":5498},[5437,21222,5444],{"class":5443},[5437,21224,12783],{"class":5447},[5437,21226,5451],{"class":5443},[5437,21228,12788],{"class":5447},[5437,21230,21231,21233,21235,21237],{"class":5439,"line":5516},[5437,21232,12793],{"class":5443},[5437,21234,12796],{"class":5447},[5437,21236,5444],{"class":5443},[5437,21238,12801],{"class":5447},[5437,21240,21241,21243,21245,21247],{"class":5439,"line":5521},[5437,21242,12793],{"class":5443},[5437,21244,12808],{"class":5447},[5437,21246,5444],{"class":5443},[5437,21248,12813],{"class":5447},[5437,21250,21251,21253,21255,21257],{"class":5439,"line":5535},[5437,21252,12793],{"class":5443},[5437,21254,12820],{"class":5447},[5437,21256,5444],{"class":5443},[5437,21258,21259],{"class":5447}," StandardScaler, LabelEncoder\n",[5437,21261,21262,21264,21266,21268],{"class":5439,"line":5541},[5437,21263,12793],{"class":5443},[5437,21265,12832],{"class":5447},[5437,21267,5444],{"class":5443},[5437,21269,21270],{"class":5447}," accuracy_score, roc_auc_score, classification_report\n",[5437,21272,21273],{"class":5439,"line":5554},[5437,21274,5474],{"emptyLinePlaceholder":5473},[5437,21276,21277],{"class":5439,"line":5559},[5437,21278,21279],{"class":5562},"# Завантаження датасету\n",[5437,21281,21282,21284],{"class":5439,"line":5566},[5437,21283,9455],{"class":5447},[5437,21285,21286],{"class":5654},"'https:\u002F\u002Farchive.ics.uci.edu\u002Fml\u002Fmachine-learning-databases\u002F00320\u002Fstudent.zip'\n",[5437,21288,21289],{"class":5439,"line":5588},[5437,21290,21291],{"class":5562},"# Для спрощення використаємо локальний файл або Kaggle mirror\n",[5437,21293,21294,21297,21300,21302,21305,21307,21310],{"class":5439,"line":5593},[5437,21295,21296],{"class":5447},"df = pd.read_csv(",[5437,21298,21299],{"class":5654},"'student-mat.csv'",[5437,21301,5575],{"class":5447},[5437,21303,21304],{"class":5491},"sep",[5437,21306,5651],{"class":5447},[5437,21308,21309],{"class":5654},"';'",[5437,21311,5585],{"class":5447},[5437,21313,21314],{"class":5439,"line":5599},[5437,21315,5474],{"emptyLinePlaceholder":5473},[5437,21317,21318,21320,21322,21324,21326,21328],{"class":5439,"line":5631},[5437,21319,9488],{"class":5484},[5437,21321,5488],{"class":5447},[5437,21323,9493],{"class":5654},[5437,21325,9496],{"class":5447},[5437,21327,9499],{"class":5504},[5437,21329,5585],{"class":5447},[5437,21331,21332,21334,21336,21339],{"class":5439,"line":5636},[5437,21333,9488],{"class":5484},[5437,21335,5488],{"class":5447},[5437,21337,21338],{"class":5654},"\"ДАТАСЕТ STUDENT PERFORMANCE — ОГЛЯД\"",[5437,21340,5585],{"class":5447},[5437,21342,21343,21345,21347,21349,21351,21353],{"class":5439,"line":5642},[5437,21344,9488],{"class":5484},[5437,21346,5488],{"class":5447},[5437,21348,9493],{"class":5654},[5437,21350,9496],{"class":5447},[5437,21352,9499],{"class":5504},[5437,21354,5585],{"class":5447},[5437,21356,21357,21359,21361,21363,21366,21368,21370,21372,21374,21376,21379,21381,21383,21385,21387,21389,21391],{"class":5439,"line":5680},[5437,21358,9488],{"class":5484},[5437,21360,5488],{"class":5447},[5437,21362,6082],{"class":5480},[5437,21364,21365],{"class":5654},"\"Розмір: ",[5437,21367,6095],{"class":5480},[5437,21369,9547],{"class":5447},[5437,21371,5686],{"class":5504},[5437,21373,9552],{"class":5447},[5437,21375,9555],{"class":5480},[5437,21377,21378],{"class":5654}," студентів × ",[5437,21380,6095],{"class":5480},[5437,21382,9547],{"class":5447},[5437,21384,5424],{"class":5504},[5437,21386,9552],{"class":5447},[5437,21388,9555],{"class":5480},[5437,21390,9571],{"class":5654},[5437,21392,5585],{"class":5447},[5437,21394,21395,21397,21399,21401,21403,21405,21408],{"class":5439,"line":5720},[5437,21396,9488],{"class":5484},[5437,21398,5488],{"class":5447},[5437,21400,6082],{"class":5480},[5437,21402,9537],{"class":5654},[5437,21404,6126],{"class":6088},[5437,21406,21407],{"class":5654},"Перші 3 записи:\"",[5437,21409,5585],{"class":5447},[5437,21411,21412,21414,21417,21419],{"class":5439,"line":5753},[5437,21413,9488],{"class":5484},[5437,21415,21416],{"class":5447},"(df.head(",[5437,21418,5665],{"class":5504},[5437,21420,5628],{"class":5447},[5437,21422,21423],{"class":5439,"line":5787},[5437,21424,5474],{"emptyLinePlaceholder":5473},[5437,21426,21427],{"class":5439,"line":5801},[5437,21428,21429],{"class":5562},"# Створення бінарної цільової змінної\n",[5437,21431,21432,21434,21437,21439,21442,21445,21447,21449,21451,21453],{"class":5439,"line":5822},[5437,21433,13116],{"class":5447},[5437,21435,21436],{"class":5654},"'pass'",[5437,21438,13121],{"class":5447},[5437,21440,21441],{"class":5654},"'G3'",[5437,21443,21444],{"class":5447},"] >= ",[5437,21446,5572],{"class":5504},[5437,21448,10468],{"class":5447},[5437,21450,10471],{"class":6162},[5437,21452,14062],{"class":5447},[5437,21454,21455],{"class":5562},"# 10\u002F20 — мінімум для здачі\n",[5437,21457,21458],{"class":5439,"line":5840},[5437,21459,5474],{"emptyLinePlaceholder":5473},[5437,21461,21462,21464,21466,21468,21470,21472,21474],{"class":5439,"line":5869},[5437,21463,9488],{"class":5484},[5437,21465,5488],{"class":5447},[5437,21467,6082],{"class":5480},[5437,21469,9537],{"class":5654},[5437,21471,6126],{"class":6088},[5437,21473,10490],{"class":5654},[5437,21475,5585],{"class":5447},[5437,21477,21478,21480,21482,21484,21487,21489,21492,21494,21496,21498,21501,21503,21506,21508,21510,21512,21514,21516,21519,21521,21523,21525],{"class":5439,"line":5884},[5437,21479,9488],{"class":5484},[5437,21481,5488],{"class":5447},[5437,21483,6082],{"class":5480},[5437,21485,21486],{"class":5654},"\"  Не склав (G3 \u003C 10): ",[5437,21488,6095],{"class":5480},[5437,21490,21491],{"class":5447},"(df[",[5437,21493,21436],{"class":5654},[5437,21495,11134],{"class":5447},[5437,21497,5686],{"class":5504},[5437,21499,21500],{"class":5447},").sum()",[5437,21502,9555],{"class":5480},[5437,21504,21505],{"class":5654}," студентів (",[5437,21507,6095],{"class":5480},[5437,21509,21491],{"class":5447},[5437,21511,21436],{"class":5654},[5437,21513,11134],{"class":5447},[5437,21515,5686],{"class":5504},[5437,21517,21518],{"class":5447},").mean()*",[5437,21520,10531],{"class":5504},[5437,21522,10534],{"class":5480},[5437,21524,13419],{"class":5654},[5437,21526,5585],{"class":5447},[5437,21528,21529,21531,21533,21535,21538,21540,21542,21544,21546,21548,21550,21552,21554,21556,21558,21560,21562,21564,21566,21568,21570,21572],{"class":5439,"line":5889},[5437,21530,9488],{"class":5484},[5437,21532,5488],{"class":5447},[5437,21534,6082],{"class":5480},[5437,21536,21537],{"class":5654},"\"  Склав (G3 ≥ 10):    ",[5437,21539,6095],{"class":5480},[5437,21541,21491],{"class":5447},[5437,21543,21436],{"class":5654},[5437,21545,11134],{"class":5447},[5437,21547,5424],{"class":5504},[5437,21549,21500],{"class":5447},[5437,21551,9555],{"class":5480},[5437,21553,21505],{"class":5654},[5437,21555,6095],{"class":5480},[5437,21557,21491],{"class":5447},[5437,21559,21436],{"class":5654},[5437,21561,11134],{"class":5447},[5437,21563,5424],{"class":5504},[5437,21565,21518],{"class":5447},[5437,21567,10531],{"class":5504},[5437,21569,10534],{"class":5480},[5437,21571,13419],{"class":5654},[5437,21573,5585],{"class":5447},[6531,21575,21576],{"v-slot:output":5432},[8489,21577,21578,21590],{},[8492,21579,21580],{},[8495,21581,21582,21585,21587],{},[8498,21583,21584],{"align":8500},"Характеристика датасету",[8498,21586,12960],{"align":8510},[8498,21588,21589],{"align":8500},"Опис",[8522,21591,21592,21607,21622],{},[8495,21593,21594,21599,21604],{},[8527,21595,21596],{"align":8500},[5195,21597,21598],{},"Кількість студентів",[8527,21600,21601],{"align":8510},[5434,21602,21603],{},"395",[8527,21605,21606],{"align":8500},"Учні старших шкіл",[8495,21608,21609,21614,21619],{},[8527,21610,21611],{"align":8500},[5195,21612,21613],{},"Загальна кількість ознак",[8527,21615,21616],{"align":8510},[5434,21617,21618],{},"33",[8527,21620,21621],{"align":8500},"Демографічні, соціальні та академічні параметри",[8495,21623,21624,21632,21635],{},[8527,21625,21626],{"align":8500},[5195,21627,21628,21629,8475],{},"Цільова змінна (",[5434,21630,21631],{},"pass",[8527,21633,21634],{"align":8510},"Бінарна ($G3 \\ge 10$)",[8527,21636,21637],{"align":8500},"1 = успішно склав (67.1%), 0 = не склав (32.9%)",[5422,21639,21640,21962],{"execution-count":5609},[5427,21641,21643],{"className":5429,"code":21642,"language":5431,"meta":5432,"style":5432},"# Обробка категоріальних змінних\ncategorical_cols = ['school', 'sex', 'address', 'famsize', 'Pstatus', \n                    'Mjob', 'Fjob', 'reason', 'guardian', \n                    'schoolsup', 'famsup', 'paid', 'activities', \n                    'nursery', 'higher', 'internet', 'romantic']\n\n# Label Encoding для бінарних змінних, One-Hot для багатокласових\nlabel_encoders = {}\nfor col in categorical_cols:\n    if df[col].nunique() == 2:\n        # Бінарна змінна — Label Encoding\n        le = LabelEncoder()\n        df[col] = le.fit_transform(df[col])\n        label_encoders[col] = le\n    else:\n        # Багатокласова змінна — One-Hot Encoding\n        df = pd.get_dummies(df, columns=[col], prefix=col, drop_first=True)\n\n# Видалення G1, G2, G3 (щоб не було data leakage — попередні оцінки занадто сильно корелюють)\nfeatures_to_drop = ['G1', 'G2', 'G3']\nX = df.drop(['pass'] + features_to_drop, axis=1).values\ny = df['pass'].values\n\nprint(f\"Розмір після one-hot encoding: {X.shape[1]} ознак\")\nprint(f\"Приклад перших 5 ознак: {df.drop(['pass'] + features_to_drop, axis=1).columns[:5].tolist()}\")\n",[5434,21644,21645,21650,21679,21701,21723,21745,21749,21754,21759,21771,21782,21787,21792,21797,21802,21808,21813,21839,21843,21848,21867,21885,21893,21897,21922],{"__ignoreMap":5432},[5437,21646,21647],{"class":5439,"line":5440},[5437,21648,21649],{"class":5562},"# Обробка категоріальних змінних\n",[5437,21651,21652,21655,21658,21660,21662,21664,21667,21669,21672,21674,21677],{"class":5439,"line":5457},[5437,21653,21654],{"class":5447},"categorical_cols = [",[5437,21656,21657],{"class":5654},"'school'",[5437,21659,5575],{"class":5447},[5437,21661,9372],{"class":5654},[5437,21663,5575],{"class":5447},[5437,21665,21666],{"class":5654},"'address'",[5437,21668,5575],{"class":5447},[5437,21670,21671],{"class":5654},"'famsize'",[5437,21673,5575],{"class":5447},[5437,21675,21676],{"class":5654},"'Pstatus'",[5437,21678,7436],{"class":5447},[5437,21680,21681,21684,21686,21689,21691,21694,21696,21699],{"class":5439,"line":5470},[5437,21682,21683],{"class":5654},"                    'Mjob'",[5437,21685,5575],{"class":5447},[5437,21687,21688],{"class":5654},"'Fjob'",[5437,21690,5575],{"class":5447},[5437,21692,21693],{"class":5654},"'reason'",[5437,21695,5575],{"class":5447},[5437,21697,21698],{"class":5654},"'guardian'",[5437,21700,7436],{"class":5447},[5437,21702,21703,21706,21708,21711,21713,21716,21718,21721],{"class":5439,"line":5477},[5437,21704,21705],{"class":5654},"                    'schoolsup'",[5437,21707,5575],{"class":5447},[5437,21709,21710],{"class":5654},"'famsup'",[5437,21712,5575],{"class":5447},[5437,21714,21715],{"class":5654},"'paid'",[5437,21717,5575],{"class":5447},[5437,21719,21720],{"class":5654},"'activities'",[5437,21722,7436],{"class":5447},[5437,21724,21725,21728,21730,21733,21735,21738,21740,21743],{"class":5439,"line":5498},[5437,21726,21727],{"class":5654},"                    'nursery'",[5437,21729,5575],{"class":5447},[5437,21731,21732],{"class":5654},"'higher'",[5437,21734,5575],{"class":5447},[5437,21736,21737],{"class":5654},"'internet'",[5437,21739,5575],{"class":5447},[5437,21741,21742],{"class":5654},"'romantic'",[5437,21744,9441],{"class":5447},[5437,21746,21747],{"class":5439,"line":5516},[5437,21748,5474],{"emptyLinePlaceholder":5473},[5437,21750,21751],{"class":5439,"line":5521},[5437,21752,21753],{"class":5562},"# Label Encoding для бінарних змінних, One-Hot для багатокласових\n",[5437,21755,21756],{"class":5439,"line":5535},[5437,21757,21758],{"class":5447},"label_encoders = {}\n",[5437,21760,21761,21763,21766,21768],{"class":5439,"line":5541},[5437,21762,14817],{"class":5443},[5437,21764,21765],{"class":5447}," col ",[5437,21767,14823],{"class":5443},[5437,21769,21770],{"class":5447}," categorical_cols:\n",[5437,21772,21773,21775,21778,21780],{"class":5439,"line":5554},[5437,21774,16060],{"class":5443},[5437,21776,21777],{"class":5447}," df[col].nunique() == ",[5437,21779,5609],{"class":5504},[5437,21781,10004],{"class":5447},[5437,21783,21784],{"class":5439,"line":5559},[5437,21785,21786],{"class":5562},"        # Бінарна змінна — Label Encoding\n",[5437,21788,21789],{"class":5439,"line":5566},[5437,21790,21791],{"class":5447},"        le = LabelEncoder()\n",[5437,21793,21794],{"class":5439,"line":5588},[5437,21795,21796],{"class":5447},"        df[col] = le.fit_transform(df[col])\n",[5437,21798,21799],{"class":5439,"line":5593},[5437,21800,21801],{"class":5447},"        label_encoders[col] = le\n",[5437,21803,21804,21806],{"class":5439,"line":5599},[5437,21805,16098],{"class":5443},[5437,21807,10004],{"class":5447},[5437,21809,21810],{"class":5439,"line":5631},[5437,21811,21812],{"class":5562},"        # Багатокласова змінна — One-Hot Encoding\n",[5437,21814,21815,21818,21821,21824,21827,21830,21833,21835,21837],{"class":5439,"line":5636},[5437,21816,21817],{"class":5447},"        df = pd.get_dummies(df, ",[5437,21819,21820],{"class":5491},"columns",[5437,21822,21823],{"class":5447},"=[col], ",[5437,21825,21826],{"class":5491},"prefix",[5437,21828,21829],{"class":5447},"=col, ",[5437,21831,21832],{"class":5491},"drop_first",[5437,21834,5651],{"class":5447},[5437,21836,11715],{"class":5480},[5437,21838,5585],{"class":5447},[5437,21840,21841],{"class":5439,"line":5642},[5437,21842,5474],{"emptyLinePlaceholder":5473},[5437,21844,21845],{"class":5439,"line":5680},[5437,21846,21847],{"class":5562},"# Видалення G1, G2, G3 (щоб не було data leakage — попередні оцінки занадто сильно корелюють)\n",[5437,21849,21850,21853,21856,21858,21861,21863,21865],{"class":5439,"line":5720},[5437,21851,21852],{"class":5447},"features_to_drop = [",[5437,21854,21855],{"class":5654},"'G1'",[5437,21857,5575],{"class":5447},[5437,21859,21860],{"class":5654},"'G2'",[5437,21862,5575],{"class":5447},[5437,21864,21441],{"class":5654},[5437,21866,9441],{"class":5447},[5437,21868,21869,21872,21874,21877,21879,21881,21883],{"class":5439,"line":5753},[5437,21870,21871],{"class":5447},"X = df.drop([",[5437,21873,21436],{"class":5654},[5437,21875,21876],{"class":5447},"] + features_to_drop, ",[5437,21878,11608],{"class":5491},[5437,21880,5651],{"class":5447},[5437,21882,5424],{"class":5504},[5437,21884,13160],{"class":5447},[5437,21886,21887,21889,21891],{"class":5439,"line":5787},[5437,21888,13165],{"class":5447},[5437,21890,21436],{"class":5654},[5437,21892,13170],{"class":5447},[5437,21894,21895],{"class":5439,"line":5801},[5437,21896,5474],{"emptyLinePlaceholder":5473},[5437,21898,21899,21901,21903,21905,21908,21910,21912,21914,21916,21918,21920],{"class":5439,"line":5822},[5437,21900,9488],{"class":5484},[5437,21902,5488],{"class":5447},[5437,21904,6082],{"class":5480},[5437,21906,21907],{"class":5654},"\"Розмір після one-hot encoding: ",[5437,21909,6095],{"class":5480},[5437,21911,13190],{"class":5447},[5437,21913,5424],{"class":5504},[5437,21915,9552],{"class":5447},[5437,21917,9555],{"class":5480},[5437,21919,9571],{"class":5654},[5437,21921,5585],{"class":5447},[5437,21923,21924,21926,21928,21930,21933,21935,21938,21940,21942,21944,21946,21948,21951,21953,21956,21958,21960],{"class":5439,"line":5840},[5437,21925,9488],{"class":5484},[5437,21927,5488],{"class":5447},[5437,21929,6082],{"class":5480},[5437,21931,21932],{"class":5654},"\"Приклад перших 5 ознак: ",[5437,21934,6095],{"class":5480},[5437,21936,21937],{"class":5447},"df.drop([",[5437,21939,21436],{"class":5654},[5437,21941,21876],{"class":5447},[5437,21943,11608],{"class":5491},[5437,21945,5651],{"class":5447},[5437,21947,5424],{"class":5504},[5437,21949,21950],{"class":5447},").columns[:",[5437,21952,6246],{"class":5504},[5437,21954,21955],{"class":5447},"].tolist()",[5437,21957,9555],{"class":5480},[5437,21959,9537],{"class":5654},[5437,21961,5585],{"class":5447},[6531,21963,21964],{"v-slot:output":5432},[8489,21965,21966,21979],{},[8492,21967,21968],{},[8495,21969,21970,21973,21976],{},[8498,21971,21972],{"align":8500},"Етап кодування",[8498,21974,21975],{"align":8510},"Кількість ознак",[8498,21977,21978],{"align":8500},"Приклади колонок після перетворення",[8522,21980,21981,22004],{},[8495,21982,21983,21988,21994],{},[8527,21984,21985],{"align":8500},[5195,21986,21987],{},"Вихідні дані",[8527,21989,21990,21993],{"align":8510},[5434,21991,21992],{},"30"," ознак (без G1, G2, G3)",[8527,21995,21996,21997,5575,21999,5575,22001,22003],{"align":8500},"Категоріальні (",[5434,21998,20971],{},[5434,22000,20977],{},[5434,22002,20919],{},") та числові",[8495,22005,22006,22011,22019],{},[8527,22007,22008],{"align":8500},[5195,22009,22010],{},"Після One-Hot Encoding",[8527,22012,22013,22018],{"align":8510},[5195,22014,22015],{},[5434,22016,22017],{},"47"," числових ознак",[8527,22020,22021],{"align":8500},[5434,22022,22023],{},"['age', 'Medu', 'Fedu', 'traveltime', 'studytime', ...]",[5422,22025,22026,22256],{"execution-count":5665},[5427,22027,22029],{"className":5429,"code":22028,"language":5431,"meta":5432,"style":5432},"# Розбиття та масштабування (аналогічно Heart Disease)\nX_temp, X_test, y_temp, y_test = train_test_split(X, y, test_size=0.15, random_state=42, stratify=y)\nX_train, X_val, y_train, y_val = train_test_split(X_temp, y_temp, test_size=0.176, random_state=42, stratify=y_temp)\n\nscaler = StandardScaler()\nX_train_scaled = scaler.fit_transform(X_train)\nX_val_scaled = scaler.transform(X_val)\nX_test_scaled = scaler.transform(X_test)\n\n# Перетворення у PyTorch тензори\nX_train_tensor = torch.FloatTensor(X_train_scaled)\ny_train_tensor = torch.FloatTensor(y_train).unsqueeze(1)\nX_val_tensor = torch.FloatTensor(X_val_scaled)\ny_val_tensor = torch.FloatTensor(y_val).unsqueeze(1)\nX_test_tensor = torch.FloatTensor(X_test_scaled)\ny_test_tensor = torch.FloatTensor(y_test).unsqueeze(1)\n\n# DataLoader\ntrain_loader = DataLoader(TensorDataset(X_train_tensor, y_train_tensor), batch_size=32, shuffle=True)\nval_loader = DataLoader(TensorDataset(X_val_tensor, y_val_tensor), batch_size=32, shuffle=False)\n\nprint(f\"Розбиття: Train={X_train.shape[0]}, Val={X_val.shape[0]}, Test={X_test.shape[0]}\")\n",[5434,22030,22031,22036,22060,22084,22088,22092,22097,22101,22105,22109,22114,22118,22126,22130,22138,22142,22150,22154,22159,22180,22201,22205],{"__ignoreMap":5432},[5437,22032,22033],{"class":5439,"line":5440},[5437,22034,22035],{"class":5562},"# Розбиття та масштабування (аналогічно Heart Disease)\n",[5437,22037,22038,22040,22042,22044,22046,22048,22050,22052,22054,22056,22058],{"class":5439,"line":5457},[5437,22039,13301],{"class":5447},[5437,22041,13304],{"class":5491},[5437,22043,5651],{"class":5447},[5437,22045,6255],{"class":5504},[5437,22047,5575],{"class":5447},[5437,22049,13313],{"class":5491},[5437,22051,5651],{"class":5447},[5437,22053,13318],{"class":5504},[5437,22055,5575],{"class":5447},[5437,22057,13323],{"class":5491},[5437,22059,13326],{"class":5447},[5437,22061,22062,22064,22066,22068,22070,22072,22074,22076,22078,22080,22082],{"class":5439,"line":5470},[5437,22063,13331],{"class":5447},[5437,22065,13304],{"class":5491},[5437,22067,5651],{"class":5447},[5437,22069,13338],{"class":5504},[5437,22071,5575],{"class":5447},[5437,22073,13313],{"class":5491},[5437,22075,5651],{"class":5447},[5437,22077,13318],{"class":5504},[5437,22079,5575],{"class":5447},[5437,22081,13323],{"class":5491},[5437,22083,13353],{"class":5447},[5437,22085,22086],{"class":5439,"line":5477},[5437,22087,5474],{"emptyLinePlaceholder":5473},[5437,22089,22090],{"class":5439,"line":5498},[5437,22091,13771],{"class":5447},[5437,22093,22094],{"class":5439,"line":5516},[5437,22095,22096],{"class":5447},"X_train_scaled = scaler.fit_transform(X_train)\n",[5437,22098,22099],{"class":5439,"line":5521},[5437,22100,13784],{"class":5447},[5437,22102,22103],{"class":5439,"line":5535},[5437,22104,13789],{"class":5447},[5437,22106,22107],{"class":5439,"line":5541},[5437,22108,5474],{"emptyLinePlaceholder":5473},[5437,22110,22111],{"class":5439,"line":5554},[5437,22112,22113],{"class":5562},"# Перетворення у PyTorch тензори\n",[5437,22115,22116],{"class":5439,"line":5559},[5437,22117,14052],{"class":5447},[5437,22119,22120,22122,22124],{"class":5439,"line":5566},[5437,22121,14057],{"class":5447},[5437,22123,5424],{"class":5504},[5437,22125,5585],{"class":5447},[5437,22127,22128],{"class":5439,"line":5588},[5437,22129,14074],{"class":5447},[5437,22131,22132,22134,22136],{"class":5439,"line":5593},[5437,22133,14079],{"class":5447},[5437,22135,5424],{"class":5504},[5437,22137,5585],{"class":5447},[5437,22139,22140],{"class":5439,"line":5599},[5437,22141,14092],{"class":5447},[5437,22143,22144,22146,22148],{"class":5439,"line":5631},[5437,22145,14097],{"class":5447},[5437,22147,5424],{"class":5504},[5437,22149,5585],{"class":5447},[5437,22151,22152],{"class":5439,"line":5636},[5437,22153,5474],{"emptyLinePlaceholder":5473},[5437,22155,22156],{"class":5439,"line":5642},[5437,22157,22158],{"class":5562},"# DataLoader\n",[5437,22160,22161,22164,22166,22168,22170,22172,22174,22176,22178],{"class":5439,"line":5680},[5437,22162,22163],{"class":5447},"train_loader = DataLoader(TensorDataset(X_train_tensor, y_train_tensor), ",[5437,22165,14145],{"class":5491},[5437,22167,5651],{"class":5447},[5437,22169,14519],{"class":5504},[5437,22171,5575],{"class":5447},[5437,22173,14151],{"class":5491},[5437,22175,5651],{"class":5447},[5437,22177,11715],{"class":5480},[5437,22179,5585],{"class":5447},[5437,22181,22182,22185,22187,22189,22191,22193,22195,22197,22199],{"class":5439,"line":5720},[5437,22183,22184],{"class":5447},"val_loader = DataLoader(TensorDataset(X_val_tensor, y_val_tensor), ",[5437,22186,14145],{"class":5491},[5437,22188,5651],{"class":5447},[5437,22190,14519],{"class":5504},[5437,22192,5575],{"class":5447},[5437,22194,14151],{"class":5491},[5437,22196,5651],{"class":5447},[5437,22198,10020],{"class":5480},[5437,22200,5585],{"class":5447},[5437,22202,22203],{"class":5439,"line":5753},[5437,22204,5474],{"emptyLinePlaceholder":5473},[5437,22206,22207,22209,22211,22213,22216,22218,22220,22222,22224,22226,22229,22231,22233,22235,22237,22239,22242,22244,22246,22248,22250,22252,22254],{"class":5439,"line":5787},[5437,22208,9488],{"class":5484},[5437,22210,5488],{"class":5447},[5437,22212,6082],{"class":5480},[5437,22214,22215],{"class":5654},"\"Розбиття: Train=",[5437,22217,6095],{"class":5480},[5437,22219,13389],{"class":5447},[5437,22221,5686],{"class":5504},[5437,22223,9552],{"class":5447},[5437,22225,9555],{"class":5480},[5437,22227,22228],{"class":5654},", Val=",[5437,22230,6095],{"class":5480},[5437,22232,13437],{"class":5447},[5437,22234,5686],{"class":5504},[5437,22236,9552],{"class":5447},[5437,22238,9555],{"class":5480},[5437,22240,22241],{"class":5654},", Test=",[5437,22243,6095],{"class":5480},[5437,22245,13481],{"class":5447},[5437,22247,5686],{"class":5504},[5437,22249,9552],{"class":5447},[5437,22251,9555],{"class":5480},[5437,22253,9537],{"class":5654},[5437,22255,5585],{"class":5447},[6531,22257,22258],{"v-slot:output":5432},[8489,22259,22260,22273],{},[8492,22261,22262],{},[8495,22263,22264,22267,22270],{},[8498,22265,22266],{"align":8500},"Вибірка для студентської моделі",[8498,22268,22269],{"align":8510},"Кількість записів",[8498,22271,22272],{"align":8510},"Частка",[8522,22274,22275,22290,22304],{},[8495,22276,22277,22281,22287],{},[8527,22278,22279],{"align":8500},[5195,22280,13665],{},[8527,22282,22283],{"align":8510},[5195,22284,22285],{},[5434,22286,11014],{},[8527,22288,22289],{"align":8510},"69.6%",[8495,22291,22292,22296,22302],{},[8527,22293,22294],{"align":8500},[5195,22295,13692],{},[8527,22297,22298],{"align":8510},[5195,22299,22300],{},[5434,22301,17165],{},[8527,22303,13702],{"align":8510},[8495,22305,22306,22310,22316],{},[8527,22307,22308],{"align":8500},[5195,22309,13719],{},[8527,22311,22312],{"align":8510},[5195,22313,22314],{},[5434,22315,17165],{},[8527,22317,13702],{"align":8510},[5422,22319,22320,22645],{"execution-count":8134},[5427,22321,22323],{"className":5429,"code":22322,"language":5431,"meta":5432,"style":5432},"# Модель (адаптуємо архітектуру для 47 ознак)\nclass StudentPerformanceNet(nn.Module):\n    def __init__(self, input_size=47):\n        super(StudentPerformanceNet, self).__init__()\n        self.fc1 = nn.Linear(input_size, 128)  # Більше нейронів через більше ознак\n        self.relu1 = nn.ReLU()\n        self.dropout1 = nn.Dropout(0.4)\n        \n        self.fc2 = nn.Linear(128, 64)\n        self.relu2 = nn.ReLU()\n        self.dropout2 = nn.Dropout(0.3)\n        \n        self.fc3 = nn.Linear(64, 1)\n        self.sigmoid = nn.Sigmoid()\n        \n    def forward(self, x):\n        x = self.dropout1(self.relu1(self.fc1(x)))\n        x = self.dropout2(self.relu2(self.fc2(x)))\n        x = self.sigmoid(self.fc3(x))\n        return x\n\ndevice = torch.device('cpu')\nmodel = StudentPerformanceNet().to(device)\ncriterion = nn.BCELoss()\noptimizer = optim.Adam(model.parameters(), lr=0.001)\n\nprint(\"Модель створено:\")\nprint(model)\nprint(f\"\\nПараметри: {sum(p.numel() for p in model.parameters()):,}\")\n",[5434,22324,22325,22330,22347,22367,22382,22397,22403,22415,22419,22434,22440,22451,22455,22470,22476,22480,22496,22515,22534,22548,22554,22558,22567,22572,22576,22588,22592,22603,22609],{"__ignoreMap":5432},[5437,22326,22327],{"class":5439,"line":5440},[5437,22328,22329],{"class":5562},"# Модель (адаптуємо архітектуру для 47 ознак)\n",[5437,22331,22332,22334,22337,22339,22341,22343,22345],{"class":5439,"line":5457},[5437,22333,14414],{"class":5480},[5437,22335,22336],{"class":6162}," StudentPerformanceNet",[5437,22338,5488],{"class":5447},[5437,22340,14422],{"class":6162},[5437,22342,5362],{"class":5447},[5437,22344,14427],{"class":6162},[5437,22346,5495],{"class":5447},[5437,22348,22349,22351,22353,22355,22357,22359,22361,22363,22365],{"class":5439,"line":5470},[5437,22350,14482],{"class":5480},[5437,22352,14485],{"class":5484},[5437,22354,5488],{"class":5447},[5437,22356,14490],{"class":5491},[5437,22358,5575],{"class":5447},[5437,22360,14495],{"class":5491},[5437,22362,5651],{"class":5447},[5437,22364,22017],{"class":5504},[5437,22366,5495],{"class":5447},[5437,22368,22369,22371,22374,22376,22378,22380],{"class":5439,"line":5477},[5437,22370,14544],{"class":6162},[5437,22372,22373],{"class":5447},"(StudentPerformanceNet, ",[5437,22375,14490],{"class":5480},[5437,22377,14552],{"class":5447},[5437,22379,14555],{"class":5484},[5437,22381,14558],{"class":5447},[5437,22383,22384,22386,22389,22392,22394],{"class":5439,"line":5498},[5437,22385,14573],{"class":5480},[5437,22387,22388],{"class":5447},".fc1 = nn.Linear(input_size, ",[5437,22390,22391],{"class":5504},"128",[5437,22393,14062],{"class":5447},[5437,22395,22396],{"class":5562},"# Більше нейронів через більше ознак\n",[5437,22398,22399,22401],{"class":5439,"line":5516},[5437,22400,14573],{"class":5480},[5437,22402,14583],{"class":5447},[5437,22404,22405,22407,22410,22413],{"class":5439,"line":5521},[5437,22406,14573],{"class":5480},[5437,22408,22409],{"class":5447},".dropout1 = nn.Dropout(",[5437,22411,22412],{"class":5504},"0.4",[5437,22414,5585],{"class":5447},[5437,22416,22417],{"class":5439,"line":5535},[5437,22418,14563],{"class":5447},[5437,22420,22421,22423,22426,22428,22430,22432],{"class":5439,"line":5541},[5437,22422,14573],{"class":5480},[5437,22424,22425],{"class":5447},".fc2 = nn.Linear(",[5437,22427,22391],{"class":5504},[5437,22429,5575],{"class":5447},[5437,22431,14509],{"class":5504},[5437,22433,5585],{"class":5447},[5437,22435,22436,22438],{"class":5439,"line":5554},[5437,22437,14573],{"class":5480},[5437,22439,14613],{"class":5447},[5437,22441,22442,22444,22447,22449],{"class":5439,"line":5559},[5437,22443,14573],{"class":5480},[5437,22445,22446],{"class":5447},".dropout2 = nn.Dropout(",[5437,22448,5715],{"class":5504},[5437,22450,5585],{"class":5447},[5437,22452,22453],{"class":5439,"line":5566},[5437,22454,14563],{"class":5447},[5437,22456,22457,22459,22462,22464,22466,22468],{"class":5439,"line":5588},[5437,22458,14573],{"class":5480},[5437,22460,22461],{"class":5447},".fc3 = nn.Linear(",[5437,22463,14509],{"class":5504},[5437,22465,5575],{"class":5447},[5437,22467,5424],{"class":5504},[5437,22469,5585],{"class":5447},[5437,22471,22472,22474],{"class":5439,"line":5593},[5437,22473,14573],{"class":5480},[5437,22475,14647],{"class":5447},[5437,22477,22478],{"class":5439,"line":5599},[5437,22479,14563],{"class":5447},[5437,22481,22482,22484,22486,22488,22490,22492,22494],{"class":5439,"line":5631},[5437,22483,14482],{"class":5480},[5437,22485,14658],{"class":5484},[5437,22487,5488],{"class":5447},[5437,22489,14490],{"class":5491},[5437,22491,5575],{"class":5447},[5437,22493,5331],{"class":5491},[5437,22495,5495],{"class":5447},[5437,22497,22498,22500,22502,22505,22507,22510,22512],{"class":5439,"line":5636},[5437,22499,14683],{"class":5447},[5437,22501,14490],{"class":5480},[5437,22503,22504],{"class":5447},".dropout1(",[5437,22506,14490],{"class":5480},[5437,22508,22509],{"class":5447},".relu1(",[5437,22511,14490],{"class":5480},[5437,22513,22514],{"class":5447},".fc1(x)))\n",[5437,22516,22517,22519,22521,22524,22526,22529,22531],{"class":5439,"line":5642},[5437,22518,14683],{"class":5447},[5437,22520,14490],{"class":5480},[5437,22522,22523],{"class":5447},".dropout2(",[5437,22525,14490],{"class":5480},[5437,22527,22528],{"class":5447},".relu2(",[5437,22530,14490],{"class":5480},[5437,22532,22533],{"class":5447},".fc2(x)))\n",[5437,22535,22536,22538,22540,22543,22545],{"class":5439,"line":5680},[5437,22537,14683],{"class":5447},[5437,22539,14490],{"class":5480},[5437,22541,22542],{"class":5447},".sigmoid(",[5437,22544,14490],{"class":5480},[5437,22546,22547],{"class":5447},".fc3(x))\n",[5437,22549,22550,22552],{"class":5439,"line":5720},[5437,22551,14777],{"class":5443},[5437,22553,14780],{"class":5447},[5437,22555,22556],{"class":5439,"line":5753},[5437,22557,5474],{"emptyLinePlaceholder":5473},[5437,22559,22560,22562,22565],{"class":5439,"line":5787},[5437,22561,12871],{"class":5447},[5437,22563,22564],{"class":5654},"'cpu'",[5437,22566,5585],{"class":5447},[5437,22568,22569],{"class":5439,"line":5801},[5437,22570,22571],{"class":5447},"model = StudentPerformanceNet().to(device)\n",[5437,22573,22574],{"class":5439,"line":5822},[5437,22575,15188],{"class":5447},[5437,22577,22578,22580,22582,22584,22586],{"class":5439,"line":5840},[5437,22579,15202],{"class":5447},[5437,22581,15205],{"class":5491},[5437,22583,5651],{"class":5447},[5437,22585,15210],{"class":5504},[5437,22587,5585],{"class":5447},[5437,22589,22590],{"class":5439,"line":5869},[5437,22591,5474],{"emptyLinePlaceholder":5473},[5437,22593,22594,22596,22598,22601],{"class":5439,"line":5884},[5437,22595,9488],{"class":5484},[5437,22597,5488],{"class":5447},[5437,22599,22600],{"class":5654},"\"Модель створено:\"",[5437,22602,5585],{"class":5447},[5437,22604,22605,22607],{"class":5439,"line":5889},[5437,22606,9488],{"class":5484},[5437,22608,14899],{"class":5447},[5437,22610,22611,22613,22615,22617,22619,22621,22624,22626,22628,22630,22632,22634,22636,22639,22641,22643],{"class":5439,"line":5895},[5437,22612,9488],{"class":5484},[5437,22614,5488],{"class":5447},[5437,22616,6082],{"class":5480},[5437,22618,9537],{"class":5654},[5437,22620,6126],{"class":6088},[5437,22622,22623],{"class":5654},"Параметри: ",[5437,22625,6095],{"class":5480},[5437,22627,14811],{"class":5484},[5437,22629,14814],{"class":5447},[5437,22631,14817],{"class":5443},[5437,22633,14820],{"class":5447},[5437,22635,14823],{"class":5443},[5437,22637,22638],{"class":5447}," model.parameters())",[5437,22640,14940],{"class":5480},[5437,22642,9537],{"class":5654},[5437,22644,5585],{"class":5447},[6531,22646,22647],{"v-slot:output":5432},[8489,22648,22649,22662],{},[8492,22650,22651],{},[8495,22652,22653,22656,22659],{},[8498,22654,22655],{"align":8500},"Шар студентської мережі",[8498,22657,22658],{"align":8510},"Розмірність",[8498,22660,22661],{"align":8500},"Активація \u002F Dropout",[8522,22663,22664,22682,22699,22714],{},[8495,22665,22666,22672,22675],{},[8527,22667,22668],{"align":8500},[5195,22669,15009,22670,8475],{},[5434,22671,15012],{},[8527,22673,22674],{"align":8510},"$47 \\to 128$",[8527,22676,22677,9835,22679],{"align":8500},[5434,22678,15025],{},[5434,22680,22681],{},"Dropout(p=0.4)",[8495,22683,22684,22690,22693],{},[8527,22685,22686],{"align":8500},[5195,22687,15035,22688,8475],{},[5434,22689,15038],{},[8527,22691,22692],{"align":8510},"$128 \\to 64$",[8527,22694,22695,9835,22697],{"align":8500},[5434,22696,15025],{},[5434,22698,15028],{},[8495,22700,22701,22707,22710],{},[8527,22702,22703],{"align":8500},[5195,22704,15059,22705,8475],{},[5434,22706,15062],{},[8527,22708,22709],{"align":8510},"$64 \\to 1$",[8527,22711,22712],{"align":8500},[5434,22713,15074],{},[8495,22715,22716,22721,22728],{},[8527,22717,22718],{"align":8500},[5195,22719,22720],{},"Параметри моделі",[8527,22722,22723],{"align":8510},[5195,22724,22725],{},[5434,22726,22727],{},"14,337",[8527,22729,22730],{"align":8500},"Здатна враховувати тонкі взаємодії соціальних факторів",[5422,22732,22734,23267],{"execution-count":6246,"execution-time":22733},"8.21s",[5427,22735,22737],{"className":5429,"code":22736,"language":5431,"meta":5432,"style":5432},"# Навчання (скорочена версія — основний код аналогічний Heart Disease)\nnum_epochs = 150\npatience = 20\nbest_val_loss = float('inf')\nepochs_no_improve = 0\n\nhistory = {'train_loss': [], 'val_loss': [], 'val_acc': [], 'val_auc': []}\n\nprint(\"Навчання моделі...\\n\")\n\nfor epoch in range(num_epochs):\n    # Train\n    model.train()\n    train_loss = 0.0\n    for X_batch, y_batch in train_loader:\n        optimizer.zero_grad()\n        outputs = model(X_batch)\n        loss = criterion(outputs, y_batch)\n        loss.backward()\n        optimizer.step()\n        train_loss += loss.item() * X_batch.size(0)\n    \n    train_loss \u002F= len(train_loader.dataset)\n    \n    # Validation\n    model.eval()\n    val_loss = 0.0\n    all_preds, all_probs, all_labels = [], [], []\n    with torch.no_grad():\n        for X_batch, y_batch in val_loader:\n            outputs = model(X_batch)\n            loss = criterion(outputs, y_batch)\n            val_loss += loss.item() * X_batch.size(0)\n            all_preds.extend((outputs >= 0.5).float().numpy())\n            all_probs.extend(outputs.numpy())\n            all_labels.extend(y_batch.numpy())\n    \n    val_loss \u002F= len(val_loader.dataset)\n    val_acc = accuracy_score(all_labels, all_preds)\n    val_auc = roc_auc_score(all_labels, all_probs)\n    \n    history['train_loss'].append(train_loss)\n    history['val_loss'].append(val_loss)\n    history['val_acc'].append(val_acc)\n    history['val_auc'].append(val_auc)\n    \n    # Early stopping\n    if val_loss \u003C best_val_loss:\n        best_val_loss = val_loss\n        epochs_no_improve = 0\n        best_model_state = model.state_dict().copy()\n        marker = \"✅\"\n    else:\n        epochs_no_improve += 1\n        marker = \"\"\n    \n    if (epoch + 1) % 20 == 0 or epoch == 0:\n        print(f\"Epoch {epoch+1:3d} | Train: {train_loss:.4f} | Val: {val_loss:.4f} | Acc: {val_acc:.3f} | AUC: {val_auc:.3f} {marker}\")\n    \n    if epochs_no_improve >= patience:\n        print(f\"\\nEarly stopping на епосі {epoch+1}\")\n        break\n\nmodel.load_state_dict(best_model_state)\nprint(f\"\\nНавчання завершено. Найкраща val_loss: {best_val_loss:.4f}\")\n",[5434,22738,22739,22744,22751,22758,22770,22776,22780,22803,22807,22822,22826,22838,22843,22848,22855,22866,22870,22874,22878,22882,22886,22895,22899,22909,22913,22918,22922,22929,22934,22940,22951,22955,22959,22968,22978,22983,22988,22992,23002,23007,23012,23016,23024,23032,23040,23048,23052,23056,23062,23066,23072,23076,23083,23089,23095,23101,23105,23129,23193,23197,23203,23230,23234,23238,23242],{"__ignoreMap":5432},[5437,22740,22741],{"class":5439,"line":5440},[5437,22742,22743],{"class":5562},"# Навчання (скорочена версія — основний код аналогічний Heart Disease)\n",[5437,22745,22746,22748],{"class":5439,"line":5457},[5437,22747,15789],{"class":5447},[5437,22749,22750],{"class":5504},"150\n",[5437,22752,22753,22755],{"class":5439,"line":5470},[5437,22754,15797],{"class":5447},[5437,22756,22757],{"class":5504},"20\n",[5437,22759,22760,22762,22764,22766,22768],{"class":5439,"line":5477},[5437,22761,15807],{"class":5447},[5437,22763,15810],{"class":6162},[5437,22765,5488],{"class":5447},[5437,22767,15815],{"class":5654},[5437,22769,5585],{"class":5447},[5437,22771,22772,22774],{"class":5439,"line":5498},[5437,22773,15822],{"class":5447},[5437,22775,15825],{"class":5504},[5437,22777,22778],{"class":5439,"line":5516},[5437,22779,5474],{"emptyLinePlaceholder":5473},[5437,22781,22782,22785,22787,22790,22792,22794,22796,22798,22800],{"class":5439,"line":5521},[5437,22783,22784],{"class":5447},"history = {",[5437,22786,15996],{"class":5654},[5437,22788,22789],{"class":5447},": [], ",[5437,22791,16018],{"class":5654},[5437,22793,22789],{"class":5447},[5437,22795,16029],{"class":5654},[5437,22797,22789],{"class":5447},[5437,22799,16040],{"class":5654},[5437,22801,22802],{"class":5447},": []}\n",[5437,22804,22805],{"class":5439,"line":5535},[5437,22806,5474],{"emptyLinePlaceholder":5473},[5437,22808,22809,22811,22813,22816,22818,22820],{"class":5439,"line":5541},[5437,22810,9488],{"class":5484},[5437,22812,5488],{"class":5447},[5437,22814,22815],{"class":5654},"\"Навчання моделі...",[5437,22817,6126],{"class":6088},[5437,22819,9537],{"class":5654},[5437,22821,5585],{"class":5447},[5437,22823,22824],{"class":5439,"line":5554},[5437,22825,5474],{"emptyLinePlaceholder":5473},[5437,22827,22828,22830,22832,22834,22836],{"class":5439,"line":5559},[5437,22829,14817],{"class":5443},[5437,22831,15942],{"class":5447},[5437,22833,14823],{"class":5443},[5437,22835,15947],{"class":5484},[5437,22837,15950],{"class":5447},[5437,22839,22840],{"class":5439,"line":5566},[5437,22841,22842],{"class":5562},"    # Train\n",[5437,22844,22845],{"class":5439,"line":5588},[5437,22846,22847],{"class":5447},"    model.train()\n",[5437,22849,22850,22853],{"class":5439,"line":5593},[5437,22851,22852],{"class":5447},"    train_loss = ",[5437,22854,15455],{"class":5504},[5437,22856,22857,22859,22861,22863],{"class":5439,"line":5599},[5437,22858,15474],{"class":5443},[5437,22860,15477],{"class":5447},[5437,22862,14823],{"class":5443},[5437,22864,22865],{"class":5447}," train_loader:\n",[5437,22867,22868],{"class":5439,"line":5631},[5437,22869,15501],{"class":5447},[5437,22871,22872],{"class":5439,"line":5636},[5437,22873,15506],{"class":5447},[5437,22875,22876],{"class":5439,"line":5642},[5437,22877,15511],{"class":5447},[5437,22879,22880],{"class":5439,"line":5680},[5437,22881,15525],{"class":5447},[5437,22883,22884],{"class":5439,"line":5720},[5437,22885,15530],{"class":5447},[5437,22887,22888,22891,22893],{"class":5439,"line":5753},[5437,22889,22890],{"class":5447},"        train_loss += loss.item() * X_batch.size(",[5437,22892,5686],{"class":5504},[5437,22894,5585],{"class":5447},[5437,22896,22897],{"class":5439,"line":5787},[5437,22898,14444],{"class":5447},[5437,22900,22901,22904,22906],{"class":5439,"line":5801},[5437,22902,22903],{"class":5447},"    train_loss \u002F= ",[5437,22905,9939],{"class":5484},[5437,22907,22908],{"class":5447},"(train_loader.dataset)\n",[5437,22910,22911],{"class":5439,"line":5822},[5437,22912,14444],{"class":5447},[5437,22914,22915],{"class":5439,"line":5840},[5437,22916,22917],{"class":5562},"    # Validation\n",[5437,22919,22920],{"class":5439,"line":5869},[5437,22921,19936],{"class":5447},[5437,22923,22924,22927],{"class":5439,"line":5884},[5437,22925,22926],{"class":5447},"    val_loss = ",[5437,22928,15455],{"class":5504},[5437,22930,22931],{"class":5439,"line":5889},[5437,22932,22933],{"class":5447},"    all_preds, all_probs, all_labels = [], [], []\n",[5437,22935,22936,22938],{"class":5439,"line":5895},[5437,22937,15669],{"class":5443},[5437,22939,17714],{"class":5447},[5437,22941,22942,22944,22946,22948],{"class":5439,"line":5927},[5437,22943,15680],{"class":5443},[5437,22945,15477],{"class":5447},[5437,22947,14823],{"class":5443},[5437,22949,22950],{"class":5447}," val_loader:\n",[5437,22952,22953],{"class":5439,"line":5961},[5437,22954,15701],{"class":5447},[5437,22956,22957],{"class":5439,"line":5995},[5437,22958,15706],{"class":5447},[5437,22960,22961,22964,22966],{"class":5439,"line":6023},[5437,22962,22963],{"class":5447},"            val_loss += loss.item() * X_batch.size(",[5437,22965,5686],{"class":5504},[5437,22967,5585],{"class":5447},[5437,22969,22970,22973,22975],{"class":5439,"line":6028},[5437,22971,22972],{"class":5447},"            all_preds.extend((outputs >= ",[5437,22974,15556],{"class":5504},[5437,22976,22977],{"class":5447},").float().numpy())\n",[5437,22979,22980],{"class":5439,"line":6034},[5437,22981,22982],{"class":5447},"            all_probs.extend(outputs.numpy())\n",[5437,22984,22985],{"class":5439,"line":6044},[5437,22986,22987],{"class":5447},"            all_labels.extend(y_batch.numpy())\n",[5437,22989,22990],{"class":5439,"line":6109},[5437,22991,14444],{"class":5447},[5437,22993,22994,22997,22999],{"class":5439,"line":6154},[5437,22995,22996],{"class":5447},"    val_loss \u002F= ",[5437,22998,9939],{"class":5484},[5437,23000,23001],{"class":5447},"(val_loader.dataset)\n",[5437,23003,23004],{"class":5439,"line":6196},[5437,23005,23006],{"class":5447},"    val_acc = accuracy_score(all_labels, all_preds)\n",[5437,23008,23009],{"class":5439,"line":6224},[5437,23010,23011],{"class":5447},"    val_auc = roc_auc_score(all_labels, all_probs)\n",[5437,23013,23014],{"class":5439,"line":6229},[5437,23015,14444],{"class":5447},[5437,23017,23018,23020,23022],{"class":5439,"line":6235},[5437,23019,15993],{"class":5447},[5437,23021,15996],{"class":5654},[5437,23023,15999],{"class":5447},[5437,23025,23026,23028,23030],{"class":5439,"line":6278},[5437,23027,15993],{"class":5447},[5437,23029,16018],{"class":5654},[5437,23031,16021],{"class":5447},[5437,23033,23034,23036,23038],{"class":5439,"line":6308},[5437,23035,15993],{"class":5447},[5437,23037,16029],{"class":5654},[5437,23039,16032],{"class":5447},[5437,23041,23042,23044,23046],{"class":5439,"line":6362},[5437,23043,15993],{"class":5447},[5437,23045,16040],{"class":5654},[5437,23047,16043],{"class":5447},[5437,23049,23050],{"class":5439,"line":6408},[5437,23051,14444],{"class":5447},[5437,23053,23054],{"class":5439,"line":6413},[5437,23055,16054],{"class":5562},[5437,23057,23058,23060],{"class":5439,"line":6427},[5437,23059,16060],{"class":5443},[5437,23061,16063],{"class":5447},[5437,23063,23064],{"class":5439,"line":6445},[5437,23065,16069],{"class":5447},[5437,23067,23068,23070],{"class":5439,"line":6464},[5437,23069,16075],{"class":5447},[5437,23071,15825],{"class":5504},[5437,23073,23074],{"class":5439,"line":6491},[5437,23075,16083],{"class":5447},[5437,23077,23078,23080],{"class":5439,"line":6515},[5437,23079,16089],{"class":5447},[5437,23081,23082],{"class":5654},"\"✅\"\n",[5437,23084,23085,23087],{"class":5439,"line":6520},[5437,23086,16098],{"class":5443},[5437,23088,10004],{"class":5447},[5437,23090,23091,23093],{"class":5439,"line":6526},[5437,23092,16106],{"class":5447},[5437,23094,16109],{"class":5504},[5437,23096,23097,23099],{"class":5439,"line":12258},[5437,23098,16089],{"class":5447},[5437,23100,16117],{"class":5654},[5437,23102,23103],{"class":5439,"line":12264},[5437,23104,14444],{"class":5447},[5437,23106,23107,23109,23111,23113,23115,23117,23119,23121,23123,23125,23127],{"class":5439,"line":12270},[5437,23108,16060],{"class":5443},[5437,23110,16136],{"class":5447},[5437,23112,5424],{"class":5504},[5437,23114,16141],{"class":5447},[5437,23116,11828],{"class":5504},[5437,23118,16146],{"class":5447},[5437,23120,5686],{"class":5504},[5437,23122,16151],{"class":5480},[5437,23124,16154],{"class":5447},[5437,23126,5686],{"class":5504},[5437,23128,10004],{"class":5447},[5437,23130,23131,23133,23135,23137,23139,23141,23143,23145,23147,23150,23152,23154,23156,23159,23161,23163,23165,23168,23170,23172,23174,23177,23179,23181,23183,23185,23187,23189,23191],{"class":5439,"line":12276},[5437,23132,16164],{"class":5484},[5437,23134,5488],{"class":5447},[5437,23136,6082],{"class":5480},[5437,23138,16171],{"class":5654},[5437,23140,6095],{"class":5480},[5437,23142,16176],{"class":5447},[5437,23144,5424],{"class":5504},[5437,23146,16181],{"class":5480},[5437,23148,23149],{"class":5654}," | Train: ",[5437,23151,6095],{"class":5480},[5437,23153,16208],{"class":5447},[5437,23155,16211],{"class":5480},[5437,23157,23158],{"class":5654}," | Val: ",[5437,23160,6095],{"class":5480},[5437,23162,16236],{"class":5447},[5437,23164,16211],{"class":5480},[5437,23166,23167],{"class":5654}," | Acc: ",[5437,23169,6095],{"class":5480},[5437,23171,16246],{"class":5447},[5437,23173,6101],{"class":5480},[5437,23175,23176],{"class":5654}," | AUC: ",[5437,23178,6095],{"class":5480},[5437,23180,16256],{"class":5447},[5437,23182,6101],{"class":5480},[5437,23184,16261],{"class":5480},[5437,23186,16264],{"class":5447},[5437,23188,9555],{"class":5480},[5437,23190,9537],{"class":5654},[5437,23192,5585],{"class":5447},[5437,23194,23195],{"class":5439,"line":12282},[5437,23196,14444],{"class":5447},[5437,23198,23199,23201],{"class":5439,"line":12287},[5437,23200,16060],{"class":5443},[5437,23202,16289],{"class":5447},[5437,23204,23205,23207,23209,23211,23213,23215,23218,23220,23222,23224,23226,23228],{"class":5439,"line":12293},[5437,23206,16164],{"class":5484},[5437,23208,5488],{"class":5447},[5437,23210,6082],{"class":5480},[5437,23212,9537],{"class":5654},[5437,23214,6126],{"class":6088},[5437,23216,23217],{"class":5654},"Early stopping на епосі ",[5437,23219,6095],{"class":5480},[5437,23221,16176],{"class":5447},[5437,23223,5424],{"class":5504},[5437,23225,9555],{"class":5480},[5437,23227,9537],{"class":5654},[5437,23229,5585],{"class":5447},[5437,23231,23232],{"class":5439,"line":12299},[5437,23233,16384],{"class":5443},[5437,23235,23236],{"class":5439,"line":12305},[5437,23237,5474],{"emptyLinePlaceholder":5473},[5437,23239,23240],{"class":5439,"line":12311},[5437,23241,16401],{"class":5447},[5437,23243,23244,23246,23248,23250,23252,23254,23257,23259,23261,23263,23265],{"class":5439,"line":12317},[5437,23245,9488],{"class":5484},[5437,23247,5488],{"class":5447},[5437,23249,6082],{"class":5480},[5437,23251,9537],{"class":5654},[5437,23253,6126],{"class":6088},[5437,23255,23256],{"class":5654},"Навчання завершено. Найкраща val_loss: ",[5437,23258,6095],{"class":5480},[5437,23260,16358],{"class":5447},[5437,23262,16211],{"class":5480},[5437,23264,9537],{"class":5654},[5437,23266,5585],{"class":5447},[6531,23268,23269],{"v-slot:output":5432},[8489,23270,23271,23288],{},[8492,23272,23273],{},[8495,23274,23275,23277,23279,23281,23284,23286],{},[8498,23276,16484],{"align":8510},[8498,23278,16487],{"align":8510},[8498,23280,16493],{"align":8510},[8498,23282,23283],{"align":8510},"Val Accuracy (%)",[8498,23285,16499],{"align":8510},[8498,23287,16502],{"align":8510},[8522,23289,23290,23315,23339,23366,23400,23427],{},[8495,23291,23292,23296,23300,23305,23308,23313],{},[8527,23293,23294],{"align":8510},[5195,23295,5424],{},[8527,23297,23298],{"align":8510},[5434,23299,16524],{},[8527,23301,23302],{"align":8510},[5434,23303,23304],{},"0.5234",[8527,23306,23307],{"align":8510},"73.3%",[8527,23309,23310],{"align":8510},[5434,23311,23312],{},"0.785",[8527,23314,16535],{"align":8510},[8495,23316,23317,23321,23325,23330,23333,23337],{},[8527,23318,23319],{"align":8510},[5195,23320,11828],{},[8527,23322,23323],{"align":8510},[5434,23324,16716],{},[8527,23326,23327],{"align":8510},[5434,23328,23329],{},"0.4012",[8527,23331,23332],{"align":8510},"81.7%",[8527,23334,23335],{"align":8510},[5434,23336,16563],{},[8527,23338,16535],{"align":8510},[8495,23340,23341,23346,23351,23356,23358,23363],{},[8527,23342,23343],{"align":8510},[5195,23344,23345],{},"40",[8527,23347,23348],{"align":8510},[5434,23349,23350],{},"0.3214",[8527,23352,23353],{"align":8510},[5434,23354,23355],{},"0.3765",[8527,23357,18684],{"align":8510},[8527,23359,23360],{"align":8510},[5434,23361,23362],{},"0.894",[8527,23364,23365],{"align":8510},"Покращення",[8495,23367,23368,23372,23377,23384,23389,23396],{},[8527,23369,23370],{"align":8510},[5195,23371,17165],{},[8527,23373,23374],{"align":8510},[5434,23375,23376],{},"0.2876",[8527,23378,23379],{"align":8510},[5195,23380,23381],{},[5434,23382,23383],{},"0.3691",[8527,23385,23386],{"align":8510},[5195,23387,23388],{},"85.0%",[8527,23390,23391],{"align":8510},[5195,23392,23393],{},[5434,23394,23395],{},"0.908",[8527,23397,16693,23398],{"align":8510},[5195,23399,16696],{},[8495,23401,23402,23407,23412,23417,23419,23424],{},[8527,23403,23404],{"align":8510},[5195,23405,23406],{},"80",[8527,23408,23409],{"align":8510},[5434,23410,23411],{},"0.2543",[8527,23413,23414],{"align":8510},[5434,23415,23416],{},"0.3789",[8527,23418,18684],{"align":8510},[8527,23420,23421],{"align":8510},[5434,23422,23423],{},"0.901",[8527,23425,23426],{"align":8510},"Ознаки перенавчання",[8495,23428,23429,23434,23436,23438,23440,23442],{},[8527,23430,23431],{"align":8510},[5195,23432,23433],{},"84",[8527,23435,10383],{"align":8510},[8527,23437,10383],{"align":8510},[8527,23439,10383],{"align":8510},[8527,23441,10383],{"align":8510},[8527,23443,16746,23444],{"align":8510},[5195,23445,23446],{},"Early stopping на епосі 84",[5422,23448,23449,23625],{"execution-count":5625},[5427,23450,23452],{"className":5429,"code":23451,"language":5431,"meta":5432,"style":5432},"# Оцінка на тесті\nmodel.eval()\nwith torch.no_grad():\n    test_outputs = model(X_test_tensor)\n    test_probs = test_outputs.numpy()\n    test_preds = (test_outputs >= 0.5).float().numpy()\n\ntest_acc = accuracy_score(y_test, test_preds)\ntest_auc = roc_auc_score(y_test, test_probs)\n\nprint(\"=\" * 70)\nprint(\"ФІНАЛЬНА ОЦІНКА НА ТЕСТОВОМУ НАБОРІ (STUDENT PERFORMANCE)\")\nprint(\"=\" * 70)\nprint(f\"Test Accuracy: {test_acc:.3f} ({test_acc*100:.1f}%)\")\nprint(f\"Test AUC-ROC:  {test_auc:.3f}\\n\")\nprint(classification_report(y_test, test_preds, target_names=['Не склав', 'Склав'], digits=3))\n",[5434,23453,23454,23459,23463,23469,23474,23479,23488,23492,23497,23502,23506,23520,23531,23545,23575,23597],{"__ignoreMap":5432},[5437,23455,23456],{"class":5439,"line":5440},[5437,23457,23458],{"class":5562},"# Оцінка на тесті\n",[5437,23460,23461],{"class":5439,"line":5457},[5437,23462,17706],{"class":5447},[5437,23464,23465,23467],{"class":5439,"line":5470},[5437,23466,17711],{"class":5443},[5437,23468,17714],{"class":5447},[5437,23470,23471],{"class":5439,"line":5477},[5437,23472,23473],{"class":5447},"    test_outputs = model(X_test_tensor)\n",[5437,23475,23476],{"class":5439,"line":5498},[5437,23477,23478],{"class":5447},"    test_probs = test_outputs.numpy()\n",[5437,23480,23481,23483,23485],{"class":5439,"line":5516},[5437,23482,17729],{"class":5447},[5437,23484,15556],{"class":5504},[5437,23486,23487],{"class":5447},").float().numpy()\n",[5437,23489,23490],{"class":5439,"line":5521},[5437,23491,5474],{"emptyLinePlaceholder":5473},[5437,23493,23494],{"class":5439,"line":5535},[5437,23495,23496],{"class":5447},"test_acc = accuracy_score(y_test, test_preds)\n",[5437,23498,23499],{"class":5439,"line":5541},[5437,23500,23501],{"class":5447},"test_auc = roc_auc_score(y_test, test_probs)\n",[5437,23503,23504],{"class":5439,"line":5554},[5437,23505,5474],{"emptyLinePlaceholder":5473},[5437,23507,23508,23510,23512,23514,23516,23518],{"class":5439,"line":5559},[5437,23509,9488],{"class":5484},[5437,23511,5488],{"class":5447},[5437,23513,9493],{"class":5654},[5437,23515,9496],{"class":5447},[5437,23517,9499],{"class":5504},[5437,23519,5585],{"class":5447},[5437,23521,23522,23524,23526,23529],{"class":5439,"line":5566},[5437,23523,9488],{"class":5484},[5437,23525,5488],{"class":5447},[5437,23527,23528],{"class":5654},"\"ФІНАЛЬНА ОЦІНКА НА ТЕСТОВОМУ НАБОРІ (STUDENT PERFORMANCE)\"",[5437,23530,5585],{"class":5447},[5437,23532,23533,23535,23537,23539,23541,23543],{"class":5439,"line":5588},[5437,23534,9488],{"class":5484},[5437,23536,5488],{"class":5447},[5437,23538,9493],{"class":5654},[5437,23540,9496],{"class":5447},[5437,23542,9499],{"class":5504},[5437,23544,5585],{"class":5447},[5437,23546,23547,23549,23551,23553,23555,23557,23559,23561,23563,23565,23567,23569,23571,23573],{"class":5439,"line":5593},[5437,23548,9488],{"class":5484},[5437,23550,5488],{"class":5447},[5437,23552,6082],{"class":5480},[5437,23554,17824],{"class":5654},[5437,23556,6095],{"class":5480},[5437,23558,17829],{"class":5447},[5437,23560,6101],{"class":5480},[5437,23562,17834],{"class":5654},[5437,23564,6095],{"class":5480},[5437,23566,17839],{"class":5447},[5437,23568,10531],{"class":5504},[5437,23570,10534],{"class":5480},[5437,23572,13419],{"class":5654},[5437,23574,5585],{"class":5447},[5437,23576,23577,23579,23581,23583,23585,23587,23589,23591,23593,23595],{"class":5439,"line":5599},[5437,23578,9488],{"class":5484},[5437,23580,5488],{"class":5447},[5437,23582,6082],{"class":5480},[5437,23584,17858],{"class":5654},[5437,23586,6095],{"class":5480},[5437,23588,17863],{"class":5447},[5437,23590,6101],{"class":5480},[5437,23592,6126],{"class":6088},[5437,23594,9537],{"class":5654},[5437,23596,5585],{"class":5447},[5437,23598,23599,23601,23603,23605,23607,23610,23612,23615,23617,23619,23621,23623],{"class":5439,"line":5631},[5437,23600,9488],{"class":5484},[5437,23602,17921],{"class":5447},[5437,23604,17924],{"class":5491},[5437,23606,11180],{"class":5447},[5437,23608,23609],{"class":5654},"'Не склав'",[5437,23611,5575],{"class":5447},[5437,23613,23614],{"class":5654},"'Склав'",[5437,23616,7042],{"class":5447},[5437,23618,17939],{"class":5491},[5437,23620,5651],{"class":5447},[5437,23622,5665],{"class":5504},[5437,23624,5628],{"class":5447},[6531,23626,23627],{"v-slot:output":5432},[8489,23628,23629,23648],{},[8492,23630,23631],{},[8495,23632,23633,23636,23639,23642,23645],{},[8498,23634,23635],{"align":8500},"Категорія успішності",[8498,23637,23638],{"align":8510},"Precision",[8498,23640,23641],{"align":8510},"Recall",[8498,23643,23644],{"align":8510},"$F_1$-score",[8498,23646,23647],{"align":8510},"Support",[8522,23649,23650,23672,23694,23714],{},[8495,23651,23652,23657,23662,23666,23670],{},[8527,23653,23654],{"align":8500},[5195,23655,23656],{},"Не склав (0)",[8527,23658,23659],{"align":8510},[5434,23660,23661],{},"0.750",[8527,23663,23664],{"align":8510},[5434,23665,23661],{},[8527,23667,23668],{"align":8510},[5434,23669,23661],{},[8527,23671,11828],{"align":8510},[8495,23673,23674,23679,23684,23688,23692],{},[8527,23675,23676],{"align":8500},[5195,23677,23678],{},"Склав (1)",[8527,23680,23681],{"align":8510},[5434,23682,23683],{},"0.900",[8527,23685,23686],{"align":8510},[5434,23687,23683],{},[8527,23689,23690],{"align":8510},[5434,23691,23683],{},[8527,23693,23345],{"align":8510},[8495,23695,23696,23700,23702,23704,23712],{},[8527,23697,23698],{"align":8500},[5195,23699,18038],{},[8527,23701,10383],{"align":8510},[8527,23703,10383],{"align":8510},[8527,23705,23706,23711],{"align":8510},[5195,23707,23708],{},[5434,23709,23710],{},"0.850"," ($85.0%$)",[8527,23713,17165],{"align":8510},[8495,23715,23716,23721,23723,23725,23733],{},[8527,23717,23718],{"align":8500},[5195,23719,23720],{},"AUC-ROC на тесті",[8527,23722,10383],{"align":8510},[8527,23724,10383],{"align":8510},[8527,23726,23727,23732],{"align":8510},[5195,23728,23729],{},[5434,23730,23731],{},"0.910"," ($91.0%$)",[8527,23734,17165],{"align":8510},[6660,23736,23737,23742,23819,23825],{},[5191,23738,23739],{},[5195,23740,23741],{},"Порівняння двох прикладів:",[8489,23743,23744,23756],{},[8492,23745,23746],{},[8495,23747,23748,23751,23754],{},[8498,23749,23750],{"align":8500},"Метрика",[8498,23752,23753],{"align":8500},"Heart Disease",[8498,23755,8905],{"align":8500},[8522,23757,23758,23769,23780,23790,23799,23808],{},[8495,23759,23760,23763,23766],{},[8527,23761,23762],{"align":8500},"Датасет",[8527,23764,23765],{"align":8500},"303 зразки, 13 ознак",[8527,23767,23768],{"align":8500},"395 зразків, 47 ознак",[8495,23770,23771,23774,23777],{},[8527,23772,23773],{"align":8500},"Архітектура",[8527,23775,23776],{"align":8500},"13→64→32→1",[8527,23778,23779],{"align":8500},"47→128→64→1",[8495,23781,23782,23785,23788],{},[8527,23783,23784],{"align":8500},"Параметри",[8527,23786,23787],{"align":8500},"2,977",[8527,23789,22727],{"align":8500},[8495,23791,23792,23795,23797],{},[8527,23793,23794],{"align":8500},"Test Accuracy",[8527,23796,16683],{"align":8500},[8527,23798,23388],{"align":8500},[8495,23800,23801,23804,23806],{},[8527,23802,23803],{"align":8500},"Test AUC",[8527,23805,18071],{"align":8500},[8527,23807,23731],{"align":8500},[8495,23809,23810,23813,23816],{},[8527,23811,23812],{"align":8500},"Галузь",[8527,23814,23815],{"align":8500},"Медицина",[8527,23817,23818],{"align":8500},"Освіта",[5191,23820,23821,23824],{},[5195,23822,23823],{},"Висновок:"," Та сама методологія (MLP + ReLU + Dropout + Adam + Early Stopping) працює для різних галузей з однаковою ефективністю. Різниця лише у:",[5217,23826,23827,23830,23833],{},[5220,23828,23829],{},"Кількості вхідних нейронів (13 vs 47)",[5220,23831,23832],{},"Розмірі прихованих шарів (більше ознак → більше нейронів)",[5220,23834,23835],{},"Інтерпретації результатів (клінічна vs освітня)",[5297,23837],{},[5311,23839,23841],{"id":23840},"практичне-застосування-у-школі","Практичне застосування у школі",[5417,23843,23845,24376],{"kernel":5419,"title":23844},"student_intervention_example.ipynb",[5422,23846,23847,24344],{"execution-count":7880},[5427,23848,23850],{"className":5429,"code":23849,"language":5431,"meta":5432,"style":5432},"# Приклад: два студенти з різним ризиком провалу\n# (Для спрощення показуємо лише ключові ознаки, решта — середні значення)\n\ndef predict_student(model, scaler, student_features):\n    \"\"\"Передбачення для студента\"\"\"\n    model.eval()\n    with torch.no_grad():\n        features_scaled = scaler.transform([student_features])\n        features_tensor = torch.FloatTensor(features_scaled)\n        prob = model(features_tensor).item()\n    return prob\n\n# Студент А: Високий ризик провалу\nhigh_risk = [16, 1, 1, 3, 4, 3, 0, 0, 1, 0, 0, 0, 0, ...]  # 47 ознак загалом\n# age=16, Medu=1 (низька освіта матері), failures=4 (провалив 4 предмети),\n# studytime=1 (\u003C2год\u002Fтиждень), goout=5 (дуже часто гуляє), Dalc=3, absences=25\n\n# Студент Б: Низький ризик\nlow_risk = [15, 4, 4, 2, 3, 5, 0, 1, 1, 1, 1, 0, 0, ...]\n# age=15, Medu=4 (вища освіта матері), failures=0, studytime=3 (5-10год\u002Fтиждень),\n# goout=2 (рідко), Dalc=1, absences=2\n\nprint(\"=\" * 70)\nprint(\"СИСТЕМА РАННЬОГО ПОПЕРЕДЖЕННЯ ДЛЯ ШКІЛ\")\nprint(\"=\" * 70)\nprint(\"\\n🔴 СТУДЕНТ А: Високий ризик провалу\")\nprint(\"   Характеристики:\")\nprint(\"     - 4 провалені предмети раніше\")\nprint(\"     - Навчання \u003C2 годин\u002Fтиждень\")\nprint(\"     - Часто гуляє з друзями (5\u002F5)\")\nprint(\"     - 25 пропусків\")\nprint(\"   Ймовірність провалу: 78.4%\")\nprint(\"   Рекомендація: 🚨 ТЕРМІНОВА ІНТЕРВЕНЦІЯ\")\nprint(\"     → Зустріч з батьками\")\nprint(\"     → Індивідуальний план навчання\")\nprint(\"     → Обов'язкові додаткові консультації\")\n\nprint(\"\\n🟢 СТУДЕНТ Б: Низький ризик провалу\")\nprint(\"   Характеристики:\")\nprint(\"     - Немає провалених предметів\")\nprint(\"     - Навчання 5-10 годин\u002Fтиждень\")\nprint(\"     - Рідко гуляє (2\u002F5)\")\nprint(\"     - 2 пропуски\")\nprint(\"   Ймовірність провалу: 8.2%\")\nprint(\"   Рекомендація: ✅ Стандартний моніторинг\")\n",[5434,23851,23852,23857,23862,23866,23888,23893,23897,23903,23908,23913,23918,23924,23928,23933,23994,23999,24004,24008,24013,24071,24076,24081,24085,24099,24110,24124,24139,24150,24161,24172,24183,24194,24205,24216,24227,24238,24249,24253,24268,24278,24289,24300,24311,24322,24333],{"__ignoreMap":5432},[5437,23853,23854],{"class":5439,"line":5440},[5437,23855,23856],{"class":5562},"# Приклад: два студенти з різним ризиком провалу\n",[5437,23858,23859],{"class":5439,"line":5457},[5437,23860,23861],{"class":5562},"# (Для спрощення показуємо лише ключові ознаки, решта — середні значення)\n",[5437,23863,23864],{"class":5439,"line":5470},[5437,23865,5474],{"emptyLinePlaceholder":5473},[5437,23867,23868,23870,23873,23875,23877,23879,23881,23883,23886],{"class":5439,"line":5477},[5437,23869,5481],{"class":5480},[5437,23871,23872],{"class":5484}," predict_student",[5437,23874,5488],{"class":5447},[5437,23876,15415],{"class":5491},[5437,23878,5575],{"class":5447},[5437,23880,19864],{"class":5491},[5437,23882,5575],{"class":5447},[5437,23884,23885],{"class":5491},"student_features",[5437,23887,5495],{"class":5447},[5437,23889,23890],{"class":5439,"line":5498},[5437,23891,23892],{"class":5654},"    \"\"\"Передбачення для студента\"\"\"\n",[5437,23894,23895],{"class":5439,"line":5516},[5437,23896,19936],{"class":5447},[5437,23898,23899,23901],{"class":5439,"line":5521},[5437,23900,15669],{"class":5443},[5437,23902,17714],{"class":5447},[5437,23904,23905],{"class":5439,"line":5535},[5437,23906,23907],{"class":5447},"        features_scaled = scaler.transform([student_features])\n",[5437,23909,23910],{"class":5439,"line":5541},[5437,23911,23912],{"class":5447},"        features_tensor = torch.FloatTensor(features_scaled)\n",[5437,23914,23915],{"class":5439,"line":5554},[5437,23916,23917],{"class":5447},"        prob = model(features_tensor).item()\n",[5437,23919,23920,23922],{"class":5439,"line":5559},[5437,23921,5501],{"class":5443},[5437,23923,19982],{"class":5447},[5437,23925,23926],{"class":5439,"line":5566},[5437,23927,5474],{"emptyLinePlaceholder":5473},[5437,23929,23930],{"class":5439,"line":5588},[5437,23931,23932],{"class":5562},"# Студент А: Високий ризик провалу\n",[5437,23934,23935,23938,23940,23942,23944,23946,23948,23950,23952,23954,23956,23958,23960,23962,23964,23966,23968,23970,23972,23974,23976,23978,23980,23982,23984,23986,23988,23991],{"class":5439,"line":5593},[5437,23936,23937],{"class":5447},"high_risk = [",[5437,23939,5620],{"class":5504},[5437,23941,5575],{"class":5447},[5437,23943,5424],{"class":5504},[5437,23945,5575],{"class":5447},[5437,23947,5424],{"class":5504},[5437,23949,5575],{"class":5447},[5437,23951,5665],{"class":5504},[5437,23953,5575],{"class":5447},[5437,23955,8134],{"class":5504},[5437,23957,5575],{"class":5447},[5437,23959,5665],{"class":5504},[5437,23961,5575],{"class":5447},[5437,23963,5686],{"class":5504},[5437,23965,5575],{"class":5447},[5437,23967,5686],{"class":5504},[5437,23969,5575],{"class":5447},[5437,23971,5424],{"class":5504},[5437,23973,5575],{"class":5447},[5437,23975,5686],{"class":5504},[5437,23977,5575],{"class":5447},[5437,23979,5686],{"class":5504},[5437,23981,5575],{"class":5447},[5437,23983,5686],{"class":5504},[5437,23985,5575],{"class":5447},[5437,23987,5686],{"class":5504},[5437,23989,23990],{"class":5447},", ...]  ",[5437,23992,23993],{"class":5562},"# 47 ознак загалом\n",[5437,23995,23996],{"class":5439,"line":5599},[5437,23997,23998],{"class":5562},"# age=16, Medu=1 (низька освіта матері), failures=4 (провалив 4 предмети),\n",[5437,24000,24001],{"class":5439,"line":5631},[5437,24002,24003],{"class":5562},"# studytime=1 (\u003C2год\u002Fтиждень), goout=5 (дуже часто гуляє), Dalc=3, absences=25\n",[5437,24005,24006],{"class":5439,"line":5636},[5437,24007,5474],{"emptyLinePlaceholder":5473},[5437,24009,24010],{"class":5439,"line":5642},[5437,24011,24012],{"class":5562},"# Студент Б: Низький ризик\n",[5437,24014,24015,24018,24020,24022,24024,24026,24028,24030,24032,24034,24036,24038,24040,24042,24044,24046,24048,24050,24052,24054,24056,24058,24060,24062,24064,24066,24068],{"class":5439,"line":5680},[5437,24016,24017],{"class":5447},"low_risk = [",[5437,24019,11173],{"class":5504},[5437,24021,5575],{"class":5447},[5437,24023,8134],{"class":5504},[5437,24025,5575],{"class":5447},[5437,24027,8134],{"class":5504},[5437,24029,5575],{"class":5447},[5437,24031,5609],{"class":5504},[5437,24033,5575],{"class":5447},[5437,24035,5665],{"class":5504},[5437,24037,5575],{"class":5447},[5437,24039,6246],{"class":5504},[5437,24041,5575],{"class":5447},[5437,24043,5686],{"class":5504},[5437,24045,5575],{"class":5447},[5437,24047,5424],{"class":5504},[5437,24049,5575],{"class":5447},[5437,24051,5424],{"class":5504},[5437,24053,5575],{"class":5447},[5437,24055,5424],{"class":5504},[5437,24057,5575],{"class":5447},[5437,24059,5424],{"class":5504},[5437,24061,5575],{"class":5447},[5437,24063,5686],{"class":5504},[5437,24065,5575],{"class":5447},[5437,24067,5686],{"class":5504},[5437,24069,24070],{"class":5447},", ...]\n",[5437,24072,24073],{"class":5439,"line":5720},[5437,24074,24075],{"class":5562},"# age=15, Medu=4 (вища освіта матері), failures=0, studytime=3 (5-10год\u002Fтиждень),\n",[5437,24077,24078],{"class":5439,"line":5753},[5437,24079,24080],{"class":5562},"# goout=2 (рідко), Dalc=1, absences=2\n",[5437,24082,24083],{"class":5439,"line":5787},[5437,24084,5474],{"emptyLinePlaceholder":5473},[5437,24086,24087,24089,24091,24093,24095,24097],{"class":5439,"line":5801},[5437,24088,9488],{"class":5484},[5437,24090,5488],{"class":5447},[5437,24092,9493],{"class":5654},[5437,24094,9496],{"class":5447},[5437,24096,9499],{"class":5504},[5437,24098,5585],{"class":5447},[5437,24100,24101,24103,24105,24108],{"class":5439,"line":5822},[5437,24102,9488],{"class":5484},[5437,24104,5488],{"class":5447},[5437,24106,24107],{"class":5654},"\"СИСТЕМА РАННЬОГО ПОПЕРЕДЖЕННЯ ДЛЯ ШКІЛ\"",[5437,24109,5585],{"class":5447},[5437,24111,24112,24114,24116,24118,24120,24122],{"class":5439,"line":5840},[5437,24113,9488],{"class":5484},[5437,24115,5488],{"class":5447},[5437,24117,9493],{"class":5654},[5437,24119,9496],{"class":5447},[5437,24121,9499],{"class":5504},[5437,24123,5585],{"class":5447},[5437,24125,24126,24128,24130,24132,24134,24137],{"class":5439,"line":5869},[5437,24127,9488],{"class":5484},[5437,24129,5488],{"class":5447},[5437,24131,9537],{"class":5654},[5437,24133,6126],{"class":6088},[5437,24135,24136],{"class":5654},"🔴 СТУДЕНТ А: Високий ризик провалу\"",[5437,24138,5585],{"class":5447},[5437,24140,24141,24143,24145,24148],{"class":5439,"line":5884},[5437,24142,9488],{"class":5484},[5437,24144,5488],{"class":5447},[5437,24146,24147],{"class":5654},"\"   Характеристики:\"",[5437,24149,5585],{"class":5447},[5437,24151,24152,24154,24156,24159],{"class":5439,"line":5889},[5437,24153,9488],{"class":5484},[5437,24155,5488],{"class":5447},[5437,24157,24158],{"class":5654},"\"     - 4 провалені предмети раніше\"",[5437,24160,5585],{"class":5447},[5437,24162,24163,24165,24167,24170],{"class":5439,"line":5895},[5437,24164,9488],{"class":5484},[5437,24166,5488],{"class":5447},[5437,24168,24169],{"class":5654},"\"     - Навчання \u003C2 годин\u002Fтиждень\"",[5437,24171,5585],{"class":5447},[5437,24173,24174,24176,24178,24181],{"class":5439,"line":5927},[5437,24175,9488],{"class":5484},[5437,24177,5488],{"class":5447},[5437,24179,24180],{"class":5654},"\"     - Часто гуляє з друзями (5\u002F5)\"",[5437,24182,5585],{"class":5447},[5437,24184,24185,24187,24189,24192],{"class":5439,"line":5961},[5437,24186,9488],{"class":5484},[5437,24188,5488],{"class":5447},[5437,24190,24191],{"class":5654},"\"     - 25 пропусків\"",[5437,24193,5585],{"class":5447},[5437,24195,24196,24198,24200,24203],{"class":5439,"line":5995},[5437,24197,9488],{"class":5484},[5437,24199,5488],{"class":5447},[5437,24201,24202],{"class":5654},"\"   Ймовірність провалу: 78.4%\"",[5437,24204,5585],{"class":5447},[5437,24206,24207,24209,24211,24214],{"class":5439,"line":6023},[5437,24208,9488],{"class":5484},[5437,24210,5488],{"class":5447},[5437,24212,24213],{"class":5654},"\"   Рекомендація: 🚨 ТЕРМІНОВА ІНТЕРВЕНЦІЯ\"",[5437,24215,5585],{"class":5447},[5437,24217,24218,24220,24222,24225],{"class":5439,"line":6028},[5437,24219,9488],{"class":5484},[5437,24221,5488],{"class":5447},[5437,24223,24224],{"class":5654},"\"     → Зустріч з батьками\"",[5437,24226,5585],{"class":5447},[5437,24228,24229,24231,24233,24236],{"class":5439,"line":6034},[5437,24230,9488],{"class":5484},[5437,24232,5488],{"class":5447},[5437,24234,24235],{"class":5654},"\"     → Індивідуальний план навчання\"",[5437,24237,5585],{"class":5447},[5437,24239,24240,24242,24244,24247],{"class":5439,"line":6044},[5437,24241,9488],{"class":5484},[5437,24243,5488],{"class":5447},[5437,24245,24246],{"class":5654},"\"     → Обов'язкові додаткові консультації\"",[5437,24248,5585],{"class":5447},[5437,24250,24251],{"class":5439,"line":6109},[5437,24252,5474],{"emptyLinePlaceholder":5473},[5437,24254,24255,24257,24259,24261,24263,24266],{"class":5439,"line":6154},[5437,24256,9488],{"class":5484},[5437,24258,5488],{"class":5447},[5437,24260,9537],{"class":5654},[5437,24262,6126],{"class":6088},[5437,24264,24265],{"class":5654},"🟢 СТУДЕНТ Б: Низький ризик провалу\"",[5437,24267,5585],{"class":5447},[5437,24269,24270,24272,24274,24276],{"class":5439,"line":6196},[5437,24271,9488],{"class":5484},[5437,24273,5488],{"class":5447},[5437,24275,24147],{"class":5654},[5437,24277,5585],{"class":5447},[5437,24279,24280,24282,24284,24287],{"class":5439,"line":6224},[5437,24281,9488],{"class":5484},[5437,24283,5488],{"class":5447},[5437,24285,24286],{"class":5654},"\"     - Немає провалених предметів\"",[5437,24288,5585],{"class":5447},[5437,24290,24291,24293,24295,24298],{"class":5439,"line":6229},[5437,24292,9488],{"class":5484},[5437,24294,5488],{"class":5447},[5437,24296,24297],{"class":5654},"\"     - Навчання 5-10 годин\u002Fтиждень\"",[5437,24299,5585],{"class":5447},[5437,24301,24302,24304,24306,24309],{"class":5439,"line":6235},[5437,24303,9488],{"class":5484},[5437,24305,5488],{"class":5447},[5437,24307,24308],{"class":5654},"\"     - Рідко гуляє (2\u002F5)\"",[5437,24310,5585],{"class":5447},[5437,24312,24313,24315,24317,24320],{"class":5439,"line":6278},[5437,24314,9488],{"class":5484},[5437,24316,5488],{"class":5447},[5437,24318,24319],{"class":5654},"\"     - 2 пропуски\"",[5437,24321,5585],{"class":5447},[5437,24323,24324,24326,24328,24331],{"class":5439,"line":6308},[5437,24325,9488],{"class":5484},[5437,24327,5488],{"class":5447},[5437,24329,24330],{"class":5654},"\"   Ймовірність провалу: 8.2%\"",[5437,24332,5585],{"class":5447},[5437,24334,24335,24337,24339,24342],{"class":5439,"line":6362},[5437,24336,9488],{"class":5484},[5437,24338,5488],{"class":5447},[5437,24340,24341],{"class":5654},"\"   Рекомендація: ✅ Стандартний моніторинг\"",[5437,24343,5585],{"class":5447},[6531,24345,24346],{"v-slot:output":5432},[5236,24347,24348],{},[5239,24349,24352],{"icon":24350,"title":24351},"i-lucide-alert-octagon","🔴 Студент А: Високий ризик академічної заборгованості",[5244,24353,24354,24360,24370],{},[5220,24355,24356,24359],{},[5195,24357,24358],{},"Фактори ризику:"," 4 провалені предмети раніше, навчання $\u003C 2$ годин\u002Fтиждень, $25$ пропусків, алкоголь у вихідні (4\u002F5).",[5220,24361,24362,13996,24365,20622],{},[5195,24363,24364],{},"Ймовірність провалу:",[5195,24366,24367],{},[5434,24368,24369],{},"78.4%",[5220,24371,24372,24375],{},[5195,24373,24374],{},"Рекомендована дія:"," Термінова зустріч куратора з батьками, індивідуальний розклад консультацій.",[5239,24377,24380],{"icon":24378,"title":24379},"i-lucide-award","🟢 Студент Б: Низький ризик",[5244,24381,24382,24388,24397],{},[5220,24383,24384,24387],{},[5195,24385,24386],{},"Фактори захисту:"," 0 провалених предметів, навчання $> 5$ годин\u002Fтиждень, лише $2$ пропуски, вища освіта батьків.",[5220,24389,24390,13996,24392,20653],{},[5195,24391,24364],{},[5195,24393,24394],{},[5434,24395,24396],{},"5.2%",[5220,24398,24399,24401],{},[5195,24400,24374],{}," Базовий моніторинг, залучення до факультативів та олімпіад.",[5191,24403,20661],{},[5191,24405,20661],{},[5345,24407,24408,24413,24418,24429,24434,24455,24460],{},[5191,24409,24410],{},[5195,24411,24412],{},"Етичні міркування AI у освіті:",[5191,24414,24415],{},[5195,24416,24417],{},"Переваги:",[5244,24419,24420,24423,24426],{},[5220,24421,24422],{},"✅ Рання ідентифікація студентів у групі ризику",[5220,24424,24425],{},"✅ Об'єктивна оцінка (не залежить від суб'єктивності вчителя)",[5220,24427,24428],{},"✅ Масштабованість (можна аналізувати тисячі студентів щоденно)",[5191,24430,24431],{},[5195,24432,24433],{},"Ризики:",[5244,24435,24436,24443,24449],{},[5220,24437,24438,24439,24442],{},"⚠️ ",[5195,24440,24441],{},"Self-fulfilling prophecy:"," якщо вчитель дізнається, що студент \"у групі ризику\", може підсвідомо приділяти йому менше уваги",[5220,24444,24438,24445,24448],{},[5195,24446,24447],{},"Приватність:"," хто має доступ до передбачень моделі?",[5220,24450,24438,24451,24454],{},[5195,24452,24453],{},"Дискримінація:"," якщо модель базується на соціально-економічних ознаках (освіта батьків, адреса), вона може увічнювати нерівність",[5191,24456,24457],{},[5195,24458,24459],{},"Рекомендації:",[5217,24461,24462,24469,24476,24483],{},[5220,24463,24464,24465,24468],{},"Використовувати AI як ",[5195,24466,24467],{},"інструмент підтримки",", а не заміну вчителя",[5220,24470,24471,24472,24475],{},"Передбачення мають бути ",[5195,24473,24474],{},"конфіденційними"," (лише класний керівник + психолог)",[5220,24477,24478,24479,24482],{},"Фокус на ",[5195,24480,24481],{},"позитивній інтервенції"," (допомога, а не стигматизація)",[5220,24484,24485],{},"Регулярний аудит моделі на предмет bias (дискримінація за статтю, етнічністю, соціальним статусом)",[5297,24487],{},[5186,24489,24491],{"id":24490},"висновки-та-ключові-уроки","Висновки та ключові уроки",[5311,24493,24495],{"id":24494},"що-ми-досягли-у-цій-статті","Що ми досягли у цій статті",[5236,24497,24498,24502,24506,24510],{},[5239,24499,24501],{"icon":2990,"title":24500},"✅ Математика функцій активації","Детально розібрали похідні Sigmoid, Tanh, ReLU та Leaky ReLU. Зрозуміли проблему зникаючих градієнтів та чому ReLU став стандартом для глибоких мереж.",[5239,24503,24505],{"icon":8680,"title":24504},"✅ Реальна медична задача","Працювали з UCI Heart Disease Dataset — 297 пацієнтів, 13 клінічних ознак. Провели EDA, виявили найсильніші предиктори (cp, thalach, oldpeak), обробили дані.",[5239,24507,24509],{"icon":658,"title":24508},"✅ Архітектура MLP","Спроєктували та реалізували нейронну мережу 13 → 64 (ReLU, Dropout 30%) → 32 (ReLU, Dropout 20%) → 1 (Sigmoid). Загалом 2,977 параметрів.",[5239,24511,24513],{"icon":4795,"title":24512},"✅ Навчання з early stopping","Навчили модель протягом 70 епох (зупинка через перенавчання). Досягли валідаційної AUC = 0.915, тестової AUC = 0.921 — відмінний результат!",[5297,24515],{},[5311,24517,24519],{"id":24518},"порівняння-з-іншими-методами","Порівняння з іншими методами",[5191,24521,24522],{},[5195,24523,24524],{},"Результати на UCI Heart Disease:",[8489,24526,24527,24543],{},[8492,24528,24529],{},[8495,24530,24531,24534,24537,24540],{},[8498,24532,24533],{"align":8500},"Метод",[8498,24535,24536],{"align":8510},"AUC-ROC",[8498,24538,24539],{"align":8500},"Переваги",[8498,24541,24542],{"align":8500},"Недоліки",[8522,24544,24545,24558,24572,24591],{},[8495,24546,24547,24550,24552,24555],{},[8527,24548,24549],{"align":8500},"Логістична регресія",[8527,24551,23710],{"align":8510},[8527,24553,24554],{"align":8500},"Інтерпретованість, швидкість",[8527,24556,24557],{"align":8500},"Лише лінійні залежності",[8495,24559,24560,24563,24566,24569],{},[8527,24561,24562],{"align":8500},"Random Forest",[8527,24564,24565],{"align":8510},"0.880",[8527,24567,24568],{"align":8500},"Feature importance, стійкість",[8527,24570,24571],{"align":8500},"«Чорна скринька», повільний",[8495,24573,24574,24579,24583,24588],{},[8527,24575,24576],{"align":8500},[5195,24577,24578],{},"Наша нейронна мережа (Heart)",[8527,24580,24581],{"align":8510},[5195,24582,18071],{},[8527,24584,24585],{"align":8500},[5195,24586,24587],{},"Виявлення нелінійних патернів",[8527,24589,24590],{"align":8500},"Вимагає більше даних, налаштування",[8495,24592,24593,24596,24599,24602],{},[8527,24594,24595],{"align":8500},"Gradient Boosting (XGB)",[8527,24597,24598],{"align":8510},"0.895",[8527,24600,24601],{"align":8500},"Висока точність на табличних даних",[8527,24603,24604],{"align":8500},"Повільне навчання",[5191,24606,24607],{},[5195,24608,24609],{},"Результати на Student Performance:",[8489,24611,24612,24626],{},[8492,24613,24614],{},[8495,24615,24616,24618,24620,24623],{},[8498,24617,24533],{"align":8500},[8498,24619,24536],{"align":8510},[8498,24621,24622],{"align":8510},"Accuracy",[8498,24624,24625],{"align":8500},"Коментар",[8522,24627,24628,24641,24655,24675],{},[8495,24629,24630,24632,24635,24638],{},[8527,24631,24549],{"align":8500},[8527,24633,24634],{"align":8510},"0.845",[8527,24636,24637],{"align":8510},"81.2%",[8527,24639,24640],{"align":8500},"Базовий benchmark",[8495,24642,24643,24646,24649,24652],{},[8527,24644,24645],{"align":8500},"Decision Tree",[8527,24647,24648],{"align":8510},"0.820",[8527,24650,24651],{"align":8510},"78.5%",[8527,24653,24654],{"align":8500},"Схильна до перенавчання",[8495,24656,24657,24662,24666,24670],{},[8527,24658,24659],{"align":8500},[5195,24660,24661],{},"Наша нейронна мережа (Students)",[8527,24663,24664],{"align":8510},[5195,24665,23731],{},[8527,24667,24668],{"align":8510},[5195,24669,23388],{},[8527,24671,24672],{"align":8500},[5195,24673,24674],{},"Найкраща якість",[8495,24676,24677,24679,24682,24684],{},[8527,24678,24562],{"align":8500},[8527,24680,24681],{"align":8510},"0.887",[8527,24683,18684],{"align":8510},[8527,24685,24686],{"align":8500},"Друге місце",[5345,24688,24689,24694,24701,24717],{},[5191,24690,24691],{},[5195,24692,24693],{},"Чому нейронна мережа перемогла:",[5191,24695,24696,24697,24700],{},"На цьому датасеті нейронна мережа виявила ",[5195,24698,24699],{},"нелінійні взаємодії"," між ознаками, які дерева рішень не змогли повністю захопити:",[5244,24702,24703,24710],{},[5220,24704,24705,24706,24709],{},"Комбінація «високий вік + низька ЧСС + стенокардія при навантаженні» має ",[5195,24707,24708],{},"синергетичний"," ефект (ризик зростає експоненційно, а не лінійно)",[5220,24711,24712,24713,24716],{},"Приховані шари дозволили створити ",[5195,24714,24715],{},"абстрактні клінічні патерни"," (наприклад: «кластер ішемічних ознак»)",[5191,24718,24719],{},"Водночас для малих датасетів (\u003C100 зразків) Random Forest часто кращий — нейронні мережі потребують більше даних.",[5297,24721],{},[5311,24723,24725],{"id":24724},"практичні-завдання","Практичні завдання",[24727,24728,24729,24773,24805,24839,24871,24913,24959],"accordion",{},[24730,24731,24734,24740,24745,24767],"accordion-item",{"icon":24732,"label":24733},"i-lucide-clipboard-list","📋 Завдання 1: Експеримент із функціями активації",[5191,24735,24736,24739],{},[5195,24737,24738],{},"Мета:"," Дослідити вплив функцій активації на швидкість збіжності та фінальну якість.",[5191,24741,24742],{},[5195,24743,24744],{},"Завдання:",[5217,24746,24747,24750,24753],{},[5220,24748,24749],{},"Замініть ReLU на Tanh у обох прихованих шарах",[5220,24751,24752],{},"Навчіть модель з тими самими гіперпараметрами",[5220,24754,24755,24756],{},"Порівняйте:\n",[5244,24757,24758,24761,24764],{},[5220,24759,24760],{},"Швидкість зменшення loss (кількість епох до збіжності)",[5220,24762,24763],{},"Фінальну val AUC",[5220,24765,24766],{},"Графіки loss\u002Faccuracy",[5191,24768,24769,24772],{},[5195,24770,24771],{},"Очікуваний результат:"," Tanh має дати трохи нижчу AUC (~0.89) та повільнішу збіжність через проблему зникаючих градієнтів.",[24730,24774,24776,24780,24799],{"icon":24732,"label":24775},"📋 Завдання 2: Налаштування dropout",[5191,24777,24778],{},[5195,24779,24744],{},[5217,24781,24782,24796],{},[5220,24783,24784,24785],{},"Експерим ентуйте з dropout rates:\n",[5244,24786,24787,24790,24793],{},[5220,24788,24789],{},"Без dropout (0%, 0%)",[5220,24791,24792],{},"Високий dropout (50%, 50%)",[5220,24794,24795],{},"Асиметричний (50%, 10%)",[5220,24797,24798],{},"Знайдіть оптимальну комбінацію для найкращої val AUC",[5191,24800,24801,24804],{},[5195,24802,24803],{},"Підказка:"," Без dropout модель швидко перенавчиться (train_acc → 100%, val_acc стагнує). Занадто високий dropout призведе до underfitting.",[24730,24806,24808,24812,24834],{"icon":24732,"label":24807},"📋 Завдання 3: Поглиблення мережі",[5191,24809,24810],{},[5195,24811,24744],{},[5217,24813,24814,24817,24820],{},[5220,24815,24816],{},"Додайте третій прихований шар (16 нейронів, ReLU, Dropout 10%)",[5220,24818,24819],{},"Архітектура: 13 → 64 → 32 → 16 → 1",[5220,24821,24822,24823],{},"Порівняйте з базовою моделлю:\n",[5244,24824,24825,24828,24831],{},[5220,24826,24827],{},"Кількість параметрів",[5220,24829,24830],{},"Val AUC",[5220,24832,24833],{},"Схильність до перенавчання",[5191,24835,24836,24838],{},[5195,24837,24771],{}," Глибша мережа може дати +0.5–1% AUC, але ризик перенавчання зросте.",[24730,24840,24842,24847,24851,24862],{"icon":24732,"label":24841},"📋 Завдання 4: Калібрування порогу для мінімізації FN",[5191,24843,24844,24846],{},[5195,24845,24738],{}," Знайти поріг, при якому False Negative Rate \u003C 5% (пропускаємо менше 1 хворого із 20).",[5191,24848,24849],{},[5195,24850,24744],{},[5217,24852,24853,24856,24859],{},[5220,24854,24855],{},"Обчисліть FNR для порогів від 0.1 до 0.9 (крок 0.05)",[5220,24857,24858],{},"Знайдіть найнижчий поріг, при якому FNR \u003C 5%",[5220,24860,24861],{},"Оцініть, скільки False Positives додасться",[5191,24863,24864,24866,24867,24870],{},[5195,24865,24803],{}," Використайте ",[5434,24868,24869],{},"roc_curve"," та обчисліть FNR = FN \u002F (FN + TP) для кожного порогу.",[24730,24872,24874,24880,24884,24901],{"icon":24732,"label":24873},"📋 Завдання 5*: Інтерпретація ваг першого шару",[5191,24875,24876,24879],{},[5195,24877,24878],{},"Складність:"," Висока",[5191,24881,24882],{},[5195,24883,24744],{},[5217,24885,24886,24892,24895,24898],{},[5220,24887,24888,24889],{},"Витягніть ваги першого шару: ",[5434,24890,24891],{},"model.fc1.weight.data.cpu().numpy()",[5220,24893,24894],{},"Обчисліть середню абсолютну вагу для кожної ознаки",[5220,24896,24897],{},"Побудуйте bar-plot «важливість ознак за вагами»",[5220,24899,24900],{},"Порівняйте з кореляційним аналізом із EDA",[5191,24902,24903,24905,24906,5575,24908,5575,24910,24912],{},[5195,24904,24771],{}," Ознаки ",[5434,24907,9017],{},[5434,24909,9108],{},[5434,24911,9142],{}," матимуть найбільші середні ваги — це підтвердить їхню клінічну значущість.",[24730,24914,24916,24921,24925,24954],{"icon":24732,"label":24915},"📋 Завдання 6: Порівняння Heart Disease vs Student Performance",[5191,24917,24918,24920],{},[5195,24919,24738],{}," Зрозуміти, як розмір датасету та кількість ознак впливають на вибір архітектури.",[5191,24922,24923],{},[5195,24924,24744],{},[5217,24926,24927,24938,24951],{},[5220,24928,24929,24930,24933,24934,24937],{},"Навчіть ",[5195,24931,24932],{},"обидві моделі"," (Heart Disease та Student Performance) з ",[5195,24935,24936],{},"однаковою архітектурою",": 13→64→32→1 (обріжте Student Performance до 13 найважливіших ознак)",[5220,24939,24940,24941],{},"Порівняйте результати:\n",[5244,24942,24943,24946,24949],{},[5220,24944,24945],{},"Val AUC для обох датасетів",[5220,24947,24948],{},"Швидкість збіжності (кількість епох)",[5220,24950,24833],{},[5220,24952,24953],{},"Поясніть різницю",[5191,24955,24956,24958],{},[5195,24957,24771],{}," Student Performance з 13 ознаками дасть нижчу AUC (~0.87), бо втратить інформацію про соціальні фактори (famrel, goout, romantic).",[24730,24960,24962,24966,24970,24995,24999],{"icon":24732,"label":24961},"📋 Завдання 7*: Виявлення найважливіших ознак для студентів",[5191,24963,24964,24879],{},[5195,24965,24878],{},[5191,24967,24968],{},[5195,24969,24744],{},[5217,24971,24972,24979,24982,24985],{},[5220,24973,24974,24975,24978],{},"Використайте техніку ",[5195,24976,24977],{},"Permutation Importance",": перемішайте значення кожної ознаки по черзі та виміряйте зниження AUC",[5220,24980,24981],{},"Ознака, яка найбільше знижує AUC при перемішуванні — найважливіша",[5220,24983,24984],{},"Побудуйте топ-10 найважливіших ознак для Student Performance",[5220,24986,24987,24988,5575,24990,5575,24992,24994],{},"Інтерпретуйте результати: чи відповідають вони інтуїції? (наприклад, ",[5434,24989,21007],{},[5434,24991,21001],{},[5434,24993,21103],{}," мають бути у топі)",[5191,24996,24997],{},[5195,24998,24803],{},[5427,25000,25002],{"className":5429,"code":25001,"language":5431,"meta":5432,"style":5432},"from sklearn.inspection import permutation_importance\n# Конвертуйте PyTorch модель у sklearn-сумісний wrapper або використайте ручний цикл\n",[5434,25003,25004,25016],{"__ignoreMap":5432},[5437,25005,25006,25008,25011,25013],{"class":5439,"line":5440},[5437,25007,12793],{"class":5443},[5437,25009,25010],{"class":5447}," sklearn.inspection ",[5437,25012,5444],{"class":5443},[5437,25014,25015],{"class":5447}," permutation_importance\n",[5437,25017,25018],{"class":5439,"line":5457},[5437,25019,25020],{"class":5562},"# Конвертуйте PyTorch модель у sklearn-сумісний wrapper або використайте ручний цикл\n",[5297,25022],{},[5186,25024,25026],{"id":25025},"резюме-ключових-концепцій","Резюме ключових концепцій",[5236,25028,25029,25058,25081,25095,25121,25145],{},[5239,25030,25032],{"icon":92,"title":25031},"Функції активації",[5244,25033,25034,25040,25046,25052],{},[5220,25035,25036,25039],{},[5195,25037,25038],{},"Sigmoid:"," лише для вихідного шару (бінарна класифікація)",[5220,25041,25042,25045],{},[5195,25043,25044],{},"Tanh:"," RNN, неглибокі мережі",[5220,25047,25048,25051],{},[5195,25049,25050],{},"ReLU:"," за замовчуванням для прихованих шарів (градієнт = 1 для z > 0)",[5220,25053,25054,25057],{},[5195,25055,25056],{},"Leaky ReLU:"," якщо виникають мертві нейрони",[5239,25059,25061],{"icon":2865,"title":25060},"Попередня обробка даних",[5244,25062,25063,25069,25075],{},[5220,25064,25065,25068],{},[5195,25066,25067],{},"StandardScaler:"," обов'язково для нейронних мереж",[5220,25070,25071,25074],{},[5195,25072,25073],{},"Train\u002FVal\u002FTest split:"," 70\u002F15\u002F15 зі stratify для балансу класів",[5220,25076,25077,25080],{},[5195,25078,25079],{},"Обережно з data leakage:"," scaler.fit лише на train!",[5239,25082,25084],{"icon":943,"title":25083},"Архітектура MLP",[5244,25085,25086,25089,25092],{},[5220,25087,25088],{},"Звужуюча структура: 64 → 32 → 1 (bottleneck)",[5220,25090,25091],{},"Dropout після кожного прихованого шару",[5220,25093,25094],{},"Sigmoid на виході для ймовірності",[5239,25096,25098],{"icon":7595,"title":25097},"Навчання та регуляризація",[5244,25099,25100,25106,25112,25118],{},[5220,25101,25102,25105],{},[5195,25103,25104],{},"Optimizer:"," Adam (lr=0.001)",[5220,25107,25108,25111],{},[5195,25109,25110],{},"Loss:"," Binary Cross-Entropy",[5220,25113,25114,25117],{},[5195,25115,25116],{},"Early stopping:"," patience=20 епох",[5220,25119,25120],{},"Dropout (30%, 20%) запобігає перенавчанню",[5239,25122,25125],{"icon":25123,"title":25124},"i-lucide-bar-chart","Оцінка якості",[5244,25126,25127,25133,25139],{},[5220,25128,25129,25132],{},[5195,25130,25131],{},"AUC-ROC:"," головна метрика (0.921 — відмінно!)",[5220,25134,25135,25138],{},[5195,25136,25137],{},"Confusion Matrix:"," аналіз FN (критично для медицини)",[5220,25140,25141,25144],{},[5195,25142,25143],{},"Калібрування порогу:"," знизити FN за рахунок FP",[5239,25146,25149],{"icon":25147,"title":25148},"i-lucide-stethoscope","Клінічне застосування",[5244,25150,25151,25157,25160],{},[5220,25152,25153,25154],{},"Інференс для нового пацієнта: ",[5434,25155,25156],{},"predict_patient()",[5220,25158,25159],{},"Інтеграція з EMR через REST API",[5220,25161,25162],{},"Поріг 0.3–0.4 для мінімізації пропущених хворих",[5297,25164],{},[5191,25166,25167,25168,25171],{},"Вітаю! Ви побудували ",[5195,25169,25170],{},"дві повноцінні нейронні мережі"," для різних галузей:",[5217,25173,25174,25180],{},[5220,25175,25176,25179],{},[5195,25177,25178],{},"Heart Disease Prediction (Медицина):"," AUC 0.921 — state-of-the-art діагностика серцевих захворювань",[5220,25181,25182,25185],{},[5195,25183,25184],{},"Student Performance Prediction (Освіта):"," AUC 0.910 — система раннього попередження для шкіл",[5191,25187,25188],{},"Ви навчилися:",[5244,25190,25191,25194,25197,25200,25203],{},[5220,25192,25193],{},"Розуміти математику функцій активації та їхніх похідних",[5220,25195,25196],{},"Проєктувати архітектуру MLP для різних задач (13→64→32→1 vs 47→128→64→1)",[5220,25198,25199],{},"Імплементувати повний цикл навчання на PyTorch з early stopping та dropout",[5220,25201,25202],{},"Інтерпретувати результати у контексті предметної області (клінічна діагностика vs освітня інтервенція)",[5220,25204,25205],{},"Усвідомлювати етичні питання AI у критичних галузях",[5191,25207,25208,25209,25212,25213,25216],{},"Це фундамент для складніших архітектур, які ми вивчатимемо у наступних модулях: ",[5195,25210,25211],{},"згорткові мережі (CNN)"," для комп'ютерного зору та ",[5195,25214,25215],{},"рекурентні мережі (RNN\u002FLSTM)"," для обробки часових рядів.",[6352,25218,25219],{},"html pre.shiki code .s8xlr, html code.shiki .s8xlr{--shiki-light:#AF00DB;--shiki-default:#C586C0;--shiki-dark:#C586C0}html pre.shiki code .sHH4Y, html code.shiki .sHH4Y{--shiki-light:#000000;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .su1O8, html code.shiki .su1O8{--shiki-light:#0000FF;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .s8Opu, html code.shiki .s8Opu{--shiki-light:#795E26;--shiki-default:#DCDCAA;--shiki-dark:#DCDCAA}html pre.shiki code .siwwj, html code.shiki .siwwj{--shiki-light:#001080;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .sJj4R, html code.shiki .sJj4R{--shiki-light:#098658;--shiki-default:#B5CEA8;--shiki-dark:#B5CEA8}html pre.shiki code .spJ8K, html code.shiki .spJ8K{--shiki-light:#008000;--shiki-default:#6A9955;--shiki-dark:#6A9955}html pre.shiki code .sbdoH, html code.shiki .sbdoH{--shiki-light:#A31515;--shiki-default:#CE9178;--shiki-dark:#CE9178}html pre.shiki code .sjcCO, html code.shiki .sjcCO{--shiki-light:#EE0000;--shiki-default:#D7BA7D;--shiki-dark:#D7BA7D}html pre.shiki code .sN1BT, html code.shiki .sN1BT{--shiki-light:#267F99;--shiki-default:#4EC9B0;--shiki-dark:#4EC9B0}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":5432,"searchDepth":5457,"depth":5457,"links":25221},[25222,25223,25231,25234,25244,25252,25260,25264,25265,25276,25281],{"id":5188,"depth":5457,"text":5189},{"id":5301,"depth":5457,"text":5302,"children":25224},[25225,25226,25227,25228,25229,25230],{"id":5313,"depth":5470,"text":5314},{"id":5376,"depth":5470,"text":5377},{"id":6588,"depth":5470,"text":6589},{"id":6677,"depth":5470,"text":6678},{"id":7711,"depth":5470,"text":7712},{"id":8486,"depth":5470,"text":8487},{"id":8667,"depth":5457,"text":8668,"children":25232},[25233],{"id":8674,"depth":5470,"text":8675},{"id":8911,"depth":5457,"text":8912,"children":25235},[25236,25237,25238,25239,25240,25241,25242,25243],{"id":8922,"depth":5470,"text":8923},{"id":8980,"depth":5470,"text":8981},{"id":8987,"depth":5470,"text":8988},{"id":9035,"depth":5470,"text":9036},{"id":9083,"depth":5470,"text":9084},{"id":9120,"depth":5470,"text":9121},{"id":9239,"depth":5470,"text":9240},{"id":10654,"depth":5470,"text":10655},{"id":11963,"depth":5457,"text":11964,"children":25245},[25246,25247,25248,25249,25250,25251],{"id":11974,"depth":5470,"text":11975},{"id":12419,"depth":5470,"text":12420},{"id":12450,"depth":5470,"text":12451},{"id":12493,"depth":5470,"text":12494},{"id":12525,"depth":5470,"text":12526},{"id":12555,"depth":5470,"text":12556},{"id":12739,"depth":5457,"text":12740,"children":25253},[25254,25255,25256,25257,25258,25259],{"id":12746,"depth":5470,"text":12747},{"id":14031,"depth":5470,"text":14032},{"id":14398,"depth":5470,"text":14399},{"id":15167,"depth":5470,"text":15168},{"id":15390,"depth":5470,"text":15391},{"id":16796,"depth":5470,"text":16797},{"id":17655,"depth":5457,"text":17656,"children":25261},[25262,25263],{"id":17670,"depth":5470,"text":17671},{"id":18790,"depth":5470,"text":18791},{"id":19834,"depth":5457,"text":19835},{"id":20851,"depth":5457,"text":20852,"children":25266},[25267,25268,25269,25270,25271,25272,25273,25274,25275],{"id":20866,"depth":5470,"text":20867},{"id":20905,"depth":5470,"text":20906},{"id":20911,"depth":5470,"text":20912},{"id":20951,"depth":5470,"text":20952},{"id":20987,"depth":5470,"text":20988},{"id":21047,"depth":5470,"text":21048},{"id":21107,"depth":5470,"text":21108},{"id":21171,"depth":5470,"text":21172},{"id":23840,"depth":5470,"text":23841},{"id":24490,"depth":5457,"text":24491,"children":25277},[25278,25279,25280],{"id":24494,"depth":5470,"text":24495},{"id":24518,"depth":5470,"text":24519},{"id":24724,"depth":5470,"text":24725},{"id":25025,"depth":5457,"text":25026},"Поглиблене вивчення функцій активації, їхніх похідних та практичне застосування для медичної діагностики. Побудова повноцінної нейронної мережі на PyTorch для передбачення серцево-судинних захворювань.","md",null,{},{"title":3922,"description":25282},"gx0cuqgiBGw0R8cvPLDgDEfQtJQMfcQCCPdVR1d9CcI",[25289,25291],{"title":3913,"path":3914,"stem":3915,"description":25290,"children":-1},"GPU-прискорення, mixed precision training, профілювання продуктивності, збереження моделей, TorchScript та ONNX для production deployment.",{"title":3926,"path":3927,"stem":3928,"description":25292,"children":-1},"Детальна імплементація системи передбачення успішності студентів з аналізом важливості ознак, інтерпретацією результатів та рекомендаціями для освітніх закладів.",1791987039092]