[{"data":1,"prerenderedAt":20515},["ShallowReactive",2],{"navigation_docs":3,"-ai-python-statistics-basics-correlation":5180,"-ai-python-statistics-basics-correlation-surround":20510},[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":3743,"body":5182,"description":20504,"extension":20505,"links":20506,"meta":20507,"navigation":5360,"path":3744,"seo":20508,"stem":3745,"__hash__":20509},"docs\u002F16.ai-python\u002F04.statistics-basics\u002F05.correlation.md",{"type":5183,"value":5184,"toc":20455},"minimark",[5185,5189,5269,5272,5277,5281,5296,5773,5778,5802,5813,5819,5821,5825,5842,5873,5880,5887,5891,5900,5903,5917,5920,5924,5927,6026,6154,6158,6176,6236,6238,6243,6251,6254,6257,6263,6265,6269,6272,6539,6556,6563,6565,6569,6575,6578,6580,6584,6644,6778,6782,6791,6794,6801,6806,6895,6899,6902,6986,7029,7033,7763,7802,7804,7808,7827,7831,7834,7837,7840,7987,7991,8124,8163,8167,8173,8501,8505,9347,9351,10136,10140,10146,10149,10190,10248,10255,10266,10268,10272,10279,10302,10306,10418,10423,10450,10454,10982,11032,11034,11038,11045,11091,11095,11099,11108,11114,11123,11146,11248,11252,11261,11267,11276,11280,11288,11294,11298,12289,12293,12296,12366,12424,12428,12437,12451,13016,13082,13084,13088,13097,13101,13127,13140,13203,13207,13795,13799,13805,13808,13821,13845,13849,13923,13925,13929,13936,13940,13955,13958,13994,13999,14030,14560,14564,14577,14586,14607,14610,14613,14622,14627,14651,14655,14775,14779,14797,14800,14803,14806,14811,14843,14845,14849,14853,15937,15939,15943,17908,17910,17914,20195,20197,20201,20374,20376,20380,20414,20416,20420,20423,20437,20444,20451],[5186,5187,3743],"h1",{"id":5188},"кореляція-та-взаємозвязки",[5190,5191,5192,5220],"card-group",{},[5193,5194,5197],"card",{"icon":5195,"title":5196},"i-lucide-target","🎯 Мета підтеми",[5198,5199,5200,5204,5207,5210,5213],"ul",{},[5201,5202,5203],"li",{},"Зрозуміти різницю між коваріацією та кореляцією",[5201,5205,5206],{},"Опанувати коефіцієнт кореляції Пірсона",[5201,5208,5209],{},"Навчитися інтерпретувати кореляційні матриці",[5201,5211,5212],{},"Візуалізувати зв'язки через scatter plots та heatmaps",[5201,5214,5215,5216],{},"Усвідомити критичний принцип: ",[5217,5218,5219],"strong",{},"кореляція ≠ причинність",[5193,5221,5223],{"icon":4618,"title":5222},"🔑 Ключові терміни",[5198,5224,5225,5236,5245,5254,5263],{},[5201,5226,5227,5230,5231,5235],{},[5217,5228,5229],{},"Коваріація"," (",[5232,5233,5234],"em",{},"covariance",") — міра спільної мінливості двох змінних",[5201,5237,5238,5230,5241,5244],{},[5217,5239,5240],{},"Кореляція",[5232,5242,5243],{},"correlation",") — нормалізована коваріація, від −1 до +1",[5201,5246,5247,5230,5250,5253],{},[5217,5248,5249],{},"Коефіцієнт Пірсона",[5232,5251,5252],{},"Pearson's r",") — найпоширеніша міра лінійного зв'язку",[5201,5255,5256,5230,5259,5262],{},[5217,5257,5258],{},"Матриця кореляції",[5232,5260,5261],{},"correlation matrix",") — таблиця всіх парних кореляцій",[5201,5264,5265,5268],{},[5217,5266,5267],{},"Кореляція ≠ причинність"," — золоте правило інтерпретації",[5270,5271],"hr",{},[5273,5274,5276],"h2",{"id":5275},"історія-про-зріст-і-вагу","Історія про зріст і вагу",[5278,5279,5280],"p",{},"Уявіть: ви збираєте дані про студентів вашого університету. Фіксуєте зріст (см) та вагу (кг) кожного з 100 студентів.",[5278,5282,5283,5284,5287,5288,5291,5292,5295],{},"Інтуїтивно зрозуміло: ",[5217,5285,5286],{},"вищі люди зазвичай важчі",". Але як це описати ",[5217,5289,5290],{},"математично","? Як виміряти ",[5217,5293,5294],{},"силу"," цього зв'язку?",[5297,5298,5301,5310],"jupyter-notebook",{"kernel":5299,"title":5300},"Python 3 (ipykernel)","height_weight_intro.ipynb",[5302,5303,5305],"jupyter-cell",{"type":5304},"markdown",[5306,5307,5309],"h3",{"id":5308},"дані-про-зріст-і-вагу-100-студентів","Дані про зріст і вагу 100 студентів",[5302,5311,5313,5753],{"execution-count":5312},"1",[5314,5315,5320],"pre",{"className":5316,"code":5317,"language":5318,"meta":5319,"style":5319},"language-python shiki shiki-themes light-plus dark-plus dark-plus","import numpy as np\nimport matplotlib.pyplot as plt\n\nrng = np.random.default_rng(seed=42)\n\n# Генеруємо реалістичні дані зі зв'язком\nheight = rng.normal(170, 10, 100)  # Зріст: N(170, 10²)\nweight = 0.8 * height + rng.normal(0, 5, 100) - 70  # Вага залежить від зросту + шум\n\n# Візуалізація\nplt.figure(figsize=(10, 6))\nplt.scatter(height, weight, alpha=0.6, s=50, edgecolors='black', linewidths=0.5)\nplt.xlabel('Зріст (см)', fontsize=12)\nplt.ylabel('Вага (кг)', fontsize=12)\nplt.title('Зв\\'язок між зростом і вагою', fontweight='bold', fontsize=14)\nplt.grid(alpha=0.3)\nplt.show()\n\nprint(\"Статистика:\")\nprint(f\"  Зріст: μ = {height.mean():.1f} см, σ = {height.std():.1f} см\")\nprint(f\"  Вага:  μ = {weight.mean():.1f} кг, σ = {weight.std():.1f} кг\")\nprint(\"\\nВізуально помітно: точки утворюють хмару, що йде 'знизу-вліво до верху-вправо'\")\nprint(\"Це сигнал ПОЗИТИВНОГО зв'язку: ↑зріст → ↑вага\")\n","python","",[5321,5322,5323,5342,5355,5362,5382,5387,5394,5420,5453,5458,5464,5486,5533,5554,5573,5610,5625,5631,5636,5651,5689,5723,5741],"code",{"__ignoreMap":5319},[5324,5325,5328,5332,5336,5339],"span",{"class":5326,"line":5327},"line",1,[5324,5329,5331],{"class":5330},"s8xlr","import",[5324,5333,5335],{"class":5334},"sHH4Y"," numpy ",[5324,5337,5338],{"class":5330},"as",[5324,5340,5341],{"class":5334}," np\n",[5324,5343,5345,5347,5350,5352],{"class":5326,"line":5344},2,[5324,5346,5331],{"class":5330},[5324,5348,5349],{"class":5334}," matplotlib.pyplot ",[5324,5351,5338],{"class":5330},[5324,5353,5354],{"class":5334}," plt\n",[5324,5356,5358],{"class":5326,"line":5357},3,[5324,5359,5361],{"emptyLinePlaceholder":5360},true,"\n",[5324,5363,5365,5368,5372,5375,5379],{"class":5326,"line":5364},4,[5324,5366,5367],{"class":5334},"rng = np.random.default_rng(",[5324,5369,5371],{"class":5370},"siwwj","seed",[5324,5373,5374],{"class":5334},"=",[5324,5376,5378],{"class":5377},"sJj4R","42",[5324,5380,5381],{"class":5334},")\n",[5324,5383,5385],{"class":5326,"line":5384},5,[5324,5386,5361],{"emptyLinePlaceholder":5360},[5324,5388,5390],{"class":5326,"line":5389},6,[5324,5391,5393],{"class":5392},"spJ8K","# Генеруємо реалістичні дані зі зв'язком\n",[5324,5395,5397,5400,5403,5406,5409,5411,5414,5417],{"class":5326,"line":5396},7,[5324,5398,5399],{"class":5334},"height = rng.normal(",[5324,5401,5402],{"class":5377},"170",[5324,5404,5405],{"class":5334},", ",[5324,5407,5408],{"class":5377},"10",[5324,5410,5405],{"class":5334},[5324,5412,5413],{"class":5377},"100",[5324,5415,5416],{"class":5334},")  ",[5324,5418,5419],{"class":5392},"# Зріст: N(170, 10²)\n",[5324,5421,5423,5426,5429,5432,5435,5437,5440,5442,5444,5447,5450],{"class":5326,"line":5422},8,[5324,5424,5425],{"class":5334},"weight = ",[5324,5427,5428],{"class":5377},"0.8",[5324,5430,5431],{"class":5334}," * height + rng.normal(",[5324,5433,5434],{"class":5377},"0",[5324,5436,5405],{"class":5334},[5324,5438,5439],{"class":5377},"5",[5324,5441,5405],{"class":5334},[5324,5443,5413],{"class":5377},[5324,5445,5446],{"class":5334},") - ",[5324,5448,5449],{"class":5377},"70",[5324,5451,5452],{"class":5392},"  # Вага залежить від зросту + шум\n",[5324,5454,5456],{"class":5326,"line":5455},9,[5324,5457,5361],{"emptyLinePlaceholder":5360},[5324,5459,5461],{"class":5326,"line":5460},10,[5324,5462,5463],{"class":5392},"# Візуалізація\n",[5324,5465,5467,5470,5473,5476,5478,5480,5483],{"class":5326,"line":5466},11,[5324,5468,5469],{"class":5334},"plt.figure(",[5324,5471,5472],{"class":5370},"figsize",[5324,5474,5475],{"class":5334},"=(",[5324,5477,5408],{"class":5377},[5324,5479,5405],{"class":5334},[5324,5481,5482],{"class":5377},"6",[5324,5484,5485],{"class":5334},"))\n",[5324,5487,5489,5492,5495,5497,5500,5502,5505,5507,5510,5512,5515,5517,5521,5523,5526,5528,5531],{"class":5326,"line":5488},12,[5324,5490,5491],{"class":5334},"plt.scatter(height, weight, ",[5324,5493,5494],{"class":5370},"alpha",[5324,5496,5374],{"class":5334},[5324,5498,5499],{"class":5377},"0.6",[5324,5501,5405],{"class":5334},[5324,5503,5504],{"class":5370},"s",[5324,5506,5374],{"class":5334},[5324,5508,5509],{"class":5377},"50",[5324,5511,5405],{"class":5334},[5324,5513,5514],{"class":5370},"edgecolors",[5324,5516,5374],{"class":5334},[5324,5518,5520],{"class":5519},"sbdoH","'black'",[5324,5522,5405],{"class":5334},[5324,5524,5525],{"class":5370},"linewidths",[5324,5527,5374],{"class":5334},[5324,5529,5530],{"class":5377},"0.5",[5324,5532,5381],{"class":5334},[5324,5534,5536,5539,5542,5544,5547,5549,5552],{"class":5326,"line":5535},13,[5324,5537,5538],{"class":5334},"plt.xlabel(",[5324,5540,5541],{"class":5519},"'Зріст (см)'",[5324,5543,5405],{"class":5334},[5324,5545,5546],{"class":5370},"fontsize",[5324,5548,5374],{"class":5334},[5324,5550,5551],{"class":5377},"12",[5324,5553,5381],{"class":5334},[5324,5555,5557,5560,5563,5565,5567,5569,5571],{"class":5326,"line":5556},14,[5324,5558,5559],{"class":5334},"plt.ylabel(",[5324,5561,5562],{"class":5519},"'Вага (кг)'",[5324,5564,5405],{"class":5334},[5324,5566,5546],{"class":5370},[5324,5568,5374],{"class":5334},[5324,5570,5551],{"class":5377},[5324,5572,5381],{"class":5334},[5324,5574,5576,5579,5582,5586,5589,5591,5594,5596,5599,5601,5603,5605,5608],{"class":5326,"line":5575},15,[5324,5577,5578],{"class":5334},"plt.title(",[5324,5580,5581],{"class":5519},"'Зв",[5324,5583,5585],{"class":5584},"sjcCO","\\'",[5324,5587,5588],{"class":5519},"язок між зростом і вагою'",[5324,5590,5405],{"class":5334},[5324,5592,5593],{"class":5370},"fontweight",[5324,5595,5374],{"class":5334},[5324,5597,5598],{"class":5519},"'bold'",[5324,5600,5405],{"class":5334},[5324,5602,5546],{"class":5370},[5324,5604,5374],{"class":5334},[5324,5606,5607],{"class":5377},"14",[5324,5609,5381],{"class":5334},[5324,5611,5613,5616,5618,5620,5623],{"class":5326,"line":5612},16,[5324,5614,5615],{"class":5334},"plt.grid(",[5324,5617,5494],{"class":5370},[5324,5619,5374],{"class":5334},[5324,5621,5622],{"class":5377},"0.3",[5324,5624,5381],{"class":5334},[5324,5626,5628],{"class":5326,"line":5627},17,[5324,5629,5630],{"class":5334},"plt.show()\n",[5324,5632,5634],{"class":5326,"line":5633},18,[5324,5635,5361],{"emptyLinePlaceholder":5360},[5324,5637,5639,5643,5646,5649],{"class":5326,"line":5638},19,[5324,5640,5642],{"class":5641},"s8Opu","print",[5324,5644,5645],{"class":5334},"(",[5324,5647,5648],{"class":5519},"\"Статистика:\"",[5324,5650,5381],{"class":5334},[5324,5652,5654,5656,5658,5662,5665,5668,5671,5674,5677,5679,5682,5684,5687],{"class":5326,"line":5653},20,[5324,5655,5642],{"class":5641},[5324,5657,5645],{"class":5334},[5324,5659,5661],{"class":5660},"su1O8","f",[5324,5663,5664],{"class":5519},"\"  Зріст: μ = ",[5324,5666,5667],{"class":5660},"{",[5324,5669,5670],{"class":5334},"height.mean()",[5324,5672,5673],{"class":5660},":.1f}",[5324,5675,5676],{"class":5519}," см, σ = ",[5324,5678,5667],{"class":5660},[5324,5680,5681],{"class":5334},"height.std()",[5324,5683,5673],{"class":5660},[5324,5685,5686],{"class":5519}," см\"",[5324,5688,5381],{"class":5334},[5324,5690,5692,5694,5696,5698,5701,5703,5706,5708,5711,5713,5716,5718,5721],{"class":5326,"line":5691},21,[5324,5693,5642],{"class":5641},[5324,5695,5645],{"class":5334},[5324,5697,5661],{"class":5660},[5324,5699,5700],{"class":5519},"\"  Вага:  μ = ",[5324,5702,5667],{"class":5660},[5324,5704,5705],{"class":5334},"weight.mean()",[5324,5707,5673],{"class":5660},[5324,5709,5710],{"class":5519}," кг, σ = ",[5324,5712,5667],{"class":5660},[5324,5714,5715],{"class":5334},"weight.std()",[5324,5717,5673],{"class":5660},[5324,5719,5720],{"class":5519}," кг\"",[5324,5722,5381],{"class":5334},[5324,5724,5726,5728,5730,5733,5736,5739],{"class":5326,"line":5725},22,[5324,5727,5642],{"class":5641},[5324,5729,5645],{"class":5334},[5324,5731,5732],{"class":5519},"\"",[5324,5734,5735],{"class":5584},"\\n",[5324,5737,5738],{"class":5519},"Візуально помітно: точки утворюють хмару, що йде 'знизу-вліво до верху-вправо'\"",[5324,5740,5381],{"class":5334},[5324,5742,5744,5746,5748,5751],{"class":5326,"line":5743},23,[5324,5745,5642],{"class":5641},[5324,5747,5645],{"class":5334},[5324,5749,5750],{"class":5519},"\"Це сигнал ПОЗИТИВНОГО зв'язку: ↑зріст → ↑вага\"",[5324,5752,5381],{"class":5334},[5754,5755,5756,5765],"template",{"v-slot:output":5319},[5278,5757,5758],{},[5759,5760],"img",{"alt":5761,"className":5762,"src":5764},"Діаграма розсіювання (Scatter plot): зв'язок між зростом і вагою",[5763],"diagram-img","\u002Fimages\u002Fai-python\u002Fstatistics-basics\u002Fcorrelation\u002F01.png",[5314,5766,5771],{"className":5767,"code":5769,"language":5770},[5768],"language-text","Статистика:\n  Зріст: μ = 169.5 см, σ = 7.7 см\n  Вага:  μ = 65.5 кг, σ = 8.2 кг\n\nВізуально помітно: точки утворюють хмару, що йде 'знизу-вліво до верху-вправо'\nЦе сигнал ПОЗИТИВНОГО зв'язку: ↑зріст → ↑вага\n","text",[5321,5772,5769],{"__ignoreMap":5319},[5278,5774,5775],{},[5217,5776,5777],{},"Питання:",[5779,5780,5781,5788,5795],"ol",{},[5201,5782,5783,5784,5787],{},"Чи зріст ",[5217,5785,5786],{},"завжди"," передбачає вагу? Ні — спостерігається природний розкид.",[5201,5789,5790,5791,5794],{},"Чи зв'язок є ",[5217,5792,5793],{},"лінійним","? Наближено так: через хмару точок можна провести узагальнюючу пряму лінію.",[5201,5796,5797,5798,5801],{},"Наскільки ",[5217,5799,5800],{},"сильний"," цей зв'язок? Потрібна об'єктивна числова міра!",[5278,5803,5804,5805,5808,5809,5812],{},"Для цього в статистиці використовують поняття ",[5217,5806,5807],{},"коваріації"," та ",[5217,5810,5811],{},"кореляції",".",[5814,5815,5816],"blockquote",{},[5278,5817,5818],{},"Аналогія: Кореляція — це як «сила магнітного поля» між двома змінними. Позитивна кореляція означає, що коли одна змінна зростає, інша притягується і зростає слідом (як північний і південний полюси). Негативна кореляція — коли зростання однієї виштовхує іншу донизу. Нульова кореляція — повна байдужість змінних одна до одної (магнітне поле відсутнє).",[5270,5820],{},[5273,5822,5824],{"id":5823},"коваріація-covariance","Коваріація (Covariance)",[5278,5826,5827,5829,5830,5833,5834,5837,5838,5841],{},[5217,5828,5229],{}," (від латинського ",[5232,5831,5832],{},"co-"," — «разом», «спільно» та ",[5232,5835,5836],{},"variance"," — «мінливість», «дисперсія») — це фундаментальна міра спільної мінливості, яка показує, ",[5217,5839,5840],{},"як дві випадкові величини змінюються разом",". Вона визначає загальний напрямок сумісної лінійної тенденції двох числових ознак: чи зростають вони одночасно, чи змінюються в протилежних напрямках, чи взагалі не демонструють лінійної залежності.",[5814,5843,5844,5853],{},[5278,5845,5846,5849,5852],{},[5217,5847,5848],{},"Інтуїтивна аналогія:",[5850,5851],"br",{},"\nУявіть двомісний байдарочний човен або дитячу гойдалку-балансир:",[5198,5854,5855,5861,5867],{},[5201,5856,5857,5860],{},[5217,5858,5859],{},"Позитивна коваріація:"," Обидва веслярі веслують в один бік — човен стрімко рухається вперед. Коли зусилля першого весляра перевищує його середній рівень, зусилля другого також перевищує середнє. Вони діють синхронно.",[5201,5862,5863,5866],{},[5217,5864,5865],{},"Негативна коваріація:"," Дитяча гойдалка-балансир: коли одна дитина злітає вгору вище точки рівноваги, друга обов'язково опускається вниз. Їхні рухи узгоджені, але мають суворо протилежні напрямки.",[5201,5868,5869,5872],{},[5217,5870,5871],{},"Нульова коваріація:"," Один весляр гребе, а другий пасажир поруч читає книгу або перевіряє пошту. Рівень зусиль першого ніяк не пов'язаний з тим, яку саме сторінку відкриває другий. Їхні відхилення від середнього повністю автономні.",[5278,5874,5875],{},[5759,5876],{"alt":5877,"className":5878,"src":5879},"Інтуїтивна аналогія позитивної коваріації: синхронна діяльність веслярів у двійці",[5763],"\u002Fimages\u002Fai-python\u002Fstatistics-basics\u002Fcorrelation\u002Fcovariance-positive-kayak.jpg",[5278,5881,5882],{},[5759,5883],{"alt":5884,"className":5885,"src":5886},"Інтуїтивна аналогія негативної коваріації: протилежний рух сторін дитячої гойдалки-балансира",[5763],"\u002Fimages\u002Fai-python\u002Fstatistics-basics\u002Fcorrelation\u002Fcovariance-negative-seesaw.jpg",[5306,5888,5890],{"id":5889},"формула-коваріації","Формула коваріації",[5278,5892,5893,5894,5899],{},"Для генеральної сукупності (коли відомі абсолютно всі ",[5895,5896],"math-formula",{"tex":5897,":inline":5898},"N","true"," об'єктів або повна історія процесу):",[5895,5901],{"tex":5902},"\\text{Cov}(X, Y) = \\sigma_{XY} = \\frac{1}{N} \\sum_{i=1}^{N} (x_i - \\mu_X)(y_i - \\mu_Y)",[5278,5904,5905,5906,5909,5910,5808,5913,5916],{},"Для реальної вибірки (з корекцією Бесселя ",[5895,5907],{"tex":5908,":inline":5898},"n-1",", яка компенсує втрату одного ступеня вільності через використання вибіркових середніх ",[5895,5911],{"tex":5912,":inline":5898},"\\bar{x}",[5895,5914],{"tex":5915,":inline":5898},"\\bar{y}","):",[5895,5918],{"tex":5919},"\\text{Cov}(X, Y) = s_{XY} = \\frac{1}{n-1} \\sum_{i=1}^{n} (x_i - \\bar{x})(y_i - \\bar{y})",[5306,5921,5923],{"id":5922},"анатомія-формули-як-вона-працює-під-капотом","Анатомія формули: як вона працює під капотом?",[5278,5925,5926],{},"Формула коваріації здається складною лише на перший погляд. Насправді вона виконує всього три послідовні математичні дії:",[5779,5928,5929,5951,6010],{},[5201,5930,5931,5934,5936,5937,5940,5942,5943,5946,5947,5950],{},[5217,5932,5933],{},"Крок 1: Центрування (відхилення від «центру тяжіння»)",[5850,5935],{},"\nДля кожної точки обчислюються зміщення відносно вибіркових середніх:",[5895,5938],{"tex":5939},"\\Delta x_i = x_i - \\bar{x}, \\quad \\Delta y_i = y_i - \\bar{y}",[5850,5941],{},"Геометрично ми просто переносимо початок координат ",[5895,5944],{"tex":5945,":inline":5898},"(0, 0)"," у центр мас нашої хмари точок — координату ",[5895,5948],{"tex":5949,":inline":5898},"(\\bar{x}, \\bar{y})",". Тепер важливі не абсолютні кілограми чи метри, а напрямок відхилення від типового середнього значення.",[5201,5952,5953,5956,5958,5959,5962,5963],{},[5217,5954,5955],{},"Крок 2: Множення відхилень та правило знаків",[5850,5957],{},"\nДля кожного спостереження ми перемножуємо отримані зміщення: ",[5895,5960],{"tex":5961,":inline":5898},"\\Delta x_i \\cdot \\Delta y_i",". У цьому множенні криється вся магія знаку коваріації:",[5198,5964,5965,5979,5996],{},[5201,5966,5967,5968,5971,5972,5975,5976,5812],{},"Якщо обидві змінні більші за середнє (",[5895,5969],{"tex":5970,":inline":5898},"x_i > \\bar{x}"," і ",[5895,5973],{"tex":5974,":inline":5898},"y_i > \\bar{y}","), маємо ",[5895,5977],{"tex":5978,":inline":5898},"(+) \\times (+) = (+)",[5201,5980,5981,5982,5971,5985,5975,5988,5991,5992,5995],{},"Якщо обидві змінні менші за середнє (",[5895,5983],{"tex":5984,":inline":5898},"x_i \u003C \\bar{x}",[5895,5986],{"tex":5987,":inline":5898},"y_i \u003C \\bar{y}",[5895,5989],{"tex":5990,":inline":5898},"(-) \\times (-) = (+)",". ",[5217,5993,5994],{},"Зверніть увагу:"," якщо обидві величини одночасно впали нижче за свої середні, це також підтверджує узгодженість їхньої поведінки, тому внесок залишається строго додатним!",[5201,5997,5998,5999,6002,6003,6006,6007,5812],{},"Якщо ж одна змінна виросла понад норму, а інша впала нижче середнього (",[5895,6000],{"tex":6001,":inline":5898},"(+) \\times (-)"," або ",[5895,6004],{"tex":6005,":inline":5898},"(-) \\times (+)","), добуток стає від'ємним ",[5895,6008],{"tex":6009,":inline":5898},"(-)",[5201,6011,6012,6015,6017,6018,6021,6022,6025],{},[5217,6013,6014],{},"Крок 3: Сумування та усереднення «голосів»",[5850,6016],{},"\nМи додаємо всі отримані добутки. Кожна точка є «виборцем»: вона голосує або за додатний зв'язок (квадранти I та III), або за від'ємний (квадранти II та IV). Якщо узгоджених точок більше і вони лежать далі від центру, сумарна сума додатна (",[5895,6019],{"tex":6020,":inline":5898},"\\text{Cov} > 0","). Якщо точки взаємно компенсують одна одну — сума прямує до нуля (",[5895,6023],{"tex":6024,":inline":5898},"\\text{Cov} \\approx 0",").",[6027,6028,6030],"plant-uml",{"alt":6029},"Геометрія знаків коваріації у чотирьох квадрантах центрованого простору",[5314,6031,6035],{"className":6032,"code":6033,"language":6034,"meta":5319,"style":5319},"language-plantuml shiki shiki-themes light-plus dark-plus dark-plus","@startuml\nskinparam style plain\nskinparam backgroundColor #FFFFFF\nskinparam defaultTextAlignment center\n\nrectangle \"Розподіл простору відхилень навколо центру (x̄, ȳ)\" {\n  rectangle \"Квадрант II (Лівий верхній)\\nΔx \u003C 0,  Δy > 0\\nДобуток: (-) × (+) = **ВІД'ЄМНИЙ (-)**\\n[X нижче середнього, Y вище середнього]\" as Q2 #FFF5F5\n  rectangle \"Квадрант I (Правий верхній)\\nΔx > 0,  Δy > 0\\nДобуток: (+) × (+) = **ДОДАТНИЙ (+)**\\n[Обидва X та Y вище середнього]\" as Q1 #F0FFF4\n\n  rectangle \"Квадрант III (Лівий нижній)\\nΔx \u003C 0,  Δy \u003C 0\\nДобуток: (-) × (-) = **ДОДАТНИЙ (+)**\\n[Обидва X та Y нижче середнього]\" as Q3 #F0FFF4\n  rectangle \"Квадрант IV (Правий нижній)\\nΔx > 0,  Δy \u003C 0\\nДобуток: (+) × (-) = **ВІД'ЄМНИЙ (-)**\\n[X вище середнього, Y нижче середнього]\" as Q4 #FFF5F5\n}\n\nQ2 -right-> Q1 : \"Вісь X (відхилення Δx > 0)\"\nQ3 -right-> Q4 : \"Вісь X (відхилення Δx > 0)\"\nQ3 -up-> Q2 : \"Вісь Y (відхилення Δy > 0)\"\nQ4 -up-> Q1 : \"Вісь Y (відхилення Δy > 0)\"\n\nnote bottom of Q4\n  Центральна точка перетину: середні координати (x̄, ȳ).\n  Точки в зелених секторах (I, III) збільшують коваріацію.\n  Точки в рожевих секторах (II, IV) зменшують коваріацію.\nend note\n@enduml\n","plantuml",[5321,6036,6037,6042,6047,6052,6057,6061,6066,6071,6076,6080,6085,6090,6095,6099,6104,6109,6114,6119,6123,6128,6133,6138,6143,6148],{"__ignoreMap":5319},[5324,6038,6039],{"class":5326,"line":5327},[5324,6040,6041],{},"@startuml\n",[5324,6043,6044],{"class":5326,"line":5344},[5324,6045,6046],{},"skinparam style plain\n",[5324,6048,6049],{"class":5326,"line":5357},[5324,6050,6051],{},"skinparam backgroundColor #FFFFFF\n",[5324,6053,6054],{"class":5326,"line":5364},[5324,6055,6056],{},"skinparam defaultTextAlignment center\n",[5324,6058,6059],{"class":5326,"line":5384},[5324,6060,5361],{"emptyLinePlaceholder":5360},[5324,6062,6063],{"class":5326,"line":5389},[5324,6064,6065],{},"rectangle \"Розподіл простору відхилень навколо центру (x̄, ȳ)\" {\n",[5324,6067,6068],{"class":5326,"line":5396},[5324,6069,6070],{},"  rectangle \"Квадрант II (Лівий верхній)\\nΔx \u003C 0,  Δy > 0\\nДобуток: (-) × (+) = **ВІД'ЄМНИЙ (-)**\\n[X нижче середнього, Y вище середнього]\" as Q2 #FFF5F5\n",[5324,6072,6073],{"class":5326,"line":5422},[5324,6074,6075],{},"  rectangle \"Квадрант I (Правий верхній)\\nΔx > 0,  Δy > 0\\nДобуток: (+) × (+) = **ДОДАТНИЙ (+)**\\n[Обидва X та Y вище середнього]\" as Q1 #F0FFF4\n",[5324,6077,6078],{"class":5326,"line":5455},[5324,6079,5361],{"emptyLinePlaceholder":5360},[5324,6081,6082],{"class":5326,"line":5460},[5324,6083,6084],{},"  rectangle \"Квадрант III (Лівий нижній)\\nΔx \u003C 0,  Δy \u003C 0\\nДобуток: (-) × (-) = **ДОДАТНИЙ (+)**\\n[Обидва X та Y нижче середнього]\" as Q3 #F0FFF4\n",[5324,6086,6087],{"class":5326,"line":5466},[5324,6088,6089],{},"  rectangle \"Квадрант IV (Правий нижній)\\nΔx > 0,  Δy \u003C 0\\nДобуток: (+) × (-) = **ВІД'ЄМНИЙ (-)**\\n[X вище середнього, Y нижче середнього]\" as Q4 #FFF5F5\n",[5324,6091,6092],{"class":5326,"line":5488},[5324,6093,6094],{},"}\n",[5324,6096,6097],{"class":5326,"line":5535},[5324,6098,5361],{"emptyLinePlaceholder":5360},[5324,6100,6101],{"class":5326,"line":5556},[5324,6102,6103],{},"Q2 -right-> Q1 : \"Вісь X (відхилення Δx > 0)\"\n",[5324,6105,6106],{"class":5326,"line":5575},[5324,6107,6108],{},"Q3 -right-> Q4 : \"Вісь X (відхилення Δx > 0)\"\n",[5324,6110,6111],{"class":5326,"line":5612},[5324,6112,6113],{},"Q3 -up-> Q2 : \"Вісь Y (відхилення Δy > 0)\"\n",[5324,6115,6116],{"class":5326,"line":5627},[5324,6117,6118],{},"Q4 -up-> Q1 : \"Вісь Y (відхилення Δy > 0)\"\n",[5324,6120,6121],{"class":5326,"line":5633},[5324,6122,5361],{"emptyLinePlaceholder":5360},[5324,6124,6125],{"class":5326,"line":5638},[5324,6126,6127],{},"note bottom of Q4\n",[5324,6129,6130],{"class":5326,"line":5653},[5324,6131,6132],{},"  Центральна точка перетину: середні координати (x̄, ȳ).\n",[5324,6134,6135],{"class":5326,"line":5691},[5324,6136,6137],{},"  Точки в зелених секторах (I, III) збільшують коваріацію.\n",[5324,6139,6140],{"class":5326,"line":5725},[5324,6141,6142],{},"  Точки в рожевих секторах (II, IV) зменшують коваріацію.\n",[5324,6144,6145],{"class":5326,"line":5743},[5324,6146,6147],{},"end note\n",[5324,6149,6151],{"class":5326,"line":6150},24,[5324,6152,6153],{},"@enduml\n",[5306,6155,6157],{"id":6156},"практичний-сценарій-покроковий-розрахунок-коваріації-вручну","Практичний сценарій: покроковий розрахунок коваріації вручну",[5278,6159,6160,6161,5808,6168,6175],{},"Щоб наочно побачити, як суха математична формула працює на практиці, розглянемо простий та життєвий сценарій: дослідження зв'язку між ",[5217,6162,6163,6164,6167],{},"кількістю годин самостійної підготовки до іспиту (",[5895,6165],{"tex":6166,":inline":5898},"X",", години)",[5217,6169,6170,6171,6174],{},"фінальною оцінкою за 100-бальною шкалою (",[5895,6172],{"tex":6173,":inline":5898},"Y",", бали)"," для 5 студентів групи:",[5198,6177,6178,6192,6203,6214,6225],{},[5201,6179,6180,6183,6184,6187,6188,6191],{},[5217,6181,6182],{},"Студент А:"," ",[5895,6185],{"tex":6186,":inline":5898},"x_1 = 2"," год, ",[5895,6189],{"tex":6190,":inline":5898},"y_1 = 50"," балів",[5201,6193,6194,6183,6197,6187,6200,6191],{},[5217,6195,6196],{},"Студент Б:",[5895,6198],{"tex":6199,":inline":5898},"x_2 = 4",[5895,6201],{"tex":6202,":inline":5898},"y_2 = 60",[5201,6204,6205,6183,6208,6187,6211,6191],{},[5217,6206,6207],{},"Студент В:",[5895,6209],{"tex":6210,":inline":5898},"x_3 = 6",[5895,6212],{"tex":6213,":inline":5898},"y_3 = 70",[5201,6215,6216,6183,6219,6187,6222,6191],{},[5217,6217,6218],{},"Студент Г:",[5895,6220],{"tex":6221,":inline":5898},"x_4 = 8",[5895,6223],{"tex":6224,":inline":5898},"y_4 = 75",[5201,6226,6227,6183,6230,6187,6233,6191],{},[5217,6228,6229],{},"Студент Д:",[5895,6231],{"tex":6232,":inline":5898},"x_5 = 10",[5895,6234],{"tex":6235,":inline":5898},"y_5 = 95",[5270,6237],{},[6239,6240,6242],"h4",{"id":6241},"крок-1-обчислення-вибіркових-середніх-знаходження-центру-тяжіння","Крок 1. Обчислення вибіркових середніх (знаходження центру тяжіння)",[5278,6244,6245,6246,5808,6248,6250],{},"Спочатку знаходимо середньоарифметичні значення ",[5895,6247],{"tex":5912,":inline":5898},[5895,6249],{"tex":5915,":inline":5898},":",[5895,6252],{"tex":6253},"\\bar{x} = \\frac{\\sum_{i=1}^{5} x_i}{5} = \\frac{2 + 4 + 6 + 8 + 10}{5} = \\frac{30}{5} = 6.0 \\text{ год}",[5895,6255],{"tex":6256},"\\bar{y} = \\frac{\\sum_{i=1}^{5} y_i}{5} = \\frac{50 + 60 + 70 + 75 + 95}{5} = \\frac{350}{5} = 70.0 \\text{ балів}",[5278,6258,6259,6260,5812],{},"Отже, наш «центр мас» вибірки розташований у точці ",[5895,6261],{"tex":6262,":inline":5898},"(\\bar{x}, \\bar{y}) = (6.0, 70.0)",[5270,6264],{},[6239,6266,6268],{"id":6267},"крок-2-центрування-відхилень-та-перемноження-голосів","Крок 2. Центрування відхилень та перемноження «голосів»",[5278,6270,6271],{},"Складемо розрахункову таблицю, щоб побачити внесок кожного студента у спільну тенденцію:",[6273,6274,6275,6321],"table",{},[6276,6277,6278],"thead",{},[6279,6280,6281,6286,6293,6299,6305,6310,6315,6318],"tr",{},[6282,6283,6285],"th",{"align":6284},"left","Студент",[6282,6287,6289,6292],{"align":6288},"center",[5895,6290],{"tex":6291,":inline":5898},"x_i"," (год)",[6282,6294,6295,6298],{"align":6288},[5895,6296],{"tex":6297,":inline":5898},"y_i"," (бали)",[6282,6300,6301,6302],{"align":6288},"Центроване ",[5895,6303],{"tex":6304,":inline":5898},"\\Delta x_i = x_i - \\bar{x}",[6282,6306,6301,6307],{"align":6288},[5895,6308],{"tex":6309,":inline":5898},"\\Delta y_i = y_i - \\bar{y}",[6282,6311,6312,6313],{"align":6288},"Добуток ",[5895,6314],{"tex":5961,":inline":5898},[6282,6316,6317],{"align":6288},"Квадрант",[6282,6319,6320],{"align":6284},"Внесок у спільну тенденцію",[6322,6323,6324,6360,6395,6427,6463,6497],"tbody",{},[6279,6325,6326,6332,6335,6337,6342,6347,6352,6355],{},[6327,6328,6329],"td",{"align":6284},[5217,6330,6331],{},"Студент А",[6327,6333,6334],{"align":6288},"2",[6327,6336,5509],{"align":6288},[6327,6338,6339],{"align":6288},[5895,6340],{"tex":6341,":inline":5898},"2 - 6 = \\mathbf{-4}",[6327,6343,6344],{"align":6288},[5895,6345],{"tex":6346,":inline":5898},"50 - 70 = \\mathbf{-20}",[6327,6348,6349],{"align":6288},[5895,6350],{"tex":6351,":inline":5898},"(-4) \\times (-20) = \\mathbf{+80}",[6327,6353,6354],{"align":6288},"III",[6327,6356,6357,6359],{"align":6284},[5895,6358],{"tex":5990,":inline":5898}," — обидва показники нижче середнього (синхронний спад)",[6279,6361,6362,6367,6370,6373,6378,6383,6388,6390],{},[6327,6363,6364],{"align":6284},[5217,6365,6366],{},"Студент Б",[6327,6368,6369],{"align":6288},"4",[6327,6371,6372],{"align":6288},"60",[6327,6374,6375],{"align":6288},[5895,6376],{"tex":6377,":inline":5898},"4 - 6 = \\mathbf{-2}",[6327,6379,6380],{"align":6288},[5895,6381],{"tex":6382,":inline":5898},"60 - 70 = \\mathbf{-10}",[6327,6384,6385],{"align":6288},[5895,6386],{"tex":6387,":inline":5898},"(-2) \\times (-10) = \\mathbf{+20}",[6327,6389,6354],{"align":6288},[6327,6391,6392,6394],{"align":6284},[5895,6393],{"tex":5990,":inline":5898}," — узгоджений помірний спад",[6279,6396,6397,6402,6404,6406,6411,6416,6421,6424],{},[6327,6398,6399],{"align":6284},[5217,6400,6401],{},"Студент В",[6327,6403,5482],{"align":6288},[6327,6405,5449],{"align":6288},[6327,6407,6408],{"align":6288},[5895,6409],{"tex":6410,":inline":5898},"6 - 6 = \\mathbf{0}",[6327,6412,6413],{"align":6288},[5895,6414],{"tex":6415,":inline":5898},"70 - 70 = \\mathbf{0}",[6327,6417,6418],{"align":6288},[5895,6419],{"tex":6420,":inline":5898},"0 \\times 0 = \\mathbf{0}",[6327,6422,6423],{"align":6288},"Центр",[6327,6425,6426],{"align":6284},"Точка точно в центрі вибірки (нейтральний внесок)",[6279,6428,6429,6434,6437,6440,6445,6450,6455,6458],{},[6327,6430,6431],{"align":6284},[5217,6432,6433],{},"Студент Г",[6327,6435,6436],{"align":6288},"8",[6327,6438,6439],{"align":6288},"75",[6327,6441,6442],{"align":6288},[5895,6443],{"tex":6444,":inline":5898},"8 - 6 = \\mathbf{+2}",[6327,6446,6447],{"align":6288},[5895,6448],{"tex":6449,":inline":5898},"75 - 70 = \\mathbf{+5}",[6327,6451,6452],{"align":6288},[5895,6453],{"tex":6454,":inline":5898},"(+2) \\times (+5) = \\mathbf{+10}",[6327,6456,6457],{"align":6288},"I",[6327,6459,6460,6462],{"align":6284},[5895,6461],{"tex":5978,":inline":5898}," — обидва показники вище середнього",[6279,6464,6465,6470,6472,6475,6480,6485,6490,6492],{},[6327,6466,6467],{"align":6284},[5217,6468,6469],{},"Студент Д",[6327,6471,5408],{"align":6288},[6327,6473,6474],{"align":6288},"95",[6327,6476,6477],{"align":6288},[5895,6478],{"tex":6479,":inline":5898},"10 - 6 = \\mathbf{+4}",[6327,6481,6482],{"align":6288},[5895,6483],{"tex":6484,":inline":5898},"95 - 70 = \\mathbf{+25}",[6327,6486,6487],{"align":6288},[5895,6488],{"tex":6489,":inline":5898},"(+4) \\times (+25) = \\mathbf{+100}",[6327,6491,6457],{"align":6288},[6327,6493,6494,6496],{"align":6284},[5895,6495],{"tex":5978,":inline":5898}," — максимальний позитивний ривок",[6279,6498,6499,6508,6513,6518,6522,6526,6531,6534],{},[6327,6500,6501],{"align":6284},[5217,6502,6503,6504,6507],{},"Сума (",[5895,6505],{"tex":6506,":inline":5898},"\\sum",")",[6327,6509,6510],{"align":6288},[5217,6511,6512],{},"30",[6327,6514,6515],{"align":6288},[5217,6516,6517],{},"350",[6327,6519,6520],{"align":6288},[5217,6521,5434],{},[6327,6523,6524],{"align":6288},[5217,6525,5434],{},[6327,6527,6528],{"align":6288},[5217,6529,6530],{},"+210",[6327,6532,6533],{"align":6288},"—",[6327,6535,6536],{"align":6284},[5217,6537,6538],{},"Сумарний узгоджений імпульс",[5814,6540,6541],{},[5278,6542,6543,6546,6548,6549,5808,6552,6555],{},[5217,6544,6545],{},"Чому сума відхилень дорівнює нулю?",[5850,6547],{},"\nЗверніть увагу: ",[5895,6550],{"tex":6551,":inline":5898},"\\sum \\Delta x_i = (-4) + (-2) + 0 + 2 + 4 = 0",[5895,6553],{"tex":6554,":inline":5898},"\\sum \\Delta y_i = (-20) + (-10) + 0 + 5 + 25 = 0",". Це фундаментальна перевірочна властивість середнього арифметичного: сума відхилень від власного центру тяжіння завжди суворо дорівнює нулю.",[5278,6557,6558],{},[5759,6559],{"alt":6560,"className":6561,"src":6562},"Геометрична анатомія коваріації для 5 студентів: сума орієнтованих площ прямокутників відхилень від центру мас",[5763],"\u002Fimages\u002Fai-python\u002Fstatistics-basics\u002Fcorrelation\u002Fcovariance-students-geometry.png",[5270,6564],{},[6239,6566,6568],{"id":6567},"крок-3-обчислення-вибіркової-коваріації","Крок 3. Обчислення вибіркової коваріації",[5278,6570,6571,6572,5916],{},"Застосовуємо вибіркову формулу з поправкою Бесселя (",[5895,6573],{"tex":6574,":inline":5898},"n - 1 = 5 - 1 = 4",[5895,6576],{"tex":6577},"s_{XY} = \\frac{1}{n - 1} \\sum_{i=1}^{n} (x_i - \\bar{x})(y_i - \\bar{y}) = \\frac{+210}{5 - 1} = \\frac{210}{4} = \\mathbf{+52.5} \\text{ (год} \\cdot \\text{бал)}",[5270,6579],{},[6239,6581,6583],{"id":6582},"що-розповідає-нам-це-число-три-інженерні-висновки","Що розповідає нам це число? (Три інженерні висновки)",[5779,6585,6586,6597,6625],{},[5201,6587,6588,6594,6596],{},[5217,6589,6590,6591,5916],{},"Знак плюс (",[5895,6592],{"tex":6593,":inline":5898},"s_{XY} = +52.5 > 0",[5850,6595],{},"\nЗв'язок однозначно прямо пропорційний (позитивний). Студенти, які витрачають більше годин на підготовку, закономірно демонструють вищі результати на тестуванні.",[5201,6598,6599,6602,6604,6605,6612,6613,6616,6617,6620,6621,6624],{},[5217,6600,6601],{},"Пастка одиниць вимірювання («людино-годино-бали»):",[5850,6603],{},"\nЧислове значення коваріації вимірюється в комбінованих одиницях: ",[5217,6606,6607,6608,6611],{},"година ",[5895,6609],{"tex":6610,":inline":5898},"\\cdot"," бал",". Через це значення ",[5895,6614],{"tex":6615,":inline":5898},"+52.5"," неможливо порівняти з іншими дослідженнями: це сильний зв'язок чи слабкий? Якщо ми переведемо час з годин у хвилини (",[5895,6618],{"tex":6619,":inline":5898},"x_i \\times 60","), коваріація миттєво зросте в 60 разів:\n",[5895,6622],{"tex":6623},"s_{XY} = 52.5 \\times 60 = 3150 \\text{ (хв} \\cdot \\text{бал)}","\nХоча реальна поведінка студентів і ступінь їхньої старанності не змінилися ані на краплю!",[5201,6626,6627,6630,6632,6633,6636,6637,6640,6641,5812],{},[5217,6628,6629],{},"Місток до кореляції:",[5850,6631],{},"\nСаме для подолання проблеми масштабу та розмірностей Карл Пірсон запропонував нормалізувати коваріацію — розділити її на добуток стандартних відхилень обох ознак. Це перетворює «незручні» ",[5895,6634],{"tex":6635,":inline":5898},"52.5 \\text{ год} \\cdot \\text{бал}"," на елегантне безрозмірне число від ",[5895,6638],{"tex":6639,":inline":5898},"-1"," до ",[5895,6642],{"tex":6643,":inline":5898},"+1",[5314,6645,6647],{"className":5316,"code":6646,"language":5318,"meta":5319,"style":5319},"# Перевірка результату в Python \u002F NumPy:\nimport numpy as np\n\nhours = np.array([2, 4, 6, 8, 10])\nscores = np.array([50, 60, 70, 75, 95])\n\n# np.cov повертає симетричну коваріаційну матрицю 2x2:\n# [[Var(X),     Cov(X, Y)],\n#  [Cov(Y, X),  Var(Y)]]\ncov_matrix = np.cov(hours, scores)\nprint(f\"Вибіркова коваріація: {cov_matrix[0, 1]:.2f}\")  # 52.50\n",[5321,6648,6649,6654,6664,6668,6694,6719,6723,6728,6733,6738,6743],{"__ignoreMap":5319},[5324,6650,6651],{"class":5326,"line":5327},[5324,6652,6653],{"class":5392},"# Перевірка результату в Python \u002F NumPy:\n",[5324,6655,6656,6658,6660,6662],{"class":5326,"line":5344},[5324,6657,5331],{"class":5330},[5324,6659,5335],{"class":5334},[5324,6661,5338],{"class":5330},[5324,6663,5341],{"class":5334},[5324,6665,6666],{"class":5326,"line":5357},[5324,6667,5361],{"emptyLinePlaceholder":5360},[5324,6669,6670,6673,6675,6677,6679,6681,6683,6685,6687,6689,6691],{"class":5326,"line":5364},[5324,6671,6672],{"class":5334},"hours = np.array([",[5324,6674,6334],{"class":5377},[5324,6676,5405],{"class":5334},[5324,6678,6369],{"class":5377},[5324,6680,5405],{"class":5334},[5324,6682,5482],{"class":5377},[5324,6684,5405],{"class":5334},[5324,6686,6436],{"class":5377},[5324,6688,5405],{"class":5334},[5324,6690,5408],{"class":5377},[5324,6692,6693],{"class":5334},"])\n",[5324,6695,6696,6699,6701,6703,6705,6707,6709,6711,6713,6715,6717],{"class":5326,"line":5384},[5324,6697,6698],{"class":5334},"scores = np.array([",[5324,6700,5509],{"class":5377},[5324,6702,5405],{"class":5334},[5324,6704,6372],{"class":5377},[5324,6706,5405],{"class":5334},[5324,6708,5449],{"class":5377},[5324,6710,5405],{"class":5334},[5324,6712,6439],{"class":5377},[5324,6714,5405],{"class":5334},[5324,6716,6474],{"class":5377},[5324,6718,6693],{"class":5334},[5324,6720,6721],{"class":5326,"line":5389},[5324,6722,5361],{"emptyLinePlaceholder":5360},[5324,6724,6725],{"class":5326,"line":5396},[5324,6726,6727],{"class":5392},"# np.cov повертає симетричну коваріаційну матрицю 2x2:\n",[5324,6729,6730],{"class":5326,"line":5422},[5324,6731,6732],{"class":5392},"# [[Var(X),     Cov(X, Y)],\n",[5324,6734,6735],{"class":5326,"line":5455},[5324,6736,6737],{"class":5392},"#  [Cov(Y, X),  Var(Y)]]\n",[5324,6739,6740],{"class":5326,"line":5460},[5324,6741,6742],{"class":5334},"cov_matrix = np.cov(hours, scores)\n",[5324,6744,6745,6747,6749,6751,6754,6756,6759,6761,6763,6765,6768,6771,6773,6775],{"class":5326,"line":5466},[5324,6746,5642],{"class":5641},[5324,6748,5645],{"class":5334},[5324,6750,5661],{"class":5660},[5324,6752,6753],{"class":5519},"\"Вибіркова коваріація: ",[5324,6755,5667],{"class":5660},[5324,6757,6758],{"class":5334},"cov_matrix[",[5324,6760,5434],{"class":5377},[5324,6762,5405],{"class":5334},[5324,6764,5312],{"class":5377},[5324,6766,6767],{"class":5334},"]",[5324,6769,6770],{"class":5660},":.2f}",[5324,6772,5732],{"class":5519},[5324,6774,5416],{"class":5334},[5324,6776,6777],{"class":5392},"# 52.50\n",[5306,6779,6781],{"id":6780},"дисперсія-як-окремий-випадок-коваріації","Дисперсія як окремий випадок коваріації",[5278,6783,6784,6785,6787,6788,6790],{},"Що станеться, якщо ми підставимо у вибіркову формулу коваріації змінну ",[5895,6786],{"tex":6166,":inline":5898}," замість ",[5895,6789],{"tex":6173,":inline":5898},"? Тобто розрахуємо коваріацію ознаки із самою собою:",[5895,6792],{"tex":6793},"\\text{Cov}(X, X) = \\frac{1}{n-1} \\sum_{i=1}^{n} (x_i - \\bar{x})(x_i - \\bar{x}) = \\frac{1}{n-1} \\sum_{i=1}^{n} (x_i - \\bar{x})^2 = \\text{Var}(X) = s_X^2",[5278,6795,6796,6797,6800],{},"Це глибокий концептуальний зв'язок: ",[5217,6798,6799],{},"дисперсія — це просто коваріація змінної із самою собою",". Дисперсія показує, як одновимірна величина розсіюється навколо власного середнього, тоді як коваріація узагальнює цей принцип на спільне сумісне розсіювання двох різних вимірів.",[5278,6802,6803],{},[5217,6804,6805],{},"Інтерпретація знаку коваріації:",[6273,6807,6808,6824],{},[6276,6809,6810],{},[6279,6811,6812,6818,6821],{},[6282,6813,6814,6815],{"align":6288},"Значення ",[5895,6816],{"tex":6817,":inline":5898},"\\text{Cov}(X, Y)",[6282,6819,6820],{"align":6284},"Інтерпретація зв'язку",[6282,6822,6823],{"align":6284},"Геометрична поведінка хмари точок",[6322,6825,6826,6850,6872],{},[6279,6827,6828,6835,6847],{},[6327,6829,6830],{"align":6288},[5217,6831,6832],{},[5895,6833],{"tex":6834,":inline":5898},"> 0",[6327,6836,6837,6840,6841,6843,6844,6846],{"align":6284},[5217,6838,6839],{},"Прямий (позитивний):"," коли ",[5895,6842],{"tex":6166,":inline":5898}," зростає, ",[5895,6845],{"tex":6173,":inline":5898}," також має тенденцію зростати",[6327,6848,6849],{"align":6284},"Точки витягуються вздовж висхідної прямої (квадранти I та III)",[6279,6851,6852,6859,6869],{},[6327,6853,6854],{"align":6288},[5217,6855,6856],{},[5895,6857],{"tex":6858,":inline":5898},"\u003C 0",[6327,6860,6861,6840,6864,6843,6866,6868],{"align":6284},[5217,6862,6863],{},"Обернений (негативний):",[5895,6865],{"tex":6166,":inline":5898},[5895,6867],{"tex":6173,":inline":5898}," прямує вниз",[6327,6870,6871],{"align":6284},"Точки витягуються вздовж низхідної прямої (квадранти II та IV)",[6279,6873,6874,6881,6892],{},[6327,6875,6876],{"align":6288},[5217,6877,6878],{},[5895,6879],{"tex":6880,":inline":5898},"\\approx 0",[6327,6882,6883,6886,6887,6889,6890],{"align":6284},[5217,6884,6885],{},"Відсутній лінійний зв'язок:"," зміна ",[5895,6888],{"tex":6166,":inline":5898}," не дає інформації про напрямок зміни ",[5895,6891],{"tex":6173,":inline":5898},[6327,6893,6894],{"align":6284},"Точки рівномірно заповнюють площину без вираженого нахилу",[5306,6896,6898],{"id":6897},"де-застосовується-коваріація-на-практиці","Де застосовується коваріація на практиці?",[5278,6900,6901],{},"Коваріація — це не просто теоретична проміжна формула. Вона є активним обчислювальним рушієм у багатьох сферах IT, науки про дані та інженерії:",[5190,6903,6904,6946,6963,6977],{},[5193,6905,6908,6925,6928],{"icon":6906,"title":6907},"i-lucide-scale","1. Мінімізація ризику портфеля (Теорія Марковіца)",[5278,6909,6910,6911,5808,6914,6917,6918,5971,6921,6924],{},"У фінансовому менеджменті інвестор намагається отримати максимальний дохід за мінімального ризику. Ризик портфеля з двох активів ",[5895,6912],{"tex":6913,":inline":5898},"A",[5895,6915],{"tex":6916,":inline":5898},"B"," із частками ",[5895,6919],{"tex":6920,":inline":5898},"w_A",[5895,6922],{"tex":6923,":inline":5898},"w_B"," визначається його дисперсією:",[5895,6926],{"tex":6927,":inline":5898},"\\text{Var}(P) = w_A^2 \\sigma_A^2 + w_B^2 \\sigma_B^2 + 2 w_A w_B \\text{Cov}(A, B)",[5278,6929,6930,6931,5230,6934,6937,6938,6941,6942,6945],{},"Якщо підібрати активи з ",[5217,6932,6933],{},"від'ємною коваріацією",[5895,6935],{"tex":6936,":inline":5898},"\\text{Cov}(A, B) \u003C 0",") — наприклад, акції золотодобувної компанії (дорожчають під час кризи) та акції авіаперевізника (дешевшають через кризу або зростання цін на пальне), — доданок ",[5895,6939],{"tex":6940,":inline":5898},"2 w_A w_B \\text{Cov}(A, B)"," стає від'ємним. У результаті загальний ризик портфеля стає ",[5232,6943,6944],{},"меншим",", ніж ризик будь-якого з цих активів окремо. Цей ефект є математичним фундаментом диверсифікації.",[5193,6947,6950,6953],{"icon":6948,"title":6949},"i-lucide-compass","2. Злиття сенсорів та автопілоти (Фільтр Калмана)",[5278,6951,6952],{},"Безпілотні автомобілі та дрони одночасно зчитують координати з GPS, гіроскопа (IMU) та одометра коліс. Кожен датчик має випадкові похибки: GPS втрачає супутники між хмарочосами, а колеса буксують на мокрому асфальті.",[5278,6954,6955,6956,6183,6959,6962],{},"Фільтр Калмана використовує ",[5217,6957,6958],{},"матрицю коваріації похибок оцінки",[5895,6960],{"tex":6961,":inline":5898},"\\mathbf{P}",". Її позадіагональні елементи показують спільну невизначеність: «наскільки похибка у визначенні поточної швидкості впливає на похибку визначення положення у просторі?». Завдяки коваріації, щойно система отримує свіже вимірювання швидкості від коліс, вона миттєво коригує оцінку координат GPS, усуваючи накопичений дрейф траєкторії.",[5193,6964,6967,6970],{"icon":6965,"title":6966},"i-lucide-merge","3. Стиснення даних та ML (Метод головних компонент — PCA)",[5278,6968,6969],{},"У машинному навчанні датасети часто містять сотні або тисячі ознак. Якщо дві ознаки мають сильну коваріацію (наприклад, площа квартири та кількість кімнат, або яскравість двох сусідніх пікселів медичного томографа), вони несуть майже однакову інформацію (проблема мультиколінеарності).",[5278,6971,6972,6973,6976],{},"Алгоритм PCA бере повну коваріаційну матрицю ознак і знаходить її ",[5217,6974,6975],{},"власні вектори",". Це дає змогу повернути координатні осі вздовж напрямків найбільшої спільної мінливості та замінити 100 початкових взаємозалежних ознак на 5 нових некорельованих компонент, зберігши понад 95% корисної інформації датасету.",[5193,6978,6980,6983],{"icon":1348,"title":6979},"4. Моніторинг систем та SRE (DevOps Telemetry)",[5278,6981,6982],{},"Інженери надійності сайтів (SRE) відстежують поведінку мікросервісів за допомогою коваріації між вхідним навантаженням (RPS — запити за секунду) та затримкою обробки (Latency p95\u002Fp99).",[5278,6984,6985],{},"Доки сервер має достатньо ресурсів, зростання RPS не призводить до деградації сервісу, і коваріація між ними тримається близько нуля. Проте, якщо база даних вичерпує пул з'єднань або процесор потрапляє в throttling, коваріація між навантаженням та затримкою різко підскакує вгору. Системи моніторингу (наприклад, Prometheus або Datadog) використовують зростання коваріації як завчасний індикатор виникнення «пляшкового горла» (bottleneck), що дає змогу автоматично масштабувати сервіс до того, як клієнти почнуть отримувати помилки таймауту HTTP 504.",[6987,6988,6990,6997,7013,7020],"warning",{"title":6989},"Критичне обмеження коваріації: масштабозалежність",[5278,6991,6992,6993,6996],{},"Коваріація критично залежить від ",[5217,6994,6995],{},"одиниць вимірювання"," змінних:",[5278,6998,6999,7000,7002,7003,7005,7006,7008,7009,7012],{},"Якщо зріст ",[5895,7001],{"tex":6166,":inline":5898}," вимірюється в метрах, а вага ",[5895,7004],{"tex":6173,":inline":5898}," — у кілограмах, коваріація ",[5895,7007],{"tex":6817,":inline":5898}," має розмірність «метр · кілограм». Якщо ж перевести зріст у сантиметри, а вагу в грами, числове значення коваріації підскочить рівно в ",[5895,7010],{"tex":7011,":inline":5898},"100 \\times 1000 = 100\\,000"," разів!",[5278,7014,7015,7016,7019],{},"Через це неможливо сказати, чи ",[5895,7017],{"tex":7018,":inline":5898},"\\text{Cov} = 240"," — це сильний зв'язок, чи практично нульовий, без врахування дисперсій самих змінних.",[5278,7021,7022,7025,7026,5812],{},[5217,7023,7024],{},"Рішення:"," нормувати коваріацію, поділивши її на стандартні відхилення обох змінних. Результатом такої нормалізації є ",[5217,7027,7028],{},"коефіцієнт лінійної кореляції Пірсона",[5306,7030,7032],{"id":7031},"обчислення-коваріації-в-numpy","Обчислення коваріації в NumPy",[5297,7034,7036,7042],{"kernel":5299,"title":7035},"covariance_calculation.ipynb",[5302,7037,7038],{"type":5304},[5306,7039,7041],{"id":7040},"обчислення-коваріації-вручну-та-через-numpy","Обчислення коваріації вручну та через NumPy",[5302,7043,7044,7748],{"execution-count":5312},[5314,7045,7047],{"className":5316,"code":7046,"language":5318,"meta":5319,"style":5319},"import numpy as np\n\n# Дані: температура (°C) та продажі морозива (шт)\ntemperature = np.array([15, 18, 22, 25, 28, 30, 32, 35])\nice_cream_sales = np.array([50, 65, 80, 95, 110, 125, 135, 150])\n\n# Спосіб 1: Вручну за математичною формулою\ntemp_mean = temperature.mean()\nsales_mean = ice_cream_sales.mean()\n\ncov_manual = np.sum((temperature - temp_mean) * (ice_cream_sales - sales_mean)) \u002F (len(temperature) - 1)\n\n# Спосіб 2: Через матрицю коваріацій NumPy\ncov_matrix = np.cov(temperature, ice_cream_sales)  # Матриця коваріацій 2×2\ncov_numpy = cov_matrix[0, 1]  # Позадіагональний елемент [0,1] або [1,0]\n\nprint(\"Результати:\")\nprint(f\"  Коваріація (вручну):  {cov_manual:.2f}\")\nprint(f\"  Коваріація (NumPy):   {cov_numpy:.2f}\")\nprint(f\"\\nІнтерпретація:\")\nprint(f\"  Cov > 0 → позитивний зв'язок\")\nprint(f\"  Коли температура зростає, продажі морозива теж зростають\")\nprint(f\"\\nПроблема масштабу:\")\nprint(f\"  Чи {cov_numpy:.2f} — це багато? Без контексту дисперсій відповісти неможливо!\")\n\n# Візуалізація: розділення на квадранти відхилень навколо центру мас\nimport matplotlib.pyplot as plt\n\nplt.figure(figsize=(9, 6))\nplt.axvline(temp_mean, color='#dc2626', linestyle='--', label=f'$\\\\bar{{x}} = {temp_mean:.1f}^\\\\circ\\\\mathrm{{C}}$')\nplt.axhline(sales_mean, color='#2563eb', linestyle='--', label=f'$\\\\bar{{y}} = {sales_mean:.1f}$ шт')\nplt.scatter(temperature, ice_cream_sales, s=80, color='#0284c7', edgecolors='#0369a1', zorder=5, label='Дні спостережень')\nplt.scatter([temp_mean], [sales_mean], s=130, color='#eab308', edgecolors='#ca8a04', zorder=6, label='Центр мас')\nplt.title(f'Обчислення коваріації: Температура vs Продажі морозива (Cov = +{cov_numpy:.2f})', fontweight='bold')\nplt.xlabel('Температура повітря (X, °C)')\nplt.ylabel('Продажі морозива (Y, шт)')\nplt.grid(True, linestyle=':', alpha=0.5)\nplt.legend()\nplt.tight_layout()\nplt.show()\n",[5321,7048,7049,7059,7063,7068,7112,7155,7159,7164,7169,7174,7178,7193,7197,7202,7210,7227,7231,7242,7264,7286,7303,7316,7329,7346,7368,7373,7379,7390,7395,7413,7499,7555,7605,7655,7684,7694,7704,7731,7737,7743],{"__ignoreMap":5319},[5324,7050,7051,7053,7055,7057],{"class":5326,"line":5327},[5324,7052,5331],{"class":5330},[5324,7054,5335],{"class":5334},[5324,7056,5338],{"class":5330},[5324,7058,5341],{"class":5334},[5324,7060,7061],{"class":5326,"line":5344},[5324,7062,5361],{"emptyLinePlaceholder":5360},[5324,7064,7065],{"class":5326,"line":5357},[5324,7066,7067],{"class":5392},"# Дані: температура (°C) та продажі морозива (шт)\n",[5324,7069,7070,7073,7076,7078,7081,7083,7086,7088,7091,7093,7096,7098,7100,7102,7105,7107,7110],{"class":5326,"line":5364},[5324,7071,7072],{"class":5334},"temperature = np.array([",[5324,7074,7075],{"class":5377},"15",[5324,7077,5405],{"class":5334},[5324,7079,7080],{"class":5377},"18",[5324,7082,5405],{"class":5334},[5324,7084,7085],{"class":5377},"22",[5324,7087,5405],{"class":5334},[5324,7089,7090],{"class":5377},"25",[5324,7092,5405],{"class":5334},[5324,7094,7095],{"class":5377},"28",[5324,7097,5405],{"class":5334},[5324,7099,6512],{"class":5377},[5324,7101,5405],{"class":5334},[5324,7103,7104],{"class":5377},"32",[5324,7106,5405],{"class":5334},[5324,7108,7109],{"class":5377},"35",[5324,7111,6693],{"class":5334},[5324,7113,7114,7117,7119,7121,7124,7126,7129,7131,7133,7135,7138,7140,7143,7145,7148,7150,7153],{"class":5326,"line":5384},[5324,7115,7116],{"class":5334},"ice_cream_sales = np.array([",[5324,7118,5509],{"class":5377},[5324,7120,5405],{"class":5334},[5324,7122,7123],{"class":5377},"65",[5324,7125,5405],{"class":5334},[5324,7127,7128],{"class":5377},"80",[5324,7130,5405],{"class":5334},[5324,7132,6474],{"class":5377},[5324,7134,5405],{"class":5334},[5324,7136,7137],{"class":5377},"110",[5324,7139,5405],{"class":5334},[5324,7141,7142],{"class":5377},"125",[5324,7144,5405],{"class":5334},[5324,7146,7147],{"class":5377},"135",[5324,7149,5405],{"class":5334},[5324,7151,7152],{"class":5377},"150",[5324,7154,6693],{"class":5334},[5324,7156,7157],{"class":5326,"line":5389},[5324,7158,5361],{"emptyLinePlaceholder":5360},[5324,7160,7161],{"class":5326,"line":5396},[5324,7162,7163],{"class":5392},"# Спосіб 1: Вручну за математичною формулою\n",[5324,7165,7166],{"class":5326,"line":5422},[5324,7167,7168],{"class":5334},"temp_mean = temperature.mean()\n",[5324,7170,7171],{"class":5326,"line":5455},[5324,7172,7173],{"class":5334},"sales_mean = ice_cream_sales.mean()\n",[5324,7175,7176],{"class":5326,"line":5460},[5324,7177,5361],{"emptyLinePlaceholder":5360},[5324,7179,7180,7183,7186,7189,7191],{"class":5326,"line":5466},[5324,7181,7182],{"class":5334},"cov_manual = np.sum((temperature - temp_mean) * (ice_cream_sales - sales_mean)) \u002F (",[5324,7184,7185],{"class":5641},"len",[5324,7187,7188],{"class":5334},"(temperature) - ",[5324,7190,5312],{"class":5377},[5324,7192,5381],{"class":5334},[5324,7194,7195],{"class":5326,"line":5488},[5324,7196,5361],{"emptyLinePlaceholder":5360},[5324,7198,7199],{"class":5326,"line":5535},[5324,7200,7201],{"class":5392},"# Спосіб 2: Через матрицю коваріацій NumPy\n",[5324,7203,7204,7207],{"class":5326,"line":5556},[5324,7205,7206],{"class":5334},"cov_matrix = np.cov(temperature, ice_cream_sales)  ",[5324,7208,7209],{"class":5392},"# Матриця коваріацій 2×2\n",[5324,7211,7212,7215,7217,7219,7221,7224],{"class":5326,"line":5575},[5324,7213,7214],{"class":5334},"cov_numpy = cov_matrix[",[5324,7216,5434],{"class":5377},[5324,7218,5405],{"class":5334},[5324,7220,5312],{"class":5377},[5324,7222,7223],{"class":5334},"]  ",[5324,7225,7226],{"class":5392},"# Позадіагональний елемент [0,1] або [1,0]\n",[5324,7228,7229],{"class":5326,"line":5612},[5324,7230,5361],{"emptyLinePlaceholder":5360},[5324,7232,7233,7235,7237,7240],{"class":5326,"line":5627},[5324,7234,5642],{"class":5641},[5324,7236,5645],{"class":5334},[5324,7238,7239],{"class":5519},"\"Результати:\"",[5324,7241,5381],{"class":5334},[5324,7243,7244,7246,7248,7250,7253,7255,7258,7260,7262],{"class":5326,"line":5633},[5324,7245,5642],{"class":5641},[5324,7247,5645],{"class":5334},[5324,7249,5661],{"class":5660},[5324,7251,7252],{"class":5519},"\"  Коваріація (вручну):  ",[5324,7254,5667],{"class":5660},[5324,7256,7257],{"class":5334},"cov_manual",[5324,7259,6770],{"class":5660},[5324,7261,5732],{"class":5519},[5324,7263,5381],{"class":5334},[5324,7265,7266,7268,7270,7272,7275,7277,7280,7282,7284],{"class":5326,"line":5638},[5324,7267,5642],{"class":5641},[5324,7269,5645],{"class":5334},[5324,7271,5661],{"class":5660},[5324,7273,7274],{"class":5519},"\"  Коваріація (NumPy):   ",[5324,7276,5667],{"class":5660},[5324,7278,7279],{"class":5334},"cov_numpy",[5324,7281,6770],{"class":5660},[5324,7283,5732],{"class":5519},[5324,7285,5381],{"class":5334},[5324,7287,7288,7290,7292,7294,7296,7298,7301],{"class":5326,"line":5653},[5324,7289,5642],{"class":5641},[5324,7291,5645],{"class":5334},[5324,7293,5661],{"class":5660},[5324,7295,5732],{"class":5519},[5324,7297,5735],{"class":5584},[5324,7299,7300],{"class":5519},"Інтерпретація:\"",[5324,7302,5381],{"class":5334},[5324,7304,7305,7307,7309,7311,7314],{"class":5326,"line":5691},[5324,7306,5642],{"class":5641},[5324,7308,5645],{"class":5334},[5324,7310,5661],{"class":5660},[5324,7312,7313],{"class":5519},"\"  Cov > 0 → позитивний зв'язок\"",[5324,7315,5381],{"class":5334},[5324,7317,7318,7320,7322,7324,7327],{"class":5326,"line":5725},[5324,7319,5642],{"class":5641},[5324,7321,5645],{"class":5334},[5324,7323,5661],{"class":5660},[5324,7325,7326],{"class":5519},"\"  Коли температура зростає, продажі морозива теж зростають\"",[5324,7328,5381],{"class":5334},[5324,7330,7331,7333,7335,7337,7339,7341,7344],{"class":5326,"line":5743},[5324,7332,5642],{"class":5641},[5324,7334,5645],{"class":5334},[5324,7336,5661],{"class":5660},[5324,7338,5732],{"class":5519},[5324,7340,5735],{"class":5584},[5324,7342,7343],{"class":5519},"Проблема масштабу:\"",[5324,7345,5381],{"class":5334},[5324,7347,7348,7350,7352,7354,7357,7359,7361,7363,7366],{"class":5326,"line":6150},[5324,7349,5642],{"class":5641},[5324,7351,5645],{"class":5334},[5324,7353,5661],{"class":5660},[5324,7355,7356],{"class":5519},"\"  Чи ",[5324,7358,5667],{"class":5660},[5324,7360,7279],{"class":5334},[5324,7362,6770],{"class":5660},[5324,7364,7365],{"class":5519}," — це багато? Без контексту дисперсій відповісти неможливо!\"",[5324,7367,5381],{"class":5334},[5324,7369,7371],{"class":5326,"line":7370},25,[5324,7372,5361],{"emptyLinePlaceholder":5360},[5324,7374,7376],{"class":5326,"line":7375},26,[5324,7377,7378],{"class":5392},"# Візуалізація: розділення на квадранти відхилень навколо центру мас\n",[5324,7380,7382,7384,7386,7388],{"class":5326,"line":7381},27,[5324,7383,5331],{"class":5330},[5324,7385,5349],{"class":5334},[5324,7387,5338],{"class":5330},[5324,7389,5354],{"class":5334},[5324,7391,7393],{"class":5326,"line":7392},28,[5324,7394,5361],{"emptyLinePlaceholder":5360},[5324,7396,7398,7400,7402,7404,7407,7409,7411],{"class":5326,"line":7397},29,[5324,7399,5469],{"class":5334},[5324,7401,5472],{"class":5370},[5324,7403,5475],{"class":5334},[5324,7405,7406],{"class":5377},"9",[5324,7408,5405],{"class":5334},[5324,7410,5482],{"class":5377},[5324,7412,5485],{"class":5334},[5324,7414,7416,7419,7422,7424,7427,7429,7432,7434,7437,7439,7442,7444,7446,7449,7452,7455,7458,7461,7464,7467,7469,7472,7474,7477,7479,7482,7484,7487,7489,7492,7494,7497],{"class":5326,"line":7415},30,[5324,7417,7418],{"class":5334},"plt.axvline(temp_mean, ",[5324,7420,7421],{"class":5370},"color",[5324,7423,5374],{"class":5334},[5324,7425,7426],{"class":5519},"'#dc2626'",[5324,7428,5405],{"class":5334},[5324,7430,7431],{"class":5370},"linestyle",[5324,7433,5374],{"class":5334},[5324,7435,7436],{"class":5519},"'--'",[5324,7438,5405],{"class":5334},[5324,7440,7441],{"class":5370},"label",[5324,7443,5374],{"class":5334},[5324,7445,5661],{"class":5660},[5324,7447,7448],{"class":5519},"'$",[5324,7450,7451],{"class":5584},"\\\\",[5324,7453,7454],{"class":5519},"bar",[5324,7456,7457],{"class":5584},"{{",[5324,7459,7460],{"class":5519},"x",[5324,7462,7463],{"class":5584},"}}",[5324,7465,7466],{"class":5519}," = ",[5324,7468,5667],{"class":5660},[5324,7470,7471],{"class":5334},"temp_mean",[5324,7473,5673],{"class":5660},[5324,7475,7476],{"class":5519},"^",[5324,7478,7451],{"class":5584},[5324,7480,7481],{"class":5519},"circ",[5324,7483,7451],{"class":5584},[5324,7485,7486],{"class":5519},"mathrm",[5324,7488,7457],{"class":5584},[5324,7490,7491],{"class":5519},"C",[5324,7493,7463],{"class":5584},[5324,7495,7496],{"class":5519},"$'",[5324,7498,5381],{"class":5334},[5324,7500,7502,7505,7507,7509,7512,7514,7516,7518,7520,7522,7524,7526,7528,7530,7532,7534,7536,7539,7541,7543,7545,7548,7550,7553],{"class":5326,"line":7501},31,[5324,7503,7504],{"class":5334},"plt.axhline(sales_mean, ",[5324,7506,7421],{"class":5370},[5324,7508,5374],{"class":5334},[5324,7510,7511],{"class":5519},"'#2563eb'",[5324,7513,5405],{"class":5334},[5324,7515,7431],{"class":5370},[5324,7517,5374],{"class":5334},[5324,7519,7436],{"class":5519},[5324,7521,5405],{"class":5334},[5324,7523,7441],{"class":5370},[5324,7525,5374],{"class":5334},[5324,7527,5661],{"class":5660},[5324,7529,7448],{"class":5519},[5324,7531,7451],{"class":5584},[5324,7533,7454],{"class":5519},[5324,7535,7457],{"class":5584},[5324,7537,7538],{"class":5519},"y",[5324,7540,7463],{"class":5584},[5324,7542,7466],{"class":5519},[5324,7544,5667],{"class":5660},[5324,7546,7547],{"class":5334},"sales_mean",[5324,7549,5673],{"class":5660},[5324,7551,7552],{"class":5519},"$ шт'",[5324,7554,5381],{"class":5334},[5324,7556,7558,7561,7563,7565,7567,7569,7571,7573,7576,7578,7580,7582,7585,7587,7590,7592,7594,7596,7598,7600,7603],{"class":5326,"line":7557},32,[5324,7559,7560],{"class":5334},"plt.scatter(temperature, ice_cream_sales, ",[5324,7562,5504],{"class":5370},[5324,7564,5374],{"class":5334},[5324,7566,7128],{"class":5377},[5324,7568,5405],{"class":5334},[5324,7570,7421],{"class":5370},[5324,7572,5374],{"class":5334},[5324,7574,7575],{"class":5519},"'#0284c7'",[5324,7577,5405],{"class":5334},[5324,7579,5514],{"class":5370},[5324,7581,5374],{"class":5334},[5324,7583,7584],{"class":5519},"'#0369a1'",[5324,7586,5405],{"class":5334},[5324,7588,7589],{"class":5370},"zorder",[5324,7591,5374],{"class":5334},[5324,7593,5439],{"class":5377},[5324,7595,5405],{"class":5334},[5324,7597,7441],{"class":5370},[5324,7599,5374],{"class":5334},[5324,7601,7602],{"class":5519},"'Дні спостережень'",[5324,7604,5381],{"class":5334},[5324,7606,7608,7611,7613,7615,7618,7620,7622,7624,7627,7629,7631,7633,7636,7638,7640,7642,7644,7646,7648,7650,7653],{"class":5326,"line":7607},33,[5324,7609,7610],{"class":5334},"plt.scatter([temp_mean], [sales_mean], ",[5324,7612,5504],{"class":5370},[5324,7614,5374],{"class":5334},[5324,7616,7617],{"class":5377},"130",[5324,7619,5405],{"class":5334},[5324,7621,7421],{"class":5370},[5324,7623,5374],{"class":5334},[5324,7625,7626],{"class":5519},"'#eab308'",[5324,7628,5405],{"class":5334},[5324,7630,5514],{"class":5370},[5324,7632,5374],{"class":5334},[5324,7634,7635],{"class":5519},"'#ca8a04'",[5324,7637,5405],{"class":5334},[5324,7639,7589],{"class":5370},[5324,7641,5374],{"class":5334},[5324,7643,5482],{"class":5377},[5324,7645,5405],{"class":5334},[5324,7647,7441],{"class":5370},[5324,7649,5374],{"class":5334},[5324,7651,7652],{"class":5519},"'Центр мас'",[5324,7654,5381],{"class":5334},[5324,7656,7658,7660,7662,7665,7667,7669,7671,7674,7676,7678,7680,7682],{"class":5326,"line":7657},34,[5324,7659,5578],{"class":5334},[5324,7661,5661],{"class":5660},[5324,7663,7664],{"class":5519},"'Обчислення коваріації: Температура vs Продажі морозива (Cov = +",[5324,7666,5667],{"class":5660},[5324,7668,7279],{"class":5334},[5324,7670,6770],{"class":5660},[5324,7672,7673],{"class":5519},")'",[5324,7675,5405],{"class":5334},[5324,7677,5593],{"class":5370},[5324,7679,5374],{"class":5334},[5324,7681,5598],{"class":5519},[5324,7683,5381],{"class":5334},[5324,7685,7687,7689,7692],{"class":5326,"line":7686},35,[5324,7688,5538],{"class":5334},[5324,7690,7691],{"class":5519},"'Температура повітря (X, °C)'",[5324,7693,5381],{"class":5334},[5324,7695,7697,7699,7702],{"class":5326,"line":7696},36,[5324,7698,5559],{"class":5334},[5324,7700,7701],{"class":5519},"'Продажі морозива (Y, шт)'",[5324,7703,5381],{"class":5334},[5324,7705,7707,7709,7712,7714,7716,7718,7721,7723,7725,7727,7729],{"class":5326,"line":7706},37,[5324,7708,5615],{"class":5334},[5324,7710,7711],{"class":5660},"True",[5324,7713,5405],{"class":5334},[5324,7715,7431],{"class":5370},[5324,7717,5374],{"class":5334},[5324,7719,7720],{"class":5519},"':'",[5324,7722,5405],{"class":5334},[5324,7724,5494],{"class":5370},[5324,7726,5374],{"class":5334},[5324,7728,5530],{"class":5377},[5324,7730,5381],{"class":5334},[5324,7732,7734],{"class":5326,"line":7733},38,[5324,7735,7736],{"class":5334},"plt.legend()\n",[5324,7738,7740],{"class":5326,"line":7739},39,[5324,7741,7742],{"class":5334},"plt.tight_layout()\n",[5324,7744,7746],{"class":5326,"line":7745},40,[5324,7747,5630],{"class":5334},[5754,7749,7750,7757],{"v-slot:output":5319},[5278,7751,7752],{},[5759,7753],{"alt":7754,"className":7755,"src":7756},"Обчислення коваріації в NumPy: квадранти спільної мінливості температури та продажів морозива",[5763],"\u002Fimages\u002Fai-python\u002Fstatistics-basics\u002Fcorrelation\u002Fcovariance-computation.png",[5314,7758,7761],{"className":7759,"code":7760,"language":5770},[5768],"Результати:\n  Коваріація (вручну):  242.68\n  Коваріація (NumPy):   242.68\n\nІнтерпретація:\n  Cov > 0 → позитивний зв'язок\n  Коли температура зростає, продажі морозива теж зростають\n\nПроблема масштабу:\n  Чи 242.68 — це багато? Без контексту дисперсій відповісти неможливо!\n",[5321,7762,7760],{"__ignoreMap":5319},[7764,7765,7767],"note",{"title":7766},"Фундаментальні алгебраїчні властивості коваріації",[5779,7768,7769,7775,7781,7787],{},[5201,7770,7771,7774],{},[5895,7772],{"tex":7773,":inline":5898},"\\text{Cov}(X, X) = \\text{Var}(X) = \\sigma_X^2"," — коваріація випадкової величини зі самою собою дорівнює її дисперсії.",[5201,7776,7777,7780],{},[5895,7778],{"tex":7779,":inline":5898},"\\text{Cov}(X, Y) = \\text{Cov}(Y, X)"," — операція коваріації строго симетрична.",[5201,7782,7783,7786],{},[5895,7784],{"tex":7785,":inline":5898},"\\text{Cov}(aX + c, bY + d) = ab \\cdot \\text{Cov}(X, Y)"," — білінійність: адитивні константи зникають, а мультиплікативні коефіцієнти виносяться наперед.",[5201,7788,7789,7790,5808,7792,7794,7795,5991,7798,7801],{},"Якщо змінні ",[5895,7791],{"tex":6166,":inline":5898},[5895,7793],{"tex":6173,":inline":5898}," незалежні, то ",[5895,7796],{"tex":7797,":inline":5898},"\\text{Cov}(X, Y) = 0",[5217,7799,7800],{},"Увага:"," зворотне твердження не завжди істинне (нульова коваріація гарантує лише відсутність лінійного зв'язку, але не виключає нелінійну залежність).",[5270,7803],{},[5273,7805,7807],{"id":7806},"кореляція-пірсона-pearson-correlation-coefficient","Кореляція Пірсона (Pearson Correlation Coefficient)",[5278,7809,7810,5230,7813,6002,7816,7819,7820,7823,7824,5812],{},[5217,7811,7812],{},"Коефіцієнт лінійної кореляції Пірсона",[5895,7814],{"tex":7815,":inline":5898},"r",[5895,7817],{"tex":7818,":inline":5898},"\\rho_{XY}",") — це ",[5217,7821,7822],{},"нормалізована коваріація",", значення якої завжди суворо обмежені інтервалом ",[5895,7825],{"tex":7826,":inline":5898},"[-1, +1]",[5306,7828,7830],{"id":7829},"формула-кореляції","Формула кореляції",[5895,7832],{"tex":7833},"r = \\frac{\\text{Cov}(X, Y)}{\\sigma_X \\cdot \\sigma_Y}",[5278,7835,7836],{},"В розгорнутому алгебраїчному вигляді для вибіркових спостережень:",[5895,7838],{"tex":7839},"r = \\frac{\\sum_{i=1}^{n} (x_i - \\bar{x})(y_i - \\bar{y})}{\\sqrt{\\sum_{i=1}^{n}(x_i - \\bar{x})^2} \\cdot \\sqrt{\\sum_{i=1}^{n}(y_i - \\bar{y})^2}}",[5193,7841,7844,7850],{"icon":7842,"title":7843},"i-lucide-binary","Анатомія математичної формули кореляції Пірсона",[5278,7845,7846,7847,7849],{},"Щоб глибинно зрозуміти, чому коефіцієнт Пірсона працює бездоганно і гарантовано потрапляє в діапазон ",[5895,7848],{"tex":7826,":inline":5898},", розберемо його математичну структуру на складові блоки:",[5779,7851,7852,7872,7912],{},[5201,7853,7854,6250,7863],{},[5217,7855,7856,7857,5808,7860,6507],{},"Центрування даних (",[5895,7858],{"tex":7859,":inline":5898},"x_i - \\bar{x}",[5895,7861],{"tex":7862,":inline":5898},"y_i - \\bar{y}",[5198,7864,7865],{},[5201,7866,7867,7868,7871],{},"Кожне окреме спостереження перетворюється на вектор відхилення від свого середнього. Це робить показник інваріантним до зсуву координат: якщо до кожного зросту або ваги додати константу ",[5895,7869],{"tex":7870,":inline":5898},"+100",", кореляція абсолютно не зміниться.",[5201,7873,7874,6250,7877],{},[5217,7875,7876],{},"Чисельник — узгодженість напрямку (спільна варіація)",[5198,7878,7879,7892,7899,7906],{},[5201,7880,7881,7882,7884,7885,7887,7888,7891],{},"Якщо об'єкт має і ",[5895,7883],{"tex":6291,":inline":5898},", і ",[5895,7886],{"tex":6297,":inline":5898}," вище за середнє: ",[5895,7889],{"tex":7890,":inline":5898},"(+) \\times (+) = \\mathbf{+}"," (додатний внесок).",[5201,7893,7894,7895,7898],{},"Якщо об'єкт має обидва параметри нижче за середнє: ",[5895,7896],{"tex":7897,":inline":5898},"(-) \\times (-) = \\mathbf{+}"," (підсилює позитивний зв'язок!).",[5201,7900,7901,7902,7905],{},"Якщо одне вище, а інше нижче: ",[5895,7903],{"tex":7904,":inline":5898},"(+) \\times (-) = \\mathbf{-}"," (штовхає кореляцію у від'ємну сторону).",[5201,7907,7908,7909,5812],{},"Сума всіх цих добутків у чисельнику є ненормалізованою коваріацією ",[5895,7910],{"tex":7911,":inline":5898},"\\sum_{i=1}^n (x_i - \\bar{x})(y_i - \\bar{y})",[5201,7913,7914,6250,7917],{},[5217,7915,7916],{},"Знаменник — масштабний нормалізатор (евклідові норми)",[5198,7918,7919,7932,7952],{},[5201,7920,7921,7922,7925,7926,5808,7929,5812],{},"Добуток квадратних коренів — це добуток довжин (евклідових ",[5895,7923],{"tex":7924,":inline":5898},"L_2","-норм) центрованих векторів ",[5895,7927],{"tex":7928,":inline":5898},"\\vec{u} = \\mathbf{x} - \\bar{x}",[5895,7930],{"tex":7931,":inline":5898},"\\vec{v} = \\mathbf{y} - \\bar{y}",[5201,7933,7934,7935,7937,7938,7948,7949],{},"З погляду лінійної алгебри формула ",[5895,7936],{"tex":7815,":inline":5898}," є ",[5217,7939,7940,7941,7944,7945],{},"косинусом кута ",[5895,7942],{"tex":7943,":inline":5898},"\\theta"," між двома центрованими векторами в багатовимірному просторі ",[5895,7946],{"tex":7947,":inline":5898},"\\mathbb{R}^n",":\n",[5895,7950],{"tex":7951},"r = \\cos(\\theta) = \\frac{\\langle \\vec{u}, \\vec{v} \\rangle}{\\|\\vec{u}\\|_2 \\cdot \\|\\vec{v}\\|_2} = \\frac{\\sum_{i=1}^n u_i v_i}{\\sqrt{\\sum_{i=1}^n u_i^2} \\cdot \\sqrt{\\sum_{i=1}^n v_i^2}}",[5201,7953,7954,7955,5230,7958,7961,7962,7964,7965,7968,7969,7972,7973,7976,7977,7980,7981,7968,7984,5812],{},"За ",[5217,7956,7957],{},"нерівністю Коші-Буняковського",[5895,7959],{"tex":7960,":inline":5898},"|\\langle \\vec{u}, \\vec{v} \\rangle| \\leq \\|\\vec{u}\\|_2 \\|\\vec{v}\\|_2","), косинус завжди належить діапазону ",[5895,7963],{"tex":7826,":inline":5898},". Якщо вектори паралельні й однаково спрямовані (",[5895,7966],{"tex":7967,":inline":5898},"\\theta = 0^\\circ","), ",[5895,7970],{"tex":7971,":inline":5898},"r = \\cos(0) = +1",". Якщо вектори ортогональні (",[5895,7974],{"tex":7975,":inline":5898},"\\theta = 90^\\circ","), лінійний зв'язок відсутній (",[5895,7978],{"tex":7979,":inline":5898},"r = 0","). Якщо вони спрямовані в протилежні боки (",[5895,7982],{"tex":7983,":inline":5898},"\\theta = 180^\\circ",[5895,7985],{"tex":7986,":inline":5898},"r = -1",[5306,7988,7990],{"id":7989},"інтерпретація-значень-r","Інтерпретація значень r",[6273,7992,7993,8006],{},[6276,7994,7995],{},[6279,7996,7997,8000,8003],{},[6282,7998,7999],{"align":6284},"Значення r",[6282,8001,8002],{"align":6284},"Інтерпретація",[6282,8004,8005],{"align":6284},"Візуальна картина",[6322,8007,8008,8021,8034,8047,8060,8073,8085,8098,8111],{},[6279,8009,8010,8015,8018],{},[6327,8011,8012],{"align":6284},[5217,8013,8014],{},"r = +1",[6327,8016,8017],{"align":6284},"Ідеальний позитивний лінійний зв'язок",[6327,8019,8020],{"align":6284},"Точки лежать на прямій ↗",[6279,8022,8023,8028,8031],{},[6327,8024,8025],{"align":6284},[5217,8026,8027],{},"0.7 \u003C r \u003C 1",[6327,8029,8030],{"align":6284},"Сильний позитивний зв'язок",[6327,8032,8033],{"align":6284},"Чітка висхідна хмара",[6279,8035,8036,8041,8044],{},[6327,8037,8038],{"align":6284},[5217,8039,8040],{},"0.3 \u003C r \u003C 0.7",[6327,8042,8043],{"align":6284},"Помірний позитивний зв'язок",[6327,8045,8046],{"align":6284},"Розмита висхідна хмара",[6279,8048,8049,8054,8057],{},[6327,8050,8051],{"align":6284},[5217,8052,8053],{},"0 \u003C r \u003C 0.3",[6327,8055,8056],{"align":6284},"Слабкий позитивний зв'язок",[6327,8058,8059],{"align":6284},"Майже хаотична хмара",[6279,8061,8062,8067,8070],{},[6327,8063,8064],{"align":6284},[5217,8065,8066],{},"r ≈ 0",[6327,8068,8069],{"align":6284},"Немає лінійного зв'язку",[6327,8071,8072],{"align":6284},"Хаотична хмара (коло, U-форма)",[6279,8074,8075,8080,8083],{},[6327,8076,8077],{"align":6284},[5217,8078,8079],{},"-0.3 \u003C r \u003C 0",[6327,8081,8082],{"align":6284},"Слабкий негативний зв'язок",[6327,8084,8059],{"align":6284},[6279,8086,8087,8092,8095],{},[6327,8088,8089],{"align":6284},[5217,8090,8091],{},"-0.7 \u003C r \u003C -0.3",[6327,8093,8094],{"align":6284},"Помірний негативний зв'язок",[6327,8096,8097],{"align":6284},"Розмита спадна хмара",[6279,8099,8100,8105,8108],{},[6327,8101,8102],{"align":6284},[5217,8103,8104],{},"-1 \u003C r \u003C -0.7",[6327,8106,8107],{"align":6284},"Сильний негативний зв'язок",[6327,8109,8110],{"align":6284},"Чітка спадна хмара",[6279,8112,8113,8118,8121],{},[6327,8114,8115],{"align":6284},[5217,8116,8117],{},"r = −1",[6327,8119,8120],{"align":6284},"Ідеальний негативний лінійний зв'язок",[6327,8122,8123],{"align":6284},"Точки лежать на прямій ↘",[8125,8126,8127,8132,8152],"tip",{},[5278,8128,8129],{},[5217,8130,8131],{},"Емпіричні пороги шкали Чеддока:",[5198,8133,8134,8140,8146],{},[5201,8135,8136,8139],{},[5895,8137],{"tex":8138,":inline":5898},"|r| \u003C 0.3"," — слабка кореляція",[5201,8141,8142,8145],{},[5895,8143],{"tex":8144,":inline":5898},"0.3 \\le |r| \u003C 0.7"," — помірна кореляція",[5201,8147,8148,8151],{},[5895,8149],{"tex":8150,":inline":5898},"|r| \\ge 0.7"," — сильна (висока) кореляція",[5278,8153,8154,8155,8158,8159,8162],{},"Контекст має вирішальне значення: в експериментальній фізиці чи мікроелектроніці значення ",[5895,8156],{"tex":8157,":inline":5898},"r = 0.8"," може вважатися ненадійним, тоді як в економіці, медицині чи аналізі поведінки користувачів ",[5895,8160],{"tex":8161,":inline":5898},"r = 0.5"," є визначним інсайтом!",[5306,8164,8166],{"id":8165},"практичні-приклади-кореляції-від-it-інфраструктури-до-повсякденності","Практичні приклади кореляції: від IT-інфраструктури до повсякденності",[5278,8168,8169,8170,8172],{},"Щоб абстрактні числові значення ",[5895,8171],{"tex":7815,":inline":5898}," набули відчутного інженерного сенсу, проаналізуймо взаємозв'язки змінних у трьох ключових практичних сферах:",[8174,8175,8176,8291,8386],"accordion",{},[8177,8178,8180,8183],"accordion-item",{"icon":221,"label":8179},"Сфера 1: IT-інфраструктура, Web-розробка та Highload",[5278,8181,8182],{},"У сфері системного адміністрування, хмарних обчислень та бекенд-розробки кореляційний аналіз є щоденним інструментом моніторингу метрик і виявлення вузьких місць:",[5198,8184,8185,8223,8258],{},[5201,8186,8187,8193],{},[5217,8188,8189,8190,5916],{},"Сильна позитивна кореляція (",[5895,8191],{"tex":8192,":inline":5898},"r \\approx +0.85 \\dots +0.95",[5198,8194,8195,8206,8213],{},[5201,8196,8197,8202,8203,6025],{},[5217,8198,8199,8200,6250],{},"Змінна ",[5895,8201],{"tex":6166,":inline":5898}," Кількість одночасних активних HTTP-запитів до бекенд-сервісу (",[5232,8204,8205],{},"Requests Per Second, RPS",[5201,8207,8208,8212],{},[5217,8209,8199,8210,6250],{},[5895,8211],{"tex":6173,":inline":5898}," Споживання оперативної пам'яті (RAM) процесом додатку або пулом воркерів.",[5201,8214,8215,8218,8219,8222],{},[5232,8216,8217],{},"Суть зв'язку:"," Кожен новий паралельний клієнт потребує створення сокетів, виділення мережевих буферів, десеріалізації JSON та розміщення об'єктів сесії в купі (",[5232,8220,8221],{},"heap memory","). Зі зростанням потоку запитів споживання пам'яті майже монотонно зростає.",[5201,8224,8225,8231],{},[5217,8226,8227,8228,5916],{},"Сильна негативна кореляція (",[5895,8229],{"tex":8230,":inline":5898},"r \\approx -0.80 \\dots -0.90",[5198,8232,8233,8243,8253],{},[5201,8234,8235,8239,8240,6025],{},[5217,8236,8199,8237,6250],{},[5895,8238],{"tex":6166,":inline":5898}," Відсоток попадань у швидкий кеш Redis \u002F Memcached (",[5232,8241,8242],{},"Cache Hit Ratio",[5201,8244,8245,8249,8250,6025],{},[5217,8246,8199,8247,6250],{},[5895,8248],{"tex":6173,":inline":5898}," Середній час відповіді бекенду клієнту (",[5232,8251,8252],{},"Response Latency \u002F TTFB",[5201,8254,8255,8257],{},[5232,8256,8217],{}," Чим ефективніше працює кеш (ближче до 100%), тим рідше запити доходять до важкої реляційної бази даних. Відповідь віддається з RAM за частки мілісекунди, що радикально скорочує сумарну затримку.",[5201,8259,8260,8266],{},[5217,8261,8262,8263,5916],{},"Нульова автономна кореляція (",[5895,8264],{"tex":8265,":inline":5898},"r \\approx 0.00",[5198,8267,8268,8275,8286],{},[5201,8269,8270,8274],{},[5217,8271,8199,8272,6250],{},[5895,8273],{"tex":6166,":inline":5898}," Довжина нікнейма розробника на GitHub або кількість символів у назві git-гілки.",[5201,8276,8277,8281,8282,8285],{},[5217,8278,8199,8279,6250],{},[5895,8280],{"tex":6173,":inline":5898}," Частота виникнення критичних помилок (",[5232,8283,8284],{},"Production Bug Rate",") чи швидкість закриття Pull Request'ів.",[5201,8287,8288,8290],{},[5232,8289,8217],{}," Фізичні атрибути текстових імен жодним чином не визначають архітектурну зрілість коду та якість написання тестів.",[8177,8292,8295,8298],{"icon":8293,"label":8294},"i-lucide-graduation-cap","Сфера 2: Студентське життя, навчання та продуктивність",[5278,8296,8297],{},"Життєві приклади, з якими щодня стикається кожен студент і розробник-початківець:",[5198,8299,8300,8329,8358],{},[5201,8301,8302,8308],{},[5217,8303,8304,8305,5916],{},"Помітна позитивна кореляція (",[5895,8306],{"tex":8307,":inline":5898},"r \\approx +0.75",[5198,8309,8310,8317,8324],{},[5201,8311,8312,8316],{},[5217,8313,8199,8314,6250],{},[5895,8315],{"tex":6166,":inline":5898}," Кількість годин, присвячених практичному написанню коду, розбору помилок та реалізації навчальних проєктів.",[5201,8318,8319,8323],{},[5217,8320,8199,8321,6250],{},[5895,8322],{"tex":6173,":inline":5898}," Підсумковий бал за екзаменаційний проєкт або успішність проходження технічного скринінгу на позицію Trainee\u002FJunior.",[5201,8325,8326,8328],{},[5232,8327,8217],{}," Практична моторика, уміння читати стек-трейси та самостійний дебагінг прямо трансформуються у впевненість під час лайвкодингу та глибину відповідей.",[5201,8330,8331,8337],{},[5217,8332,8333,8334,5916],{},"Помітна негативна кореляція (",[5895,8335],{"tex":8336,":inline":5898},"r \\approx -0.70",[5198,8338,8339,8346,8353],{},[5201,8340,8341,8345],{},[5217,8342,8199,8343,6250],{},[5895,8344],{"tex":6166,":inline":5898}," Кількість годин нічного безперервного скролінгу соцмереж чи комп'ютерних ігор перед дедлайном.",[5201,8347,8348,8352],{},[5217,8349,8199,8350,6250],{},[5895,8351],{"tex":6173,":inline":5898}," Швидкість концентрації, когнітивна витривалість та уважність наступного ранку.",[5201,8354,8355,8357],{},[5232,8356,8217],{}," Дефіцит глибоких фаз сну безпосередньо пригнічує когнітивні функції, призводячи до прикрих неуважних помилок (наприклад, пропущених точок з комою чи неправильних назв змінних).",[5201,8359,8360,8365],{},[5217,8361,8362,8363,5916],{},"Нульова кореляція (",[5895,8364],{"tex":8265,":inline":5898},[5198,8366,8367,8374,8381],{},[5201,8368,8369,8373],{},[5217,8370,8199,8371,6250],{},[5895,8372],{"tex":6166,":inline":5898}," Розмір взуття студента або його зріст.",[5201,8375,8376,8380],{},[5217,8377,8199,8378,6250],{},[5895,8379],{"tex":6173,":inline":5898}," Оцінка з курсу дискретної математики, теорії ймовірностей чи лінійної алгебри.",[5201,8382,8383,8385],{},[5232,8384,8217],{}," Антропометричні показники тіла не мають жодної залежності з розвитком аналітичного та математичного апарату мислення.",[8177,8387,8390,8393],{"icon":8388,"label":8389},"i-lucide-shopping-cart","Сфера 3: Електронна комерція (E-commerce) та аналітика поведінки клієнтів",[5278,8391,8392],{},"У комерційній аналітиці даних кореляція дає змогу виявляти точки втрати прибутку та фактори залучення клієнтів:",[5198,8394,8395,8429,8464],{},[5201,8396,8397,8402],{},[5217,8398,8189,8399,5916],{},[5895,8400],{"tex":8401,":inline":5898},"r \\approx +0.80",[5198,8403,8404,8414,8424],{},[5201,8405,8406,8410,8411,6025],{},[5217,8407,8199,8408,6250],{},[5895,8409],{"tex":6166,":inline":5898}," Бюджет на таргетовану та контекстну рекламу (",[5232,8412,8413],{},"Ad Spend",[5201,8415,8416,8420,8421,6025],{},[5217,8417,8199,8418,6250],{},[5895,8419],{"tex":6173,":inline":5898}," Щоденна кількість унікальних відвідувачів інтернет-магазину (",[5232,8422,8423],{},"Unique Visitors \u002F DAU",[5201,8425,8426,8428],{},[5232,8427,8217],{}," Збільшення кількості показів якісно налаштованої реклами прямо пропорційно розширює верхню ланку маркетингової воронки.",[5201,8430,8431,8437],{},[5217,8432,8433,8434,5916],{},"Помірна негативна кореляція (",[5895,8435],{"tex":8436,":inline":5898},"r \\approx -0.65 \\dots -0.75",[5198,8438,8439,8446,8456],{},[5201,8440,8441,8445],{},[5217,8442,8199,8443,6250],{},[5895,8444],{"tex":6166,":inline":5898}," Вартість обов'язкової платної доставки або кількість полів у формі оформлення замовлення.",[5201,8447,8448,8452,8453,6025],{},[5217,8449,8199,8450,6250],{},[5895,8451],{"tex":6173,":inline":5898}," Відсоток успішного оформлення покупок (",[5232,8454,8455],{},"Checkout Conversion Rate",[5201,8457,8458,8460,8461,6025],{},[5232,8459,8217],{}," Неочікувані додаткові збори або надмірна бюрократизація чекауту викликають психологічний опір і призводять до «покинутих кошиків» (",[5232,8462,8463],{},"Cart Abandonment",[5201,8465,8466,8472],{},[5217,8467,8468,8469,5916],{},"Хрестоматійний приклад хибної кореляції (Spurious Correlation, ",[5895,8470],{"tex":8471,":inline":5898},"r > +0.85",[5198,8473,8474,8481,8488],{},[5201,8475,8476,8480],{},[5217,8477,8199,8478,6250],{},[5895,8479],{"tex":6166,":inline":5898}," Обсяг продажів морозива в місті.",[5201,8482,8483,8487],{},[5217,8484,8199,8485,6250],{},[5895,8486],{"tex":6173,":inline":5898}," Кількість випадків сонячних опіків на пляжах міста.",[5201,8489,8490,8493,8494,8496,8497,8500],{},[5232,8491,8492],{},"Увага, пастка:"," Математично ",[5895,8495],{"tex":8471,":inline":5898},", проте купівля морозива жодним чином не обпікає шкіру! Обидва показники одночасно стимулюються ",[5217,8498,8499],{},"третім прихованим фактором (конфаундером)"," — спекотною сонячною літньою погодою.",[5306,8502,8504],{"id":8503},"обчислення-кореляції-в-numpy-та-scipy","Обчислення кореляції в NumPy та SciPy",[5297,8506,8508,8514],{"kernel":5299,"title":8507},"correlation_calculation.ipynb",[5302,8509,8510],{"type":5304},[5306,8511,8513],{"id":8512},"обчислення-кореляції-пірсона-три-способи","Обчислення кореляції Пірсона: три способи",[5302,8515,8516,9332],{"execution-count":5312},[5314,8517,8519],{"className":5316,"code":8518,"language":5318,"meta":5319,"style":5319},"import numpy as np\nfrom scipy import stats\n\n# Дані: температура та продажі морозива\ntemperature = np.array([15, 18, 22, 25, 28, 30, 32, 35])\nice_cream_sales = np.array([50, 65, 80, 95, 110, 125, 135, 150])\n\n# Спосіб 1: Вручну (за формулою через коваріацію та стандарти)\ncov = np.cov(temperature, ice_cream_sales)[0, 1]\nstd_temp = temperature.std(ddof=1)\nstd_sales = ice_cream_sales.std(ddof=1)\nr_manual = cov \u002F (std_temp * std_sales)\n\n# Спосіб 2: np.corrcoef() — повертає матрицю кореляцій 2×2\ncorr_matrix = np.corrcoef(temperature, ice_cream_sales)\nr_numpy = corr_matrix[0, 1]\n\n# Спосіб 3: scipy.stats.pearsonr() — повертає r та p-value для перевірки гіпотези\nr_scipy, p_value = stats.pearsonr(temperature, ice_cream_sales)\n\nprint(\"Результати обчислення кореляції:\")\nprint(f\"  Вручну:        r = {r_manual:.4f}\")\nprint(f\"  np.corrcoef(): r = {r_numpy:.4f}\")\nprint(f\"  scipy:         r = {r_scipy:.4f}, p-value = {p_value:.6f}\")\nprint(f\"\\nІнтерпретація:\")\nprint(f\"  r = {r_scipy:.3f} → майже ідеальний позитивний лінійний зв'язок\")\nprint(f\"  p-value \u003C 0.05 → зв'язок статистично значущий (нульова гіпотеза про r=0 відкидається)\")\n\n# Візуалізація: порівняння сирих одиниць та стандартизованого Z-простору\nimport matplotlib.pyplot as plt\n\nslope, intercept, r_val, p_val, _ = stats.linregress(temperature, ice_cream_sales)\nz_temp = (temperature - temperature.mean()) \u002F std_temp\nz_sales = (ice_cream_sales - ice_cream_sales.mean()) \u002F std_sales\n\nfig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 5.5))\nax1.scatter(temperature, ice_cream_sales, color='#0284c7', s=60, label='Дані')\nx_grid = np.linspace(14, 36, 100)\nax1.plot(x_grid, slope * x_grid + intercept, color='#ea580c', lw=2, label=f'Тренд ($r = {r_val:.3f}$)')\nax1.set_title('Вихідні одиниці (Температура ↔ Продажі)', fontweight='bold')\nax1.set_xlabel('Температура (°C)')\nax1.set_ylabel('Продажі (шт)')\nax1.grid(True, linestyle=':', alpha=0.5)\nax1.legend()\n\nax2.scatter(z_temp, z_sales, color='#16a34a', s=60, label='Z-точки')\nz_grid = np.linspace(-1.8, 1.8, 100)\nax2.plot(z_grid, r_val * z_grid, color='#dc2626', lw=2, label=f'Нахил = r = {r_val:.3f}')\nax2.axvline(0, color='#94a3b8', linestyle='--')\nax2.axhline(0, color='#94a3b8', linestyle='--')\nax2.set_title('Стандартизований Z-простір: кут нахилу = r', fontweight='bold')\nax2.set_xlabel('Z-оцінка температури')\nax2.set_ylabel('Z-оцінка продажів')\nax2.grid(True, linestyle=':', alpha=0.5)\nax2.legend()\nplt.tight_layout()\nplt.show()\n",[5321,8520,8521,8531,8544,8548,8553,8589,8625,8629,8634,8648,8662,8675,8680,8684,8689,8694,8707,8711,8716,8721,8725,8736,8759,8781,8814,8830,8853,8866,8870,8875,8885,8889,8894,8899,8904,8908,8934,8964,8982,9026,9044,9055,9066,9092,9098,9103,9135,9154,9196,9223,9249,9268,9279,9290,9316,9322,9327],{"__ignoreMap":5319},[5324,8522,8523,8525,8527,8529],{"class":5326,"line":5327},[5324,8524,5331],{"class":5330},[5324,8526,5335],{"class":5334},[5324,8528,5338],{"class":5330},[5324,8530,5341],{"class":5334},[5324,8532,8533,8536,8539,8541],{"class":5326,"line":5344},[5324,8534,8535],{"class":5330},"from",[5324,8537,8538],{"class":5334}," scipy ",[5324,8540,5331],{"class":5330},[5324,8542,8543],{"class":5334}," stats\n",[5324,8545,8546],{"class":5326,"line":5357},[5324,8547,5361],{"emptyLinePlaceholder":5360},[5324,8549,8550],{"class":5326,"line":5364},[5324,8551,8552],{"class":5392},"# Дані: температура та продажі морозива\n",[5324,8554,8555,8557,8559,8561,8563,8565,8567,8569,8571,8573,8575,8577,8579,8581,8583,8585,8587],{"class":5326,"line":5384},[5324,8556,7072],{"class":5334},[5324,8558,7075],{"class":5377},[5324,8560,5405],{"class":5334},[5324,8562,7080],{"class":5377},[5324,8564,5405],{"class":5334},[5324,8566,7085],{"class":5377},[5324,8568,5405],{"class":5334},[5324,8570,7090],{"class":5377},[5324,8572,5405],{"class":5334},[5324,8574,7095],{"class":5377},[5324,8576,5405],{"class":5334},[5324,8578,6512],{"class":5377},[5324,8580,5405],{"class":5334},[5324,8582,7104],{"class":5377},[5324,8584,5405],{"class":5334},[5324,8586,7109],{"class":5377},[5324,8588,6693],{"class":5334},[5324,8590,8591,8593,8595,8597,8599,8601,8603,8605,8607,8609,8611,8613,8615,8617,8619,8621,8623],{"class":5326,"line":5389},[5324,8592,7116],{"class":5334},[5324,8594,5509],{"class":5377},[5324,8596,5405],{"class":5334},[5324,8598,7123],{"class":5377},[5324,8600,5405],{"class":5334},[5324,8602,7128],{"class":5377},[5324,8604,5405],{"class":5334},[5324,8606,6474],{"class":5377},[5324,8608,5405],{"class":5334},[5324,8610,7137],{"class":5377},[5324,8612,5405],{"class":5334},[5324,8614,7142],{"class":5377},[5324,8616,5405],{"class":5334},[5324,8618,7147],{"class":5377},[5324,8620,5405],{"class":5334},[5324,8622,7152],{"class":5377},[5324,8624,6693],{"class":5334},[5324,8626,8627],{"class":5326,"line":5396},[5324,8628,5361],{"emptyLinePlaceholder":5360},[5324,8630,8631],{"class":5326,"line":5422},[5324,8632,8633],{"class":5392},"# Спосіб 1: Вручну (за формулою через коваріацію та стандарти)\n",[5324,8635,8636,8639,8641,8643,8645],{"class":5326,"line":5455},[5324,8637,8638],{"class":5334},"cov = np.cov(temperature, ice_cream_sales)[",[5324,8640,5434],{"class":5377},[5324,8642,5405],{"class":5334},[5324,8644,5312],{"class":5377},[5324,8646,8647],{"class":5334},"]\n",[5324,8649,8650,8653,8656,8658,8660],{"class":5326,"line":5460},[5324,8651,8652],{"class":5334},"std_temp = temperature.std(",[5324,8654,8655],{"class":5370},"ddof",[5324,8657,5374],{"class":5334},[5324,8659,5312],{"class":5377},[5324,8661,5381],{"class":5334},[5324,8663,8664,8667,8669,8671,8673],{"class":5326,"line":5466},[5324,8665,8666],{"class":5334},"std_sales = ice_cream_sales.std(",[5324,8668,8655],{"class":5370},[5324,8670,5374],{"class":5334},[5324,8672,5312],{"class":5377},[5324,8674,5381],{"class":5334},[5324,8676,8677],{"class":5326,"line":5488},[5324,8678,8679],{"class":5334},"r_manual = cov \u002F (std_temp * std_sales)\n",[5324,8681,8682],{"class":5326,"line":5535},[5324,8683,5361],{"emptyLinePlaceholder":5360},[5324,8685,8686],{"class":5326,"line":5556},[5324,8687,8688],{"class":5392},"# Спосіб 2: np.corrcoef() — повертає матрицю кореляцій 2×2\n",[5324,8690,8691],{"class":5326,"line":5575},[5324,8692,8693],{"class":5334},"corr_matrix = np.corrcoef(temperature, ice_cream_sales)\n",[5324,8695,8696,8699,8701,8703,8705],{"class":5326,"line":5612},[5324,8697,8698],{"class":5334},"r_numpy = corr_matrix[",[5324,8700,5434],{"class":5377},[5324,8702,5405],{"class":5334},[5324,8704,5312],{"class":5377},[5324,8706,8647],{"class":5334},[5324,8708,8709],{"class":5326,"line":5627},[5324,8710,5361],{"emptyLinePlaceholder":5360},[5324,8712,8713],{"class":5326,"line":5633},[5324,8714,8715],{"class":5392},"# Спосіб 3: scipy.stats.pearsonr() — повертає r та p-value для перевірки гіпотези\n",[5324,8717,8718],{"class":5326,"line":5638},[5324,8719,8720],{"class":5334},"r_scipy, p_value = stats.pearsonr(temperature, ice_cream_sales)\n",[5324,8722,8723],{"class":5326,"line":5653},[5324,8724,5361],{"emptyLinePlaceholder":5360},[5324,8726,8727,8729,8731,8734],{"class":5326,"line":5691},[5324,8728,5642],{"class":5641},[5324,8730,5645],{"class":5334},[5324,8732,8733],{"class":5519},"\"Результати обчислення кореляції:\"",[5324,8735,5381],{"class":5334},[5324,8737,8738,8740,8742,8744,8747,8749,8752,8755,8757],{"class":5326,"line":5725},[5324,8739,5642],{"class":5641},[5324,8741,5645],{"class":5334},[5324,8743,5661],{"class":5660},[5324,8745,8746],{"class":5519},"\"  Вручну:        r = ",[5324,8748,5667],{"class":5660},[5324,8750,8751],{"class":5334},"r_manual",[5324,8753,8754],{"class":5660},":.4f}",[5324,8756,5732],{"class":5519},[5324,8758,5381],{"class":5334},[5324,8760,8761,8763,8765,8767,8770,8772,8775,8777,8779],{"class":5326,"line":5743},[5324,8762,5642],{"class":5641},[5324,8764,5645],{"class":5334},[5324,8766,5661],{"class":5660},[5324,8768,8769],{"class":5519},"\"  np.corrcoef(): r = ",[5324,8771,5667],{"class":5660},[5324,8773,8774],{"class":5334},"r_numpy",[5324,8776,8754],{"class":5660},[5324,8778,5732],{"class":5519},[5324,8780,5381],{"class":5334},[5324,8782,8783,8785,8787,8789,8792,8794,8797,8799,8802,8804,8807,8810,8812],{"class":5326,"line":6150},[5324,8784,5642],{"class":5641},[5324,8786,5645],{"class":5334},[5324,8788,5661],{"class":5660},[5324,8790,8791],{"class":5519},"\"  scipy:         r = ",[5324,8793,5667],{"class":5660},[5324,8795,8796],{"class":5334},"r_scipy",[5324,8798,8754],{"class":5660},[5324,8800,8801],{"class":5519},", p-value = ",[5324,8803,5667],{"class":5660},[5324,8805,8806],{"class":5334},"p_value",[5324,8808,8809],{"class":5660},":.6f}",[5324,8811,5732],{"class":5519},[5324,8813,5381],{"class":5334},[5324,8815,8816,8818,8820,8822,8824,8826,8828],{"class":5326,"line":7370},[5324,8817,5642],{"class":5641},[5324,8819,5645],{"class":5334},[5324,8821,5661],{"class":5660},[5324,8823,5732],{"class":5519},[5324,8825,5735],{"class":5584},[5324,8827,7300],{"class":5519},[5324,8829,5381],{"class":5334},[5324,8831,8832,8834,8836,8838,8841,8843,8845,8848,8851],{"class":5326,"line":7375},[5324,8833,5642],{"class":5641},[5324,8835,5645],{"class":5334},[5324,8837,5661],{"class":5660},[5324,8839,8840],{"class":5519},"\"  r = ",[5324,8842,5667],{"class":5660},[5324,8844,8796],{"class":5334},[5324,8846,8847],{"class":5660},":.3f}",[5324,8849,8850],{"class":5519}," → майже ідеальний позитивний лінійний зв'язок\"",[5324,8852,5381],{"class":5334},[5324,8854,8855,8857,8859,8861,8864],{"class":5326,"line":7381},[5324,8856,5642],{"class":5641},[5324,8858,5645],{"class":5334},[5324,8860,5661],{"class":5660},[5324,8862,8863],{"class":5519},"\"  p-value \u003C 0.05 → зв'язок статистично значущий (нульова гіпотеза про r=0 відкидається)\"",[5324,8865,5381],{"class":5334},[5324,8867,8868],{"class":5326,"line":7392},[5324,8869,5361],{"emptyLinePlaceholder":5360},[5324,8871,8872],{"class":5326,"line":7397},[5324,8873,8874],{"class":5392},"# Візуалізація: порівняння сирих одиниць та стандартизованого Z-простору\n",[5324,8876,8877,8879,8881,8883],{"class":5326,"line":7415},[5324,8878,5331],{"class":5330},[5324,8880,5349],{"class":5334},[5324,8882,5338],{"class":5330},[5324,8884,5354],{"class":5334},[5324,8886,8887],{"class":5326,"line":7501},[5324,8888,5361],{"emptyLinePlaceholder":5360},[5324,8890,8891],{"class":5326,"line":7557},[5324,8892,8893],{"class":5334},"slope, intercept, r_val, p_val, _ = stats.linregress(temperature, ice_cream_sales)\n",[5324,8895,8896],{"class":5326,"line":7607},[5324,8897,8898],{"class":5334},"z_temp = (temperature - temperature.mean()) \u002F std_temp\n",[5324,8900,8901],{"class":5326,"line":7657},[5324,8902,8903],{"class":5334},"z_sales = (ice_cream_sales - ice_cream_sales.mean()) \u002F std_sales\n",[5324,8905,8906],{"class":5326,"line":7686},[5324,8907,5361],{"emptyLinePlaceholder":5360},[5324,8909,8910,8913,8915,8917,8919,8921,8923,8925,8927,8929,8932],{"class":5326,"line":7696},[5324,8911,8912],{"class":5334},"fig, (ax1, ax2) = plt.subplots(",[5324,8914,5312],{"class":5377},[5324,8916,5405],{"class":5334},[5324,8918,6334],{"class":5377},[5324,8920,5405],{"class":5334},[5324,8922,5472],{"class":5370},[5324,8924,5475],{"class":5334},[5324,8926,5607],{"class":5377},[5324,8928,5405],{"class":5334},[5324,8930,8931],{"class":5377},"5.5",[5324,8933,5485],{"class":5334},[5324,8935,8936,8939,8941,8943,8945,8947,8949,8951,8953,8955,8957,8959,8962],{"class":5326,"line":7706},[5324,8937,8938],{"class":5334},"ax1.scatter(temperature, ice_cream_sales, ",[5324,8940,7421],{"class":5370},[5324,8942,5374],{"class":5334},[5324,8944,7575],{"class":5519},[5324,8946,5405],{"class":5334},[5324,8948,5504],{"class":5370},[5324,8950,5374],{"class":5334},[5324,8952,6372],{"class":5377},[5324,8954,5405],{"class":5334},[5324,8956,7441],{"class":5370},[5324,8958,5374],{"class":5334},[5324,8960,8961],{"class":5519},"'Дані'",[5324,8963,5381],{"class":5334},[5324,8965,8966,8969,8971,8973,8976,8978,8980],{"class":5326,"line":7733},[5324,8967,8968],{"class":5334},"x_grid = np.linspace(",[5324,8970,5607],{"class":5377},[5324,8972,5405],{"class":5334},[5324,8974,8975],{"class":5377},"36",[5324,8977,5405],{"class":5334},[5324,8979,5413],{"class":5377},[5324,8981,5381],{"class":5334},[5324,8983,8984,8987,8989,8991,8994,8996,8999,9001,9003,9005,9007,9009,9011,9014,9016,9019,9021,9024],{"class":5326,"line":7739},[5324,8985,8986],{"class":5334},"ax1.plot(x_grid, slope * x_grid + intercept, ",[5324,8988,7421],{"class":5370},[5324,8990,5374],{"class":5334},[5324,8992,8993],{"class":5519},"'#ea580c'",[5324,8995,5405],{"class":5334},[5324,8997,8998],{"class":5370},"lw",[5324,9000,5374],{"class":5334},[5324,9002,6334],{"class":5377},[5324,9004,5405],{"class":5334},[5324,9006,7441],{"class":5370},[5324,9008,5374],{"class":5334},[5324,9010,5661],{"class":5660},[5324,9012,9013],{"class":5519},"'Тренд ($r = ",[5324,9015,5667],{"class":5660},[5324,9017,9018],{"class":5334},"r_val",[5324,9020,8847],{"class":5660},[5324,9022,9023],{"class":5519},"$)'",[5324,9025,5381],{"class":5334},[5324,9027,9028,9031,9034,9036,9038,9040,9042],{"class":5326,"line":7745},[5324,9029,9030],{"class":5334},"ax1.set_title(",[5324,9032,9033],{"class":5519},"'Вихідні одиниці (Температура ↔ Продажі)'",[5324,9035,5405],{"class":5334},[5324,9037,5593],{"class":5370},[5324,9039,5374],{"class":5334},[5324,9041,5598],{"class":5519},[5324,9043,5381],{"class":5334},[5324,9045,9047,9050,9053],{"class":5326,"line":9046},41,[5324,9048,9049],{"class":5334},"ax1.set_xlabel(",[5324,9051,9052],{"class":5519},"'Температура (°C)'",[5324,9054,5381],{"class":5334},[5324,9056,9058,9061,9064],{"class":5326,"line":9057},42,[5324,9059,9060],{"class":5334},"ax1.set_ylabel(",[5324,9062,9063],{"class":5519},"'Продажі (шт)'",[5324,9065,5381],{"class":5334},[5324,9067,9069,9072,9074,9076,9078,9080,9082,9084,9086,9088,9090],{"class":5326,"line":9068},43,[5324,9070,9071],{"class":5334},"ax1.grid(",[5324,9073,7711],{"class":5660},[5324,9075,5405],{"class":5334},[5324,9077,7431],{"class":5370},[5324,9079,5374],{"class":5334},[5324,9081,7720],{"class":5519},[5324,9083,5405],{"class":5334},[5324,9085,5494],{"class":5370},[5324,9087,5374],{"class":5334},[5324,9089,5530],{"class":5377},[5324,9091,5381],{"class":5334},[5324,9093,9095],{"class":5326,"line":9094},44,[5324,9096,9097],{"class":5334},"ax1.legend()\n",[5324,9099,9101],{"class":5326,"line":9100},45,[5324,9102,5361],{"emptyLinePlaceholder":5360},[5324,9104,9106,9109,9111,9113,9116,9118,9120,9122,9124,9126,9128,9130,9133],{"class":5326,"line":9105},46,[5324,9107,9108],{"class":5334},"ax2.scatter(z_temp, z_sales, ",[5324,9110,7421],{"class":5370},[5324,9112,5374],{"class":5334},[5324,9114,9115],{"class":5519},"'#16a34a'",[5324,9117,5405],{"class":5334},[5324,9119,5504],{"class":5370},[5324,9121,5374],{"class":5334},[5324,9123,6372],{"class":5377},[5324,9125,5405],{"class":5334},[5324,9127,7441],{"class":5370},[5324,9129,5374],{"class":5334},[5324,9131,9132],{"class":5519},"'Z-точки'",[5324,9134,5381],{"class":5334},[5324,9136,9138,9141,9144,9146,9148,9150,9152],{"class":5326,"line":9137},47,[5324,9139,9140],{"class":5334},"z_grid = np.linspace(-",[5324,9142,9143],{"class":5377},"1.8",[5324,9145,5405],{"class":5334},[5324,9147,9143],{"class":5377},[5324,9149,5405],{"class":5334},[5324,9151,5413],{"class":5377},[5324,9153,5381],{"class":5334},[5324,9155,9157,9160,9162,9164,9166,9168,9170,9172,9174,9176,9178,9180,9182,9185,9187,9189,9191,9194],{"class":5326,"line":9156},48,[5324,9158,9159],{"class":5334},"ax2.plot(z_grid, r_val * z_grid, ",[5324,9161,7421],{"class":5370},[5324,9163,5374],{"class":5334},[5324,9165,7426],{"class":5519},[5324,9167,5405],{"class":5334},[5324,9169,8998],{"class":5370},[5324,9171,5374],{"class":5334},[5324,9173,6334],{"class":5377},[5324,9175,5405],{"class":5334},[5324,9177,7441],{"class":5370},[5324,9179,5374],{"class":5334},[5324,9181,5661],{"class":5660},[5324,9183,9184],{"class":5519},"'Нахил = r = ",[5324,9186,5667],{"class":5660},[5324,9188,9018],{"class":5334},[5324,9190,8847],{"class":5660},[5324,9192,9193],{"class":5519},"'",[5324,9195,5381],{"class":5334},[5324,9197,9199,9202,9204,9206,9208,9210,9213,9215,9217,9219,9221],{"class":5326,"line":9198},49,[5324,9200,9201],{"class":5334},"ax2.axvline(",[5324,9203,5434],{"class":5377},[5324,9205,5405],{"class":5334},[5324,9207,7421],{"class":5370},[5324,9209,5374],{"class":5334},[5324,9211,9212],{"class":5519},"'#94a3b8'",[5324,9214,5405],{"class":5334},[5324,9216,7431],{"class":5370},[5324,9218,5374],{"class":5334},[5324,9220,7436],{"class":5519},[5324,9222,5381],{"class":5334},[5324,9224,9226,9229,9231,9233,9235,9237,9239,9241,9243,9245,9247],{"class":5326,"line":9225},50,[5324,9227,9228],{"class":5334},"ax2.axhline(",[5324,9230,5434],{"class":5377},[5324,9232,5405],{"class":5334},[5324,9234,7421],{"class":5370},[5324,9236,5374],{"class":5334},[5324,9238,9212],{"class":5519},[5324,9240,5405],{"class":5334},[5324,9242,7431],{"class":5370},[5324,9244,5374],{"class":5334},[5324,9246,7436],{"class":5519},[5324,9248,5381],{"class":5334},[5324,9250,9252,9255,9258,9260,9262,9264,9266],{"class":5326,"line":9251},51,[5324,9253,9254],{"class":5334},"ax2.set_title(",[5324,9256,9257],{"class":5519},"'Стандартизований Z-простір: кут нахилу = r'",[5324,9259,5405],{"class":5334},[5324,9261,5593],{"class":5370},[5324,9263,5374],{"class":5334},[5324,9265,5598],{"class":5519},[5324,9267,5381],{"class":5334},[5324,9269,9271,9274,9277],{"class":5326,"line":9270},52,[5324,9272,9273],{"class":5334},"ax2.set_xlabel(",[5324,9275,9276],{"class":5519},"'Z-оцінка температури'",[5324,9278,5381],{"class":5334},[5324,9280,9282,9285,9288],{"class":5326,"line":9281},53,[5324,9283,9284],{"class":5334},"ax2.set_ylabel(",[5324,9286,9287],{"class":5519},"'Z-оцінка продажів'",[5324,9289,5381],{"class":5334},[5324,9291,9293,9296,9298,9300,9302,9304,9306,9308,9310,9312,9314],{"class":5326,"line":9292},54,[5324,9294,9295],{"class":5334},"ax2.grid(",[5324,9297,7711],{"class":5660},[5324,9299,5405],{"class":5334},[5324,9301,7431],{"class":5370},[5324,9303,5374],{"class":5334},[5324,9305,7720],{"class":5519},[5324,9307,5405],{"class":5334},[5324,9309,5494],{"class":5370},[5324,9311,5374],{"class":5334},[5324,9313,5530],{"class":5377},[5324,9315,5381],{"class":5334},[5324,9317,9319],{"class":5326,"line":9318},55,[5324,9320,9321],{"class":5334},"ax2.legend()\n",[5324,9323,9325],{"class":5326,"line":9324},56,[5324,9326,7742],{"class":5334},[5324,9328,9330],{"class":5326,"line":9329},57,[5324,9331,5630],{"class":5334},[5754,9333,9334,9341],{"v-slot:output":5319},[5278,9335,9336],{},[5759,9337],{"alt":9338,"className":9339,"src":9340},"Обчислення кореляції Пірсона: лінійна регресія у вихідних одиницях та стандартизований Z-простір",[5763],"\u002Fimages\u002Fai-python\u002Fstatistics-basics\u002Fcorrelation\u002Fpearson-computation.png",[5314,9342,9345],{"className":9343,"code":9344,"language":5770},[5768],"Результати обчислення кореляції:\n  Вручну:        r = 0.9973\n  np.corrcoef(): r = 0.9973\n  scipy:         r = 0.9973, p-value = 0.000000\n\nІнтерпретація:\n  r = 0.997 → майже ідеальний позитивний лінійний зв'язок\n  p-value \u003C 0.05 → зв'язок статистично значущий (нульова гіпотеза про r=0 відкидається)\n",[5321,9346,9344],{"__ignoreMap":5319},[5306,9348,9350],{"id":9349},"візуалізація-різних-кореляцій","Візуалізація різних кореляцій",[5297,9352,9354,9360],{"kernel":5299,"title":9353},"correlation_examples.ipynb",[5302,9355,9356],{"type":5304},[5306,9357,9359],{"id":9358},"візуальні-приклади-різних-значень-кореляції","Візуальні приклади різних значень кореляції",[5302,9361,9362,10121],{"execution-count":5312},[5314,9363,9365],{"className":5316,"code":9364,"language":5318,"meta":5319,"style":5319},"import numpy as np\nimport matplotlib.pyplot as plt\n\nrng = np.random.default_rng(seed=42)\nn = 100\n\ndef generate_correlated_data(r, n=100):\n    \"\"\"Генерує дві нормальні змінні з заданим коефіцієнтом кореляції r\"\"\"\n    x = rng.standard_normal(n)\n    y = r * x + np.sqrt(1 - r**2) * rng.standard_normal(n)\n    return x, y\n\ncorrelations = [1.0, 0.8, 0.4, 0.0, -0.4, -0.8, -1.0]\nfig, axes = plt.subplots(2, 4, figsize=(16, 8))\naxes = axes.ravel()\n\nfor i, r_target in enumerate(correlations):\n    x, y = generate_correlated_data(r_target, n)\n    r_actual = np.corrcoef(x, y)[0, 1]\n\n    axes[i].scatter(x, y, alpha=0.6, s=30, edgecolors='black', linewidths=0.5)\n    axes[i].set_title(f'r = {r_actual:.2f}', fontweight='bold', fontsize=12)\n    axes[i].set_xlabel('X')\n    axes[i].set_ylabel('Y')\n    axes[i].grid(alpha=0.3)\n    axes[i].axhline(0, color='gray', linewidth=0.5, linestyle='--')\n    axes[i].axvline(0, color='gray', linewidth=0.5, linestyle='--')\n\n# 8-й графік: нелінійний функціональний зв'язок (коло), де r ≈ 0\ntheta = np.linspace(0, 2*np.pi, n)\nx_circle = np.cos(theta) + rng.standard_normal(n) * 0.1\ny_circle = np.sin(theta) + rng.standard_normal(n) * 0.1\nr_circle = np.corrcoef(x_circle, y_circle)[0, 1]\n\naxes[7].scatter(x_circle, y_circle, alpha=0.6, s=30, edgecolors='black', linewidths=0.5, color='red')\naxes[7].set_title(f'Коло: r = {r_circle:.2f}', fontweight='bold', fontsize=12)\naxes[7].set_xlabel('X')\naxes[7].set_ylabel('Y')\naxes[7].grid(alpha=0.3)\naxes[7].text(0, 0, 'Нелінійний зв\\'язок!\\nr ≈ 0', ha='center', fontsize=10,\n             bbox=dict(boxstyle='round', facecolor='yellow', alpha=0.7))\n\nplt.tight_layout()\nplt.show()\n\nprint(\"Висновки:\")\nprint(\"  r = +1: точки лежать точно на висхідній прямій ↗\")\nprint(\"  r = -1: точки лежать точно на спадній прямій ↘\")\nprint(\"  r ≈ 0: хаотична хмара АБО нелінійний зв'язок (коло, парабола)\")\nprint(\"\\n⚠ ВАЖЛИВО: r = 0 НЕ означає 'немає зв'язку', це означає лише 'немає ЛІНІЙНОГО зв'язку'!\")\n",[5321,9366,9367,9377,9387,9391,9403,9411,9415,9439,9444,9449,9464,9472,9476,9513,9539,9544,9548,9565,9570,9583,9587,9624,9661,9671,9681,9694,9729,9762,9766,9771,9785,9793,9800,9813,9817,9869,9910,9923,9936,9953,10004,10046,10050,10054,10058,10062,10073,10084,10095,10106],{"__ignoreMap":5319},[5324,9368,9369,9371,9373,9375],{"class":5326,"line":5327},[5324,9370,5331],{"class":5330},[5324,9372,5335],{"class":5334},[5324,9374,5338],{"class":5330},[5324,9376,5341],{"class":5334},[5324,9378,9379,9381,9383,9385],{"class":5326,"line":5344},[5324,9380,5331],{"class":5330},[5324,9382,5349],{"class":5334},[5324,9384,5338],{"class":5330},[5324,9386,5354],{"class":5334},[5324,9388,9389],{"class":5326,"line":5357},[5324,9390,5361],{"emptyLinePlaceholder":5360},[5324,9392,9393,9395,9397,9399,9401],{"class":5326,"line":5364},[5324,9394,5367],{"class":5334},[5324,9396,5371],{"class":5370},[5324,9398,5374],{"class":5334},[5324,9400,5378],{"class":5377},[5324,9402,5381],{"class":5334},[5324,9404,9405,9408],{"class":5326,"line":5384},[5324,9406,9407],{"class":5334},"n = ",[5324,9409,9410],{"class":5377},"100\n",[5324,9412,9413],{"class":5326,"line":5389},[5324,9414,5361],{"emptyLinePlaceholder":5360},[5324,9416,9417,9420,9423,9425,9427,9429,9432,9434,9436],{"class":5326,"line":5396},[5324,9418,9419],{"class":5660},"def",[5324,9421,9422],{"class":5641}," generate_correlated_data",[5324,9424,5645],{"class":5334},[5324,9426,7815],{"class":5370},[5324,9428,5405],{"class":5334},[5324,9430,9431],{"class":5370},"n",[5324,9433,5374],{"class":5334},[5324,9435,5413],{"class":5377},[5324,9437,9438],{"class":5334},"):\n",[5324,9440,9441],{"class":5326,"line":5422},[5324,9442,9443],{"class":5519},"    \"\"\"Генерує дві нормальні змінні з заданим коефіцієнтом кореляції r\"\"\"\n",[5324,9445,9446],{"class":5326,"line":5455},[5324,9447,9448],{"class":5334},"    x = rng.standard_normal(n)\n",[5324,9450,9451,9454,9456,9459,9461],{"class":5326,"line":5460},[5324,9452,9453],{"class":5334},"    y = r * x + np.sqrt(",[5324,9455,5312],{"class":5377},[5324,9457,9458],{"class":5334}," - r**",[5324,9460,6334],{"class":5377},[5324,9462,9463],{"class":5334},") * rng.standard_normal(n)\n",[5324,9465,9466,9469],{"class":5326,"line":5466},[5324,9467,9468],{"class":5330},"    return",[5324,9470,9471],{"class":5334}," x, y\n",[5324,9473,9474],{"class":5326,"line":5488},[5324,9475,5361],{"emptyLinePlaceholder":5360},[5324,9477,9478,9481,9484,9486,9488,9490,9493,9495,9498,9501,9503,9505,9507,9509,9511],{"class":5326,"line":5535},[5324,9479,9480],{"class":5334},"correlations = [",[5324,9482,9483],{"class":5377},"1.0",[5324,9485,5405],{"class":5334},[5324,9487,5428],{"class":5377},[5324,9489,5405],{"class":5334},[5324,9491,9492],{"class":5377},"0.4",[5324,9494,5405],{"class":5334},[5324,9496,9497],{"class":5377},"0.0",[5324,9499,9500],{"class":5334},", -",[5324,9502,9492],{"class":5377},[5324,9504,9500],{"class":5334},[5324,9506,5428],{"class":5377},[5324,9508,9500],{"class":5334},[5324,9510,9483],{"class":5377},[5324,9512,8647],{"class":5334},[5324,9514,9515,9518,9520,9522,9524,9526,9528,9530,9533,9535,9537],{"class":5326,"line":5556},[5324,9516,9517],{"class":5334},"fig, axes = plt.subplots(",[5324,9519,6334],{"class":5377},[5324,9521,5405],{"class":5334},[5324,9523,6369],{"class":5377},[5324,9525,5405],{"class":5334},[5324,9527,5472],{"class":5370},[5324,9529,5475],{"class":5334},[5324,9531,9532],{"class":5377},"16",[5324,9534,5405],{"class":5334},[5324,9536,6436],{"class":5377},[5324,9538,5485],{"class":5334},[5324,9540,9541],{"class":5326,"line":5575},[5324,9542,9543],{"class":5334},"axes = axes.ravel()\n",[5324,9545,9546],{"class":5326,"line":5612},[5324,9547,5361],{"emptyLinePlaceholder":5360},[5324,9549,9550,9553,9556,9559,9562],{"class":5326,"line":5627},[5324,9551,9552],{"class":5330},"for",[5324,9554,9555],{"class":5334}," i, r_target ",[5324,9557,9558],{"class":5330},"in",[5324,9560,9561],{"class":5641}," enumerate",[5324,9563,9564],{"class":5334},"(correlations):\n",[5324,9566,9567],{"class":5326,"line":5633},[5324,9568,9569],{"class":5334},"    x, y = generate_correlated_data(r_target, n)\n",[5324,9571,9572,9575,9577,9579,9581],{"class":5326,"line":5638},[5324,9573,9574],{"class":5334},"    r_actual = np.corrcoef(x, y)[",[5324,9576,5434],{"class":5377},[5324,9578,5405],{"class":5334},[5324,9580,5312],{"class":5377},[5324,9582,8647],{"class":5334},[5324,9584,9585],{"class":5326,"line":5653},[5324,9586,5361],{"emptyLinePlaceholder":5360},[5324,9588,9589,9592,9594,9596,9598,9600,9602,9604,9606,9608,9610,9612,9614,9616,9618,9620,9622],{"class":5326,"line":5691},[5324,9590,9591],{"class":5334},"    axes[i].scatter(x, y, ",[5324,9593,5494],{"class":5370},[5324,9595,5374],{"class":5334},[5324,9597,5499],{"class":5377},[5324,9599,5405],{"class":5334},[5324,9601,5504],{"class":5370},[5324,9603,5374],{"class":5334},[5324,9605,6512],{"class":5377},[5324,9607,5405],{"class":5334},[5324,9609,5514],{"class":5370},[5324,9611,5374],{"class":5334},[5324,9613,5520],{"class":5519},[5324,9615,5405],{"class":5334},[5324,9617,5525],{"class":5370},[5324,9619,5374],{"class":5334},[5324,9621,5530],{"class":5377},[5324,9623,5381],{"class":5334},[5324,9625,9626,9629,9631,9634,9636,9639,9641,9643,9645,9647,9649,9651,9653,9655,9657,9659],{"class":5326,"line":5725},[5324,9627,9628],{"class":5334},"    axes[i].set_title(",[5324,9630,5661],{"class":5660},[5324,9632,9633],{"class":5519},"'r = ",[5324,9635,5667],{"class":5660},[5324,9637,9638],{"class":5334},"r_actual",[5324,9640,6770],{"class":5660},[5324,9642,9193],{"class":5519},[5324,9644,5405],{"class":5334},[5324,9646,5593],{"class":5370},[5324,9648,5374],{"class":5334},[5324,9650,5598],{"class":5519},[5324,9652,5405],{"class":5334},[5324,9654,5546],{"class":5370},[5324,9656,5374],{"class":5334},[5324,9658,5551],{"class":5377},[5324,9660,5381],{"class":5334},[5324,9662,9663,9666,9669],{"class":5326,"line":5743},[5324,9664,9665],{"class":5334},"    axes[i].set_xlabel(",[5324,9667,9668],{"class":5519},"'X'",[5324,9670,5381],{"class":5334},[5324,9672,9673,9676,9679],{"class":5326,"line":6150},[5324,9674,9675],{"class":5334},"    axes[i].set_ylabel(",[5324,9677,9678],{"class":5519},"'Y'",[5324,9680,5381],{"class":5334},[5324,9682,9683,9686,9688,9690,9692],{"class":5326,"line":7370},[5324,9684,9685],{"class":5334},"    axes[i].grid(",[5324,9687,5494],{"class":5370},[5324,9689,5374],{"class":5334},[5324,9691,5622],{"class":5377},[5324,9693,5381],{"class":5334},[5324,9695,9696,9699,9701,9703,9705,9707,9710,9712,9715,9717,9719,9721,9723,9725,9727],{"class":5326,"line":7375},[5324,9697,9698],{"class":5334},"    axes[i].axhline(",[5324,9700,5434],{"class":5377},[5324,9702,5405],{"class":5334},[5324,9704,7421],{"class":5370},[5324,9706,5374],{"class":5334},[5324,9708,9709],{"class":5519},"'gray'",[5324,9711,5405],{"class":5334},[5324,9713,9714],{"class":5370},"linewidth",[5324,9716,5374],{"class":5334},[5324,9718,5530],{"class":5377},[5324,9720,5405],{"class":5334},[5324,9722,7431],{"class":5370},[5324,9724,5374],{"class":5334},[5324,9726,7436],{"class":5519},[5324,9728,5381],{"class":5334},[5324,9730,9731,9734,9736,9738,9740,9742,9744,9746,9748,9750,9752,9754,9756,9758,9760],{"class":5326,"line":7381},[5324,9732,9733],{"class":5334},"    axes[i].axvline(",[5324,9735,5434],{"class":5377},[5324,9737,5405],{"class":5334},[5324,9739,7421],{"class":5370},[5324,9741,5374],{"class":5334},[5324,9743,9709],{"class":5519},[5324,9745,5405],{"class":5334},[5324,9747,9714],{"class":5370},[5324,9749,5374],{"class":5334},[5324,9751,5530],{"class":5377},[5324,9753,5405],{"class":5334},[5324,9755,7431],{"class":5370},[5324,9757,5374],{"class":5334},[5324,9759,7436],{"class":5519},[5324,9761,5381],{"class":5334},[5324,9763,9764],{"class":5326,"line":7392},[5324,9765,5361],{"emptyLinePlaceholder":5360},[5324,9767,9768],{"class":5326,"line":7397},[5324,9769,9770],{"class":5392},"# 8-й графік: нелінійний функціональний зв'язок (коло), де r ≈ 0\n",[5324,9772,9773,9776,9778,9780,9782],{"class":5326,"line":7415},[5324,9774,9775],{"class":5334},"theta = np.linspace(",[5324,9777,5434],{"class":5377},[5324,9779,5405],{"class":5334},[5324,9781,6334],{"class":5377},[5324,9783,9784],{"class":5334},"*np.pi, n)\n",[5324,9786,9787,9790],{"class":5326,"line":7501},[5324,9788,9789],{"class":5334},"x_circle = np.cos(theta) + rng.standard_normal(n) * ",[5324,9791,9792],{"class":5377},"0.1\n",[5324,9794,9795,9798],{"class":5326,"line":7557},[5324,9796,9797],{"class":5334},"y_circle = np.sin(theta) + rng.standard_normal(n) * ",[5324,9799,9792],{"class":5377},[5324,9801,9802,9805,9807,9809,9811],{"class":5326,"line":7607},[5324,9803,9804],{"class":5334},"r_circle = np.corrcoef(x_circle, y_circle)[",[5324,9806,5434],{"class":5377},[5324,9808,5405],{"class":5334},[5324,9810,5312],{"class":5377},[5324,9812,8647],{"class":5334},[5324,9814,9815],{"class":5326,"line":7657},[5324,9816,5361],{"emptyLinePlaceholder":5360},[5324,9818,9819,9822,9825,9828,9830,9832,9834,9836,9838,9840,9842,9844,9846,9848,9850,9852,9854,9856,9858,9860,9862,9864,9867],{"class":5326,"line":7686},[5324,9820,9821],{"class":5334},"axes[",[5324,9823,9824],{"class":5377},"7",[5324,9826,9827],{"class":5334},"].scatter(x_circle, y_circle, ",[5324,9829,5494],{"class":5370},[5324,9831,5374],{"class":5334},[5324,9833,5499],{"class":5377},[5324,9835,5405],{"class":5334},[5324,9837,5504],{"class":5370},[5324,9839,5374],{"class":5334},[5324,9841,6512],{"class":5377},[5324,9843,5405],{"class":5334},[5324,9845,5514],{"class":5370},[5324,9847,5374],{"class":5334},[5324,9849,5520],{"class":5519},[5324,9851,5405],{"class":5334},[5324,9853,5525],{"class":5370},[5324,9855,5374],{"class":5334},[5324,9857,5530],{"class":5377},[5324,9859,5405],{"class":5334},[5324,9861,7421],{"class":5370},[5324,9863,5374],{"class":5334},[5324,9865,9866],{"class":5519},"'red'",[5324,9868,5381],{"class":5334},[5324,9870,9871,9873,9875,9878,9880,9883,9885,9888,9890,9892,9894,9896,9898,9900,9902,9904,9906,9908],{"class":5326,"line":7696},[5324,9872,9821],{"class":5334},[5324,9874,9824],{"class":5377},[5324,9876,9877],{"class":5334},"].set_title(",[5324,9879,5661],{"class":5660},[5324,9881,9882],{"class":5519},"'Коло: r = ",[5324,9884,5667],{"class":5660},[5324,9886,9887],{"class":5334},"r_circle",[5324,9889,6770],{"class":5660},[5324,9891,9193],{"class":5519},[5324,9893,5405],{"class":5334},[5324,9895,5593],{"class":5370},[5324,9897,5374],{"class":5334},[5324,9899,5598],{"class":5519},[5324,9901,5405],{"class":5334},[5324,9903,5546],{"class":5370},[5324,9905,5374],{"class":5334},[5324,9907,5551],{"class":5377},[5324,9909,5381],{"class":5334},[5324,9911,9912,9914,9916,9919,9921],{"class":5326,"line":7706},[5324,9913,9821],{"class":5334},[5324,9915,9824],{"class":5377},[5324,9917,9918],{"class":5334},"].set_xlabel(",[5324,9920,9668],{"class":5519},[5324,9922,5381],{"class":5334},[5324,9924,9925,9927,9929,9932,9934],{"class":5326,"line":7733},[5324,9926,9821],{"class":5334},[5324,9928,9824],{"class":5377},[5324,9930,9931],{"class":5334},"].set_ylabel(",[5324,9933,9678],{"class":5519},[5324,9935,5381],{"class":5334},[5324,9937,9938,9940,9942,9945,9947,9949,9951],{"class":5326,"line":7739},[5324,9939,9821],{"class":5334},[5324,9941,9824],{"class":5377},[5324,9943,9944],{"class":5334},"].grid(",[5324,9946,5494],{"class":5370},[5324,9948,5374],{"class":5334},[5324,9950,5622],{"class":5377},[5324,9952,5381],{"class":5334},[5324,9954,9955,9957,9959,9962,9964,9966,9968,9970,9973,9975,9978,9980,9983,9985,9988,9990,9993,9995,9997,9999,10001],{"class":5326,"line":7745},[5324,9956,9821],{"class":5334},[5324,9958,9824],{"class":5377},[5324,9960,9961],{"class":5334},"].text(",[5324,9963,5434],{"class":5377},[5324,9965,5405],{"class":5334},[5324,9967,5434],{"class":5377},[5324,9969,5405],{"class":5334},[5324,9971,9972],{"class":5519},"'Нелінійний зв",[5324,9974,5585],{"class":5584},[5324,9976,9977],{"class":5519},"язок!",[5324,9979,5735],{"class":5584},[5324,9981,9982],{"class":5519},"r ≈ 0'",[5324,9984,5405],{"class":5334},[5324,9986,9987],{"class":5370},"ha",[5324,9989,5374],{"class":5334},[5324,9991,9992],{"class":5519},"'center'",[5324,9994,5405],{"class":5334},[5324,9996,5546],{"class":5370},[5324,9998,5374],{"class":5334},[5324,10000,5408],{"class":5377},[5324,10002,10003],{"class":5334},",\n",[5324,10005,10006,10009,10011,10015,10017,10020,10022,10025,10027,10030,10032,10035,10037,10039,10041,10044],{"class":5326,"line":9046},[5324,10007,10008],{"class":5370},"             bbox",[5324,10010,5374],{"class":5334},[5324,10012,10014],{"class":10013},"sN1BT","dict",[5324,10016,5645],{"class":5334},[5324,10018,10019],{"class":5370},"boxstyle",[5324,10021,5374],{"class":5334},[5324,10023,10024],{"class":5519},"'round'",[5324,10026,5405],{"class":5334},[5324,10028,10029],{"class":5370},"facecolor",[5324,10031,5374],{"class":5334},[5324,10033,10034],{"class":5519},"'yellow'",[5324,10036,5405],{"class":5334},[5324,10038,5494],{"class":5370},[5324,10040,5374],{"class":5334},[5324,10042,10043],{"class":5377},"0.7",[5324,10045,5485],{"class":5334},[5324,10047,10048],{"class":5326,"line":9057},[5324,10049,5361],{"emptyLinePlaceholder":5360},[5324,10051,10052],{"class":5326,"line":9068},[5324,10053,7742],{"class":5334},[5324,10055,10056],{"class":5326,"line":9094},[5324,10057,5630],{"class":5334},[5324,10059,10060],{"class":5326,"line":9100},[5324,10061,5361],{"emptyLinePlaceholder":5360},[5324,10063,10064,10066,10068,10071],{"class":5326,"line":9105},[5324,10065,5642],{"class":5641},[5324,10067,5645],{"class":5334},[5324,10069,10070],{"class":5519},"\"Висновки:\"",[5324,10072,5381],{"class":5334},[5324,10074,10075,10077,10079,10082],{"class":5326,"line":9137},[5324,10076,5642],{"class":5641},[5324,10078,5645],{"class":5334},[5324,10080,10081],{"class":5519},"\"  r = +1: точки лежать точно на висхідній прямій ↗\"",[5324,10083,5381],{"class":5334},[5324,10085,10086,10088,10090,10093],{"class":5326,"line":9156},[5324,10087,5642],{"class":5641},[5324,10089,5645],{"class":5334},[5324,10091,10092],{"class":5519},"\"  r = -1: точки лежать точно на спадній прямій ↘\"",[5324,10094,5381],{"class":5334},[5324,10096,10097,10099,10101,10104],{"class":5326,"line":9198},[5324,10098,5642],{"class":5641},[5324,10100,5645],{"class":5334},[5324,10102,10103],{"class":5519},"\"  r ≈ 0: хаотична хмара АБО нелінійний зв'язок (коло, парабола)\"",[5324,10105,5381],{"class":5334},[5324,10107,10108,10110,10112,10114,10116,10119],{"class":5326,"line":9225},[5324,10109,5642],{"class":5641},[5324,10111,5645],{"class":5334},[5324,10113,5732],{"class":5519},[5324,10115,5735],{"class":5584},[5324,10117,10118],{"class":5519},"⚠ ВАЖЛИВО: r = 0 НЕ означає 'немає зв'язку', це означає лише 'немає ЛІНІЙНОГО зв'язку'!\"",[5324,10120,5381],{"class":5334},[5754,10122,10123,10130],{"v-slot:output":5319},[5278,10124,10125],{},[5759,10126],{"alt":10127,"className":10128,"src":10129},"8 патернів кореляції: від повної прямої до від'ємної та нелінійної",[5763],"\u002Fimages\u002Fai-python\u002Fstatistics-basics\u002Fcorrelation\u002F02.png",[5314,10131,10134],{"className":10132,"code":10133,"language":5770},[5768],"Висновки:\n  r = +1: точки лежать точно на висхідній прямій ↗\n  r = -1: точки лежать точно на спадній прямій ↘\n  r ≈ 0: хаотична хмара АБО нелінійний зв'язок (коло, парабола)\n\n⚠ ВАЖЛИВО: r = 0 НЕ означає 'немає зв'язку', це означає лише 'немає ЛІНІЙНОГО зв'язку'!\n",[5321,10135,10133],{"__ignoreMap":5319},[5306,10137,10139],{"id":10138},"квартет-анскомба-anscombes-quartet-чому-не-можна-вірити-лише-числу-r","Квартет Анскомба (Anscombe's Quartet): чому не можна вірити лише числу r",[5278,10141,10142,10143,5812],{},"У 1973 році британський статистик Френсіс Анскомб сформував чотири набори числових даних, щоб проілюструвати фундаментальне правило: ",[5217,10144,10145],{},"ніколи не робіть висновків про залежність змінних лише за коефіцієнтом кореляції без побудови графіка розсіювання (scatter plot)",[5278,10147,10148],{},"Усі чотири набори даних мають майже ідентичні зведені статистичні характеристики:",[5198,10150,10151,10164,10175,10181],{},[5201,10152,10153,10154,10157,10158,5230,10161,6507],{},"Середнє значення ",[5895,10155],{"tex":10156,":inline":5898},"\\bar{x} = 9.0",", вибіркова дисперсія ",[5895,10159],{"tex":10160,":inline":5898},"s_x^2 = 11.0",[5895,10162],{"tex":10163,":inline":5898},"s_x \\approx 3.32",[5201,10165,10153,10166,10157,10169,5230,10172,6507],{},[5895,10167],{"tex":10168,":inline":5898},"\\bar{y} = 7.50",[5895,10170],{"tex":10171,":inline":5898},"s_y^2 \\approx 4.12",[5895,10173],{"tex":10174,":inline":5898},"s_y \\approx 2.03",[5201,10176,10177,10178],{},"Коефіцієнт кореляції Пірсона ",[5895,10179],{"tex":10180,":inline":5898},"r \\approx 0.816",[5201,10182,10183,10184,5230,10187,6507],{},"Лінія регресії ",[5895,10185],{"tex":10186,":inline":5898},"y = 3.00 + 0.500x",[5895,10188],{"tex":10189,":inline":5898},"R^2 \\approx 0.67",[5190,10191,10192,10201,10213,10229],{},[5193,10193,10196,10197,10200],{"icon":10194,"title":10195},"i-lucide-trending-up","Набір I (Лінійний зв'язок)","Класична хмара точок із помірним лінійним трендом та нормальним розподілом помилок. Коефіцієнт ",[5895,10198],{"tex":10199,":inline":5898},"r = 0.816"," бездоганно відображає реальний стан справ.",[5193,10202,10205,10206,10209,10210,10212],{"icon":10203,"title":10204},"i-lucide-spline","Набір II (Нелінійна парабола)","Між змінними існує ",[5217,10207,10208],{},"строга детермінована квадратична залежність",". Лінійна кореляція ",[5895,10211],{"tex":10199,":inline":5898}," повністю сліпа до кривини зв'язку і вводить аналітика в оману.",[5193,10214,10217,10218,10221,10222,10225,10226,5812],{"icon":10215,"title":10216},"i-lucide-alert-circle","Набір III (Вплив одного викиду)","Майже ідеальна пряма лінія (",[5895,10219],{"tex":10220,":inline":5898},"r = 1.0","), яку «змазав» усього ",[5217,10223,10224],{},"один-єдиний вертикальний викид",", знизивши кореляцію до ",[5895,10227],{"tex":10228,":inline":5898},"0.816",[5193,10230,10233,10234,10237,10238,10240,10241,10244,10245,10247],{"icon":10231,"title":10232},"i-lucide-anchor","Набір IV (Важільна точка — Leverage)","Усі спостереження, крім одного, мають ",[5895,10235],{"tex":10236,":inline":5898},"x = 8"," (нульова варіація ",[5895,10239],{"tex":7460,":inline":5898},"). Одна екстремальна точка ",[5895,10242],{"tex":10243,":inline":5898},"(19, 12.5)"," самотужки створила ілюзію потужного лінійного зв'язку ",[5895,10246],{"tex":10199,":inline":5898},"!",[5278,10249,10250],{},[5759,10251],{"alt":10252,"className":10253,"src":10254},"Квартет Анскомба: однаковий коефіцієнт r = 0.816 за кардинально різної геометрії даних",[5763],"\u002Fimages\u002Fai-python\u002Fstatistics-basics\u002Fcorrelation\u002F08.png",[6987,10256,10258,10259,10262,10263,10265],{"title":10257},"Критичне правило Data Science","Перед застосуванням моделі лінійної регресії чи формуванням висновків про взаємозв'язок ознак ",[5217,10260,10261],{},"завжди будуйте діаграми розсіювання (scatter plot)",". Одне сухе число ",[5895,10264],{"tex":7815,":inline":5898}," не здатне розрізнити плавну параболу, дію аномального шуму чи штучний нахил через один екстремальний викид.",[5270,10267],{},[5273,10269,10271],{"id":10270},"матриця-кореляції-correlation-matrix","Матриця кореляції (Correlation Matrix)",[5278,10273,10274,10275,10278],{},"У реальних датасетах ми зазвичай маємо ",[5217,10276,10277],{},"десятки або сотні ознак",". Як швидко з'ясувати, які змінні тісно пов'язані між собою, а які дублюють інформацію?",[5278,10280,10281,10283,10284,10287,10288,10291,10292,10295,10296,5808,10299,5812],{},[5217,10282,5258],{}," — це симетрична таблиця розмірності ",[5895,10285],{"tex":10286,":inline":5898},"N \\times N",", де елемент на перетині ",[5895,10289],{"tex":10290,":inline":5898},"i","-го рядка та ",[5895,10293],{"tex":10294,":inline":5898},"j","-го стовпця дорівнює коефіцієнту кореляції між змінними ",[5895,10297],{"tex":10298,":inline":5898},"X_i",[5895,10300],{"tex":10301,":inline":5898},"X_j",[5306,10303,10305],{"id":10304},"структура-матриці","Структура матриці",[6027,10307,10309],{"alt":10308},"Структура матриці кореляції",[5314,10310,10312],{"className":6032,"code":10311,"language":6034,"meta":5319,"style":5319},"@startuml\nskinparam style plain\nskinparam backgroundColor #FFFFFF\nskinparam defaultTextAlignment center\n\nrectangle \"Матриця кореляції\" {\n  rectangle \"       X1      X2      X3      X4\" as header\n  rectangle \"X1 | **1.00**  0.85  -0.42   0.12\" as row1\n  rectangle \"X2 | 0.85  **1.00**  -0.38   0.05\" as row2\n  rectangle \"X3 |-0.42  -0.38  **1.00**  -0.65\" as row3\n  rectangle \"X4 | 0.12   0.05  -0.65  **1.00**\" as row4\n}\n\nnote right of header\n  Головна діагональ = 1.00\n  (кореляція ознаки із самою собою)\nend note\n\nnote bottom of row4\n  Симетрична матриця:\n  Corr(Xi, Xj) = Corr(Xj, Xi)\nend note\n@enduml\n",[5321,10313,10314,10318,10322,10326,10330,10334,10339,10344,10349,10354,10359,10364,10368,10372,10377,10382,10387,10391,10395,10400,10405,10410,10414],{"__ignoreMap":5319},[5324,10315,10316],{"class":5326,"line":5327},[5324,10317,6041],{},[5324,10319,10320],{"class":5326,"line":5344},[5324,10321,6046],{},[5324,10323,10324],{"class":5326,"line":5357},[5324,10325,6051],{},[5324,10327,10328],{"class":5326,"line":5364},[5324,10329,6056],{},[5324,10331,10332],{"class":5326,"line":5384},[5324,10333,5361],{"emptyLinePlaceholder":5360},[5324,10335,10336],{"class":5326,"line":5389},[5324,10337,10338],{},"rectangle \"Матриця кореляції\" {\n",[5324,10340,10341],{"class":5326,"line":5396},[5324,10342,10343],{},"  rectangle \"       X1      X2      X3      X4\" as header\n",[5324,10345,10346],{"class":5326,"line":5422},[5324,10347,10348],{},"  rectangle \"X1 | **1.00**  0.85  -0.42   0.12\" as row1\n",[5324,10350,10351],{"class":5326,"line":5455},[5324,10352,10353],{},"  rectangle \"X2 | 0.85  **1.00**  -0.38   0.05\" as row2\n",[5324,10355,10356],{"class":5326,"line":5460},[5324,10357,10358],{},"  rectangle \"X3 |-0.42  -0.38  **1.00**  -0.65\" as row3\n",[5324,10360,10361],{"class":5326,"line":5466},[5324,10362,10363],{},"  rectangle \"X4 | 0.12   0.05  -0.65  **1.00**\" as row4\n",[5324,10365,10366],{"class":5326,"line":5488},[5324,10367,6094],{},[5324,10369,10370],{"class":5326,"line":5535},[5324,10371,5361],{"emptyLinePlaceholder":5360},[5324,10373,10374],{"class":5326,"line":5556},[5324,10375,10376],{},"note right of header\n",[5324,10378,10379],{"class":5326,"line":5575},[5324,10380,10381],{},"  Головна діагональ = 1.00\n",[5324,10383,10384],{"class":5326,"line":5612},[5324,10385,10386],{},"  (кореляція ознаки із самою собою)\n",[5324,10388,10389],{"class":5326,"line":5627},[5324,10390,6147],{},[5324,10392,10393],{"class":5326,"line":5633},[5324,10394,5361],{"emptyLinePlaceholder":5360},[5324,10396,10397],{"class":5326,"line":5638},[5324,10398,10399],{},"note bottom of row4\n",[5324,10401,10402],{"class":5326,"line":5653},[5324,10403,10404],{},"  Симетрична матриця:\n",[5324,10406,10407],{"class":5326,"line":5691},[5324,10408,10409],{},"  Corr(Xi, Xj) = Corr(Xj, Xi)\n",[5324,10411,10412],{"class":5326,"line":5725},[5324,10413,6147],{},[5324,10415,10416],{"class":5326,"line":5743},[5324,10417,6153],{},[5278,10419,10420],{},[5217,10421,10422],{},"Фундаментальні властивості:",[5779,10424,10425,10433,10442],{},[5201,10426,10427,5230,10430,6025],{},[5217,10428,10429],{},"Головна діагональ завжди дорівнює 1.00",[5895,10431],{"tex":10432,":inline":5898},"\\text{Corr}(X_i, X_i) = 1",[5201,10434,10435,10438,10439,5812],{},[5217,10436,10437],{},"Симетричність відносно діагоналі",": ",[5895,10440],{"tex":10441,":inline":5898},"\\text{Corr}(X_i, X_j) = \\text{Corr}(X_j, X_i)",[5201,10443,10444,10438,10447,5812],{},[5217,10445,10446],{},"Діапазон усіх значень",[5895,10448],{"tex":10449,":inline":5898},"-1.00 \\le r_{ij} \\le +1.00",[5306,10451,10453],{"id":10452},"обчислення-та-візуалізація-матриці-heatmap","Обчислення та візуалізація матриці (Heatmap)",[5297,10455,10457,10463],{"kernel":5299,"title":10456},"correlation_matrix.ipynb",[5302,10458,10459],{"type":5304},[5306,10460,10462],{"id":10461},"матриця-кореляції-обчислення-та-heatmap","Матриця кореляції: обчислення та heatmap",[5302,10464,10465,10967],{"execution-count":5312},[5314,10466,10468],{"className":5316,"code":10467,"language":5318,"meta":5319,"style":5319},"import numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport seaborn as sns\n\nrng = np.random.default_rng(seed=42)\n\n# Створюємо синтетичний датасет (100 зразків, 5 змінних)\nn = 100\nage = rng.integers(20, 60, n)\nincome = age * 1200 + rng.normal(0, 5000, n)  # Тісно корелює з віком\neducation_years = rng.normal(14, 3, n)\nsavings = 0.15 * income + 1000 * education_years + rng.normal(0, 3000, n)\ndebt = -0.1 * income + rng.normal(5000, 2000, n)  # Від'ємна кореляція з доходом\n\n# Формуємо DataFrame\ndata = pd.DataFrame({\n    'Вік': age,\n    'Дохід': income,\n    'Освіта (роки)': education_years,\n    'Заощадження': savings,\n    'Борг': debt\n})\n\n# Обчислюємо кореляційну матрицю\ncorr_matrix = data.corr()\n\nprint(\"Матриця кореляції:\\n\")\nprint(corr_matrix.round(2))\n\n# Візуалізуємо через теплову карту (Heatmap)\nplt.figure(figsize=(9, 7.5))\nsns.heatmap(corr_matrix, annot=True, fmt='.2f', cmap='coolwarm', center=0, vmin=-1, vmax=1,\n            square=True, linewidths=1, cbar_kws={\"shrink\": 0.8, \"label\": \"Коефіцієнт кореляції r\"})\nplt.title('Heatmap: Матриця кореляції фінансових показників', fontweight='bold', fontsize=13)\nplt.tight_layout()\nplt.show()\n\nprint(\"\\n📊 Інтерпретація кольорів:\")\nprint(\"  🔴 Червоний (r → +1): сильний позитивний зв'язок\")\nprint(\"  🔵 Синій (r → -1): сильний негативний зв'язок\")\nprint(\"  ⚪ Білий (r ≈ 0): лінійний зв'язок відсутній\")\n",[5321,10469,10470,10480,10492,10502,10514,10518,10530,10534,10539,10545,10560,10584,10598,10624,10647,10651,10656,10661,10669,10677,10685,10693,10701,10706,10710,10715,10720,10724,10739,10750,10754,10759,10776,10837,10881,10907,10911,10915,10919,10934,10945,10956],{"__ignoreMap":5319},[5324,10471,10472,10474,10476,10478],{"class":5326,"line":5327},[5324,10473,5331],{"class":5330},[5324,10475,5335],{"class":5334},[5324,10477,5338],{"class":5330},[5324,10479,5341],{"class":5334},[5324,10481,10482,10484,10487,10489],{"class":5326,"line":5344},[5324,10483,5331],{"class":5330},[5324,10485,10486],{"class":5334}," pandas ",[5324,10488,5338],{"class":5330},[5324,10490,10491],{"class":5334}," pd\n",[5324,10493,10494,10496,10498,10500],{"class":5326,"line":5357},[5324,10495,5331],{"class":5330},[5324,10497,5349],{"class":5334},[5324,10499,5338],{"class":5330},[5324,10501,5354],{"class":5334},[5324,10503,10504,10506,10509,10511],{"class":5326,"line":5364},[5324,10505,5331],{"class":5330},[5324,10507,10508],{"class":5334}," seaborn ",[5324,10510,5338],{"class":5330},[5324,10512,10513],{"class":5334}," sns\n",[5324,10515,10516],{"class":5326,"line":5384},[5324,10517,5361],{"emptyLinePlaceholder":5360},[5324,10519,10520,10522,10524,10526,10528],{"class":5326,"line":5389},[5324,10521,5367],{"class":5334},[5324,10523,5371],{"class":5370},[5324,10525,5374],{"class":5334},[5324,10527,5378],{"class":5377},[5324,10529,5381],{"class":5334},[5324,10531,10532],{"class":5326,"line":5396},[5324,10533,5361],{"emptyLinePlaceholder":5360},[5324,10535,10536],{"class":5326,"line":5422},[5324,10537,10538],{"class":5392},"# Створюємо синтетичний датасет (100 зразків, 5 змінних)\n",[5324,10540,10541,10543],{"class":5326,"line":5455},[5324,10542,9407],{"class":5334},[5324,10544,9410],{"class":5377},[5324,10546,10547,10550,10553,10555,10557],{"class":5326,"line":5460},[5324,10548,10549],{"class":5334},"age = rng.integers(",[5324,10551,10552],{"class":5377},"20",[5324,10554,5405],{"class":5334},[5324,10556,6372],{"class":5377},[5324,10558,10559],{"class":5334},", n)\n",[5324,10561,10562,10565,10568,10571,10573,10575,10578,10581],{"class":5326,"line":5466},[5324,10563,10564],{"class":5334},"income = age * ",[5324,10566,10567],{"class":5377},"1200",[5324,10569,10570],{"class":5334}," + rng.normal(",[5324,10572,5434],{"class":5377},[5324,10574,5405],{"class":5334},[5324,10576,10577],{"class":5377},"5000",[5324,10579,10580],{"class":5334},", n)  ",[5324,10582,10583],{"class":5392},"# Тісно корелює з віком\n",[5324,10585,10586,10589,10591,10593,10596],{"class":5326,"line":5488},[5324,10587,10588],{"class":5334},"education_years = rng.normal(",[5324,10590,5607],{"class":5377},[5324,10592,5405],{"class":5334},[5324,10594,10595],{"class":5377},"3",[5324,10597,10559],{"class":5334},[5324,10599,10600,10603,10606,10609,10612,10615,10617,10619,10622],{"class":5326,"line":5535},[5324,10601,10602],{"class":5334},"savings = ",[5324,10604,10605],{"class":5377},"0.15",[5324,10607,10608],{"class":5334}," * income + ",[5324,10610,10611],{"class":5377},"1000",[5324,10613,10614],{"class":5334}," * education_years + rng.normal(",[5324,10616,5434],{"class":5377},[5324,10618,5405],{"class":5334},[5324,10620,10621],{"class":5377},"3000",[5324,10623,10559],{"class":5334},[5324,10625,10626,10629,10632,10635,10637,10639,10642,10644],{"class":5326,"line":5556},[5324,10627,10628],{"class":5334},"debt = -",[5324,10630,10631],{"class":5377},"0.1",[5324,10633,10634],{"class":5334}," * income + rng.normal(",[5324,10636,10577],{"class":5377},[5324,10638,5405],{"class":5334},[5324,10640,10641],{"class":5377},"2000",[5324,10643,10580],{"class":5334},[5324,10645,10646],{"class":5392},"# Від'ємна кореляція з доходом\n",[5324,10648,10649],{"class":5326,"line":5575},[5324,10650,5361],{"emptyLinePlaceholder":5360},[5324,10652,10653],{"class":5326,"line":5612},[5324,10654,10655],{"class":5392},"# Формуємо DataFrame\n",[5324,10657,10658],{"class":5326,"line":5627},[5324,10659,10660],{"class":5334},"data = pd.DataFrame({\n",[5324,10662,10663,10666],{"class":5326,"line":5633},[5324,10664,10665],{"class":5519},"    'Вік'",[5324,10667,10668],{"class":5334},": age,\n",[5324,10670,10671,10674],{"class":5326,"line":5638},[5324,10672,10673],{"class":5519},"    'Дохід'",[5324,10675,10676],{"class":5334},": income,\n",[5324,10678,10679,10682],{"class":5326,"line":5653},[5324,10680,10681],{"class":5519},"    'Освіта (роки)'",[5324,10683,10684],{"class":5334},": education_years,\n",[5324,10686,10687,10690],{"class":5326,"line":5691},[5324,10688,10689],{"class":5519},"    'Заощадження'",[5324,10691,10692],{"class":5334},": savings,\n",[5324,10694,10695,10698],{"class":5326,"line":5725},[5324,10696,10697],{"class":5519},"    'Борг'",[5324,10699,10700],{"class":5334},": debt\n",[5324,10702,10703],{"class":5326,"line":5743},[5324,10704,10705],{"class":5334},"})\n",[5324,10707,10708],{"class":5326,"line":6150},[5324,10709,5361],{"emptyLinePlaceholder":5360},[5324,10711,10712],{"class":5326,"line":7370},[5324,10713,10714],{"class":5392},"# Обчислюємо кореляційну матрицю\n",[5324,10716,10717],{"class":5326,"line":7375},[5324,10718,10719],{"class":5334},"corr_matrix = data.corr()\n",[5324,10721,10722],{"class":5326,"line":7381},[5324,10723,5361],{"emptyLinePlaceholder":5360},[5324,10725,10726,10728,10730,10733,10735,10737],{"class":5326,"line":7392},[5324,10727,5642],{"class":5641},[5324,10729,5645],{"class":5334},[5324,10731,10732],{"class":5519},"\"Матриця кореляції:",[5324,10734,5735],{"class":5584},[5324,10736,5732],{"class":5519},[5324,10738,5381],{"class":5334},[5324,10740,10741,10743,10746,10748],{"class":5326,"line":7397},[5324,10742,5642],{"class":5641},[5324,10744,10745],{"class":5334},"(corr_matrix.round(",[5324,10747,6334],{"class":5377},[5324,10749,5485],{"class":5334},[5324,10751,10752],{"class":5326,"line":7415},[5324,10753,5361],{"emptyLinePlaceholder":5360},[5324,10755,10756],{"class":5326,"line":7501},[5324,10757,10758],{"class":5392},"# Візуалізуємо через теплову карту (Heatmap)\n",[5324,10760,10761,10763,10765,10767,10769,10771,10774],{"class":5326,"line":7557},[5324,10762,5469],{"class":5334},[5324,10764,5472],{"class":5370},[5324,10766,5475],{"class":5334},[5324,10768,7406],{"class":5377},[5324,10770,5405],{"class":5334},[5324,10772,10773],{"class":5377},"7.5",[5324,10775,5485],{"class":5334},[5324,10777,10778,10781,10784,10786,10788,10790,10793,10795,10798,10800,10803,10805,10808,10810,10812,10814,10816,10818,10821,10824,10826,10828,10831,10833,10835],{"class":5326,"line":7607},[5324,10779,10780],{"class":5334},"sns.heatmap(corr_matrix, ",[5324,10782,10783],{"class":5370},"annot",[5324,10785,5374],{"class":5334},[5324,10787,7711],{"class":5660},[5324,10789,5405],{"class":5334},[5324,10791,10792],{"class":5370},"fmt",[5324,10794,5374],{"class":5334},[5324,10796,10797],{"class":5519},"'.2f'",[5324,10799,5405],{"class":5334},[5324,10801,10802],{"class":5370},"cmap",[5324,10804,5374],{"class":5334},[5324,10806,10807],{"class":5519},"'coolwarm'",[5324,10809,5405],{"class":5334},[5324,10811,6288],{"class":5370},[5324,10813,5374],{"class":5334},[5324,10815,5434],{"class":5377},[5324,10817,5405],{"class":5334},[5324,10819,10820],{"class":5370},"vmin",[5324,10822,10823],{"class":5334},"=-",[5324,10825,5312],{"class":5377},[5324,10827,5405],{"class":5334},[5324,10829,10830],{"class":5370},"vmax",[5324,10832,5374],{"class":5334},[5324,10834,5312],{"class":5377},[5324,10836,10003],{"class":5334},[5324,10838,10839,10842,10844,10846,10848,10850,10852,10854,10856,10859,10862,10865,10867,10869,10871,10874,10876,10879],{"class":5326,"line":7657},[5324,10840,10841],{"class":5370},"            square",[5324,10843,5374],{"class":5334},[5324,10845,7711],{"class":5660},[5324,10847,5405],{"class":5334},[5324,10849,5525],{"class":5370},[5324,10851,5374],{"class":5334},[5324,10853,5312],{"class":5377},[5324,10855,5405],{"class":5334},[5324,10857,10858],{"class":5370},"cbar_kws",[5324,10860,10861],{"class":5334},"={",[5324,10863,10864],{"class":5519},"\"shrink\"",[5324,10866,10438],{"class":5334},[5324,10868,5428],{"class":5377},[5324,10870,5405],{"class":5334},[5324,10872,10873],{"class":5519},"\"label\"",[5324,10875,10438],{"class":5334},[5324,10877,10878],{"class":5519},"\"Коефіцієнт кореляції r\"",[5324,10880,10705],{"class":5334},[5324,10882,10883,10885,10888,10890,10892,10894,10896,10898,10900,10902,10905],{"class":5326,"line":7686},[5324,10884,5578],{"class":5334},[5324,10886,10887],{"class":5519},"'Heatmap: Матриця кореляції фінансових показників'",[5324,10889,5405],{"class":5334},[5324,10891,5593],{"class":5370},[5324,10893,5374],{"class":5334},[5324,10895,5598],{"class":5519},[5324,10897,5405],{"class":5334},[5324,10899,5546],{"class":5370},[5324,10901,5374],{"class":5334},[5324,10903,10904],{"class":5377},"13",[5324,10906,5381],{"class":5334},[5324,10908,10909],{"class":5326,"line":7696},[5324,10910,7742],{"class":5334},[5324,10912,10913],{"class":5326,"line":7706},[5324,10914,5630],{"class":5334},[5324,10916,10917],{"class":5326,"line":7733},[5324,10918,5361],{"emptyLinePlaceholder":5360},[5324,10920,10921,10923,10925,10927,10929,10932],{"class":5326,"line":7739},[5324,10922,5642],{"class":5641},[5324,10924,5645],{"class":5334},[5324,10926,5732],{"class":5519},[5324,10928,5735],{"class":5584},[5324,10930,10931],{"class":5519},"📊 Інтерпретація кольорів:\"",[5324,10933,5381],{"class":5334},[5324,10935,10936,10938,10940,10943],{"class":5326,"line":7745},[5324,10937,5642],{"class":5641},[5324,10939,5645],{"class":5334},[5324,10941,10942],{"class":5519},"\"  🔴 Червоний (r → +1): сильний позитивний зв'язок\"",[5324,10944,5381],{"class":5334},[5324,10946,10947,10949,10951,10954],{"class":5326,"line":9046},[5324,10948,5642],{"class":5641},[5324,10950,5645],{"class":5334},[5324,10952,10953],{"class":5519},"\"  🔵 Синій (r → -1): сильний негативний зв'язок\"",[5324,10955,5381],{"class":5334},[5324,10957,10958,10960,10962,10965],{"class":5326,"line":9057},[5324,10959,5642],{"class":5641},[5324,10961,5645],{"class":5334},[5324,10963,10964],{"class":5519},"\"  ⚪ Білий (r ≈ 0): лінійний зв'язок відсутній\"",[5324,10966,5381],{"class":5334},[5754,10968,10969,10976],{"v-slot:output":5319},[5278,10970,10971],{},[5759,10972],{"alt":10973,"className":10974,"src":10975},"Теплова карта (Heatmap) матриці кореляцій фінансових показників",[5763],"\u002Fimages\u002Fai-python\u002Fstatistics-basics\u002Fcorrelation\u002F03.png",[5314,10977,10980],{"className":10978,"code":10979,"language":5770},[5768],"Матриця кореляції:\n\n                Вік  Дохід  Освіта (роки)  Заощадження  Борг\nВік            1.00   0.95          -0.12         0.19 -0.59\nДохід          0.95   1.00          -0.07         0.27 -0.64\nОсвіта (роки) -0.12  -0.07           1.00         0.64  0.01\nЗаощадження    0.19   0.27           0.64         1.00 -0.27\nБорг          -0.59  -0.64           0.01        -0.27  1.00\n\n📊 Інтерпретація кольорів:\n  🔴 Червоний (r → +1): сильний позитивний зв'язок\n  🔵 Синій (r → -1): сильний негативний зв'язок\n  ⚪ Білий (r ≈ 0): лінійний зв'язок відсутній\n",[5321,10981,10979],{"__ignoreMap":5319},[7764,10983,10985,11029],{"title":10984},"Ключові статистичні висновки з матриці",[5198,10986,10987,10996,11005,11014],{},[5201,10988,10989,10995],{},[5217,10990,10991,10992,6507],{},"Вік ↔ Дохід (",[5895,10993],{"tex":10994,":inline":5898},"r = 0.95",": надзвичайно потужний позитивний зв'язок — з віком та накопиченням професійного стажу дохід стабільно зростає.",[5201,10997,10998,11004],{},[5217,10999,11000,11001,6507],{},"Освіта ↔ Заощадження (",[5895,11002],{"tex":11003,":inline":5898},"r = 0.64",": помітний позитивний зв'язок — додаткові роки навчання сприяють фінансовій грамотності та інвестиціям.",[5201,11006,11007,11013],{},[5217,11008,11009,11010,6507],{},"Дохід ↔ Борг (",[5895,11011],{"tex":11012,":inline":5898},"r = -0.64",": помірний від'ємний зв'язок — люди з вищим рівнем заробітку мають менше проблем із непогашеною заборгованістю.",[5201,11015,11016,5808,11022,11028],{},[5217,11017,11018,11019,6507],{},"Освіта ↔ Вік (",[5895,11020],{"tex":11021,":inline":5898},"r = -0.12",[5217,11023,11024,11025,6507],{},"Освіта ↔ Борг (",[5895,11026],{"tex":11027,":inline":5898},"r = 0.01",": взаємозв'язок практично відсутній.",[5278,11030,11031],{},"Матриця кореляцій дозволяє миттєво відфільтрувати інформативний сигнал від статистичного шуму у великих табличних даних!",[5270,11033],{},[5273,11035,11037],{"id":11036},"кореляція-причинність-correlation-causation","Кореляція ≠ Причинність (Correlation ≠ Causation)",[5278,11039,11040,11041,11044],{},"Це ",[5217,11042,11043],{},"найважливіший методологічний розділ"," в аналізі даних та емпіричній науці.",[6987,11046,11048,11064,11084],{"title":11047},"Золоте правило статистичного аналізу",[5278,11049,11050,11051,5808,11053,11055,11056,11059,11060,11063],{},"Якщо між змінними ",[5895,11052],{"tex":6166,":inline":5898},[5895,11054],{"tex":6173,":inline":5898}," виявлено високу кореляцію (",[5895,11057],{"tex":11058,":inline":5898},"|r| \\gg 0","), це ",[5217,11061,11062],{},"в жодному разі не доводить",", що:",[5198,11065,11066,11074,11081],{},[5201,11067,11068,11070,11071,11073],{},[5895,11069],{"tex":6166,":inline":5898}," є причиною виникнення ",[5895,11072],{"tex":6173,":inline":5898},";",[5201,11075,11076,11078,11079,11073],{},[5895,11077],{"tex":6173,":inline":5898}," спричиняє ",[5895,11080],{"tex":6166,":inline":5898},[5201,11082,11083],{},"між ними взагалі існує причинно-наслідковий механізм.",[5278,11085,11086,11087,11090],{},"Кореляція констатує виключно ",[5217,11088,11089],{},"спільну узгоджену мінливість (асоціацію)",", але не причинність!",[5306,11092,11094],{"id":11093},"класичні-приклади-помилкової-інтерпретації","Класичні приклади помилкової інтерпретації",[6239,11096,11098],{"id":11097},"_1-продажі-морозива-та-кількість-утоплень","1. Продажі морозива та кількість утоплень",[5278,11100,11101,11104,11105,6025],{},[5217,11102,11103],{},"Емпіричний факт:"," Продажі морозива та кількість нещасних випадків на воді демонструють вражаючу позитивну кореляцію (",[5895,11106],{"tex":11107,":inline":5898},"r \\approx 0.9",[5278,11109,11110,11113],{},[5217,11111,11112],{},"Хибний висновок (псевдопричинність):"," «Вживання морозива викликає судоми у воді або потоплення! Необхідно негайно заборонити продаж морозива на пляжах!».",[5278,11115,11116,11119,11120,6250],{},[5217,11117,11118],{},"Реальність (Confounding Variable — прихована третя змінна):"," Обидва явища одночасно зумовлені третім фактором — ",[5217,11121,11122],{},"літньою спекою",[5198,11124,11125,11136],{},[5201,11126,11127,11128,11131,11132,11135],{},"Спекотна погода ",[5895,11129],{"tex":11130,":inline":5898},"\\to"," різко зростає попит на прохолодні ласощі (морозиво ",[5895,11133],{"tex":11134,":inline":5898},"\\uparrow",");",[5201,11137,11127,11138,11140,11141,11143,11144,6025],{},[5895,11139],{"tex":11130,":inline":5898}," мільйони людей масово вирушають купатися у відкритих водоймах ",[5895,11142],{"tex":11130,":inline":5898}," зростає кількість інцидентів на воді (",[5895,11145],{"tex":11134,":inline":5898},[6027,11147,11149],{"alt":11148},"Хибна кореляція через прихований фактор",[5314,11150,11152],{"className":6032,"code":11151,"language":6034,"meta":5319,"style":5319},"@startuml\nskinparam style plain\nskinparam backgroundColor #FFFFFF\nskinparam defaultTextAlignment center\n\nrectangle \"Температура повітря\\n(Літня спека)\" as temp #LightBlue\n\nrectangle \"Продажі\\nморозива ↑\" as ice #LightCoral\nrectangle \"Кількість\\nутоплень ↑\" as drown #LightCoral\n\ntemp -down-> ice : \"причинний зв'язок\"\ntemp -down-> drown : \"причинний зв'язок\"\n\nice ..> drown : \"\u003Cb>кореляція r ≈ 0.9\\n(немає причинності!)\u003C\u002Fb>\"\n\nnote bottom of drown\n  Морозиво НЕ викликає трагедії на воді.\n  Обидва процеси керовані прихованою\n  змінною температури (Confounder).\nend note\n@enduml\n",[5321,11153,11154,11158,11162,11166,11170,11174,11179,11183,11188,11193,11197,11202,11207,11211,11216,11220,11225,11230,11235,11240,11244],{"__ignoreMap":5319},[5324,11155,11156],{"class":5326,"line":5327},[5324,11157,6041],{},[5324,11159,11160],{"class":5326,"line":5344},[5324,11161,6046],{},[5324,11163,11164],{"class":5326,"line":5357},[5324,11165,6051],{},[5324,11167,11168],{"class":5326,"line":5364},[5324,11169,6056],{},[5324,11171,11172],{"class":5326,"line":5384},[5324,11173,5361],{"emptyLinePlaceholder":5360},[5324,11175,11176],{"class":5326,"line":5389},[5324,11177,11178],{},"rectangle \"Температура повітря\\n(Літня спека)\" as temp #LightBlue\n",[5324,11180,11181],{"class":5326,"line":5396},[5324,11182,5361],{"emptyLinePlaceholder":5360},[5324,11184,11185],{"class":5326,"line":5422},[5324,11186,11187],{},"rectangle \"Продажі\\nморозива ↑\" as ice #LightCoral\n",[5324,11189,11190],{"class":5326,"line":5455},[5324,11191,11192],{},"rectangle \"Кількість\\nутоплень ↑\" as drown #LightCoral\n",[5324,11194,11195],{"class":5326,"line":5460},[5324,11196,5361],{"emptyLinePlaceholder":5360},[5324,11198,11199],{"class":5326,"line":5466},[5324,11200,11201],{},"temp -down-> ice : \"причинний зв'язок\"\n",[5324,11203,11204],{"class":5326,"line":5488},[5324,11205,11206],{},"temp -down-> drown : \"причинний зв'язок\"\n",[5324,11208,11209],{"class":5326,"line":5535},[5324,11210,5361],{"emptyLinePlaceholder":5360},[5324,11212,11213],{"class":5326,"line":5556},[5324,11214,11215],{},"ice ..> drown : \"\u003Cb>кореляція r ≈ 0.9\\n(немає причинності!)\u003C\u002Fb>\"\n",[5324,11217,11218],{"class":5326,"line":5575},[5324,11219,5361],{"emptyLinePlaceholder":5360},[5324,11221,11222],{"class":5326,"line":5612},[5324,11223,11224],{},"note bottom of drown\n",[5324,11226,11227],{"class":5326,"line":5627},[5324,11228,11229],{},"  Морозиво НЕ викликає трагедії на воді.\n",[5324,11231,11232],{"class":5326,"line":5633},[5324,11233,11234],{},"  Обидва процеси керовані прихованою\n",[5324,11236,11237],{"class":5326,"line":5638},[5324,11238,11239],{},"  змінною температури (Confounder).\n",[5324,11241,11242],{"class":5326,"line":5653},[5324,11243,6147],{},[5324,11245,11246],{"class":5326,"line":5691},[5324,11247,6153],{},[6239,11249,11251],{"id":11250},"_2-кількість-пожежників-та-матеріальні-збитки-від-пожежі","2. Кількість пожежників та матеріальні збитки від пожежі",[5278,11253,11254,11257,11258,6025],{},[5217,11255,11256],{},"Факт:"," Чим більше пожежних машин та рятувальників прибуває на ліквідацію вогню, тим більші фінансові збитки реєструє страхова компанія (",[5895,11259],{"tex":11260,":inline":5898},"r > 0.8",[5278,11262,11263,11266],{},[5217,11264,11265],{},"Хибний висновок:"," «Пожежники самі провокують руйнування будівель!».",[5278,11268,11269,6183,11272,11275],{},[5217,11270,11271],{},"Реальність (Reverse Causality — зворотна причинність):",[5217,11273,11274],{},"Масштаб самої пожежі"," визначає як рівень збитків, так і категорію тривоги, за якою диспетчер відправляє додаткові бригади на виклик.",[6239,11277,11279],{"id":11278},"_3-споживання-органічних-продуктів-та-аутизм","3. Споживання органічних продуктів та аутизм",[5278,11281,11282,11284,11285,6025],{},[5217,11283,11256],{}," За останні десятиліття зростання продажів органічних фермерських продуктів і кількість зареєстрованих випадків аутизму в розвинених країнах зростали майже паралельно (",[5895,11286],{"tex":11287,":inline":5898},"r > 0.95",[5278,11289,11290,11293],{},[5217,11291,11292],{},"Реальність (Спільний тренд часу):"," Обидва графіки монотонно зростали через глобальні історичні тренди (популяризація здорового харчування з одного боку, та вдосконалення діагностичних критеріїв DSM і скринінгу дітей з іншого).",[5306,11295,11297],{"id":11296},"три-сценарії-походження-кореляції","Три сценарії походження кореляції",[5297,11299,11301,11307],{"kernel":5299,"title":11300},"correlation_causation_scenarios.ipynb",[5302,11302,11303],{"type":5304},[5306,11304,11306],{"id":11305},"три-фундаментальні-пояснення-кореляційного-звязку","Три фундаментальні пояснення кореляційного зв'язку",[5302,11308,11309,12274],{"execution-count":5312},[5314,11310,11312],{"className":5316,"code":11311,"language":5318,"meta":5319,"style":5319},"import matplotlib.pyplot as plt\nfrom matplotlib.patches import FancyArrowPatch\n\nfig, axes = plt.subplots(1, 3, figsize=(15, 4.5))\n\nscenarios = [\n    (\"Сценарій 1:\\nX → Y\", \"X викликає Y\\n(Пряма причинність)\", [(0.25, 0.5, 0.75, 0.5)]),\n    (\"Сценарій 2:\\nY → X\", \"Y викликає X\\n(Зворотна причинність)\", [(0.75, 0.5, 0.25, 0.5)]),\n    (\"Сценарій 3:\\nZ → X, Z → Y\", \"Спільна причина Z\\n(Хибна кореляція)\", [(0.5, 0.75, 0.25, 0.35), (0.5, 0.75, 0.75, 0.35)])\n]\n\nfor ax, (title, subtitle, arrows) in zip(axes, scenarios):\n    ax.set_xlim(0, 1)\n    ax.set_ylim(0, 1)\n    ax.axis('off')\n    ax.set_title(title, fontweight='bold', fontsize=14, pad=10)\n    ax.text(0.5, 0.12, subtitle, ha='center', fontsize=11, fontweight='semibold',\n            bbox=dict(boxstyle='round,pad=0.5', facecolor='#fef3c7', edgecolor='#f59e0b', alpha=0.9))\n\n    for x1, y1, x2, y2 in arrows:\n        arrow = FancyArrowPatch((x1, y1), (x2, y2),\n                                arrowstyle='-|>', mutation_scale=22,\n                                linewidth=3, color='#dc2626')\n        ax.add_patch(arrow)\n\n    if len(arrows) == 1:\n        ax.plot(0.25, 0.5, 'o', markersize=42, color='#2563eb')\n        ax.plot(0.75, 0.5, 'o', markersize=42, color='#ea580c')\n        ax.text(0.25, 0.5, 'X', ha='center', va='center', fontsize=18, fontweight='bold', color='white')\n        ax.text(0.75, 0.5, 'Y', ha='center', va='center', fontsize=18, fontweight='bold', color='white')\n    else:\n        ax.plot(0.5, 0.75, 'o', markersize=42, color='#16a34a')\n        ax.plot(0.25, 0.35, 'o', markersize=42, color='#2563eb')\n        ax.plot(0.75, 0.35, 'o', markersize=42, color='#ea580c')\n        ax.text(0.5, 0.75, 'Z', ha='center', va='center', fontsize=18, fontweight='bold', color='white')\n        ax.text(0.25, 0.35, 'X', ha='center', va='center', fontsize=18, fontweight='bold', color='white')\n        ax.text(0.75, 0.35, 'Y', ha='center', va='center', fontsize=18, fontweight='bold', color='white')\n\nplt.tight_layout()\nplt.show()\n\nprint(\"При виявленні кореляції між X та Y необхідно ретельно перевірити ВСІ три сценарії!\")\nprint(\"Без проведення контрольованих рандомізованих експериментів строго довести причинність неможливо!\")\n",[5321,11313,11314,11324,11336,11340,11365,11369,11374,11419,11459,11518,11522,11526,11541,11554,11567,11577,11607,11648,11696,11700,11713,11718,11739,11758,11763,11767,11782,11817,11849,11908,11964,11971,12003,12035,12067,12124,12180,12236,12240,12244,12248,12252,12263],{"__ignoreMap":5319},[5324,11315,11316,11318,11320,11322],{"class":5326,"line":5327},[5324,11317,5331],{"class":5330},[5324,11319,5349],{"class":5334},[5324,11321,5338],{"class":5330},[5324,11323,5354],{"class":5334},[5324,11325,11326,11328,11331,11333],{"class":5326,"line":5344},[5324,11327,8535],{"class":5330},[5324,11329,11330],{"class":5334}," matplotlib.patches ",[5324,11332,5331],{"class":5330},[5324,11334,11335],{"class":5334}," FancyArrowPatch\n",[5324,11337,11338],{"class":5326,"line":5357},[5324,11339,5361],{"emptyLinePlaceholder":5360},[5324,11341,11342,11344,11346,11348,11350,11352,11354,11356,11358,11360,11363],{"class":5326,"line":5364},[5324,11343,9517],{"class":5334},[5324,11345,5312],{"class":5377},[5324,11347,5405],{"class":5334},[5324,11349,10595],{"class":5377},[5324,11351,5405],{"class":5334},[5324,11353,5472],{"class":5370},[5324,11355,5475],{"class":5334},[5324,11357,7075],{"class":5377},[5324,11359,5405],{"class":5334},[5324,11361,11362],{"class":5377},"4.5",[5324,11364,5485],{"class":5334},[5324,11366,11367],{"class":5326,"line":5384},[5324,11368,5361],{"emptyLinePlaceholder":5360},[5324,11370,11371],{"class":5326,"line":5389},[5324,11372,11373],{"class":5334},"scenarios = [\n",[5324,11375,11376,11379,11382,11384,11387,11389,11392,11394,11397,11400,11403,11405,11407,11409,11412,11414,11416],{"class":5326,"line":5396},[5324,11377,11378],{"class":5334},"    (",[5324,11380,11381],{"class":5519},"\"Сценарій 1:",[5324,11383,5735],{"class":5584},[5324,11385,11386],{"class":5519},"X → Y\"",[5324,11388,5405],{"class":5334},[5324,11390,11391],{"class":5519},"\"X викликає Y",[5324,11393,5735],{"class":5584},[5324,11395,11396],{"class":5519},"(Пряма причинність)\"",[5324,11398,11399],{"class":5334},", [(",[5324,11401,11402],{"class":5377},"0.25",[5324,11404,5405],{"class":5334},[5324,11406,5530],{"class":5377},[5324,11408,5405],{"class":5334},[5324,11410,11411],{"class":5377},"0.75",[5324,11413,5405],{"class":5334},[5324,11415,5530],{"class":5377},[5324,11417,11418],{"class":5334},")]),\n",[5324,11420,11421,11423,11426,11428,11431,11433,11436,11438,11441,11443,11445,11447,11449,11451,11453,11455,11457],{"class":5326,"line":5422},[5324,11422,11378],{"class":5334},[5324,11424,11425],{"class":5519},"\"Сценарій 2:",[5324,11427,5735],{"class":5584},[5324,11429,11430],{"class":5519},"Y → X\"",[5324,11432,5405],{"class":5334},[5324,11434,11435],{"class":5519},"\"Y викликає X",[5324,11437,5735],{"class":5584},[5324,11439,11440],{"class":5519},"(Зворотна причинність)\"",[5324,11442,11399],{"class":5334},[5324,11444,11411],{"class":5377},[5324,11446,5405],{"class":5334},[5324,11448,5530],{"class":5377},[5324,11450,5405],{"class":5334},[5324,11452,11402],{"class":5377},[5324,11454,5405],{"class":5334},[5324,11456,5530],{"class":5377},[5324,11458,11418],{"class":5334},[5324,11460,11461,11463,11466,11468,11471,11473,11476,11478,11481,11483,11485,11487,11489,11491,11493,11495,11498,11501,11503,11505,11507,11509,11511,11513,11515],{"class":5326,"line":5455},[5324,11462,11378],{"class":5334},[5324,11464,11465],{"class":5519},"\"Сценарій 3:",[5324,11467,5735],{"class":5584},[5324,11469,11470],{"class":5519},"Z → X, Z → Y\"",[5324,11472,5405],{"class":5334},[5324,11474,11475],{"class":5519},"\"Спільна причина Z",[5324,11477,5735],{"class":5584},[5324,11479,11480],{"class":5519},"(Хибна кореляція)\"",[5324,11482,11399],{"class":5334},[5324,11484,5530],{"class":5377},[5324,11486,5405],{"class":5334},[5324,11488,11411],{"class":5377},[5324,11490,5405],{"class":5334},[5324,11492,11402],{"class":5377},[5324,11494,5405],{"class":5334},[5324,11496,11497],{"class":5377},"0.35",[5324,11499,11500],{"class":5334},"), (",[5324,11502,5530],{"class":5377},[5324,11504,5405],{"class":5334},[5324,11506,11411],{"class":5377},[5324,11508,5405],{"class":5334},[5324,11510,11411],{"class":5377},[5324,11512,5405],{"class":5334},[5324,11514,11497],{"class":5377},[5324,11516,11517],{"class":5334},")])\n",[5324,11519,11520],{"class":5326,"line":5460},[5324,11521,8647],{"class":5334},[5324,11523,11524],{"class":5326,"line":5466},[5324,11525,5361],{"emptyLinePlaceholder":5360},[5324,11527,11528,11530,11533,11535,11538],{"class":5326,"line":5488},[5324,11529,9552],{"class":5330},[5324,11531,11532],{"class":5334}," ax, (title, subtitle, arrows) ",[5324,11534,9558],{"class":5330},[5324,11536,11537],{"class":5641}," zip",[5324,11539,11540],{"class":5334},"(axes, scenarios):\n",[5324,11542,11543,11546,11548,11550,11552],{"class":5326,"line":5535},[5324,11544,11545],{"class":5334},"    ax.set_xlim(",[5324,11547,5434],{"class":5377},[5324,11549,5405],{"class":5334},[5324,11551,5312],{"class":5377},[5324,11553,5381],{"class":5334},[5324,11555,11556,11559,11561,11563,11565],{"class":5326,"line":5556},[5324,11557,11558],{"class":5334},"    ax.set_ylim(",[5324,11560,5434],{"class":5377},[5324,11562,5405],{"class":5334},[5324,11564,5312],{"class":5377},[5324,11566,5381],{"class":5334},[5324,11568,11569,11572,11575],{"class":5326,"line":5575},[5324,11570,11571],{"class":5334},"    ax.axis(",[5324,11573,11574],{"class":5519},"'off'",[5324,11576,5381],{"class":5334},[5324,11578,11579,11582,11584,11586,11588,11590,11592,11594,11596,11598,11601,11603,11605],{"class":5326,"line":5612},[5324,11580,11581],{"class":5334},"    ax.set_title(title, ",[5324,11583,5593],{"class":5370},[5324,11585,5374],{"class":5334},[5324,11587,5598],{"class":5519},[5324,11589,5405],{"class":5334},[5324,11591,5546],{"class":5370},[5324,11593,5374],{"class":5334},[5324,11595,5607],{"class":5377},[5324,11597,5405],{"class":5334},[5324,11599,11600],{"class":5370},"pad",[5324,11602,5374],{"class":5334},[5324,11604,5408],{"class":5377},[5324,11606,5381],{"class":5334},[5324,11608,11609,11612,11614,11616,11619,11622,11624,11626,11628,11630,11632,11634,11637,11639,11641,11643,11646],{"class":5326,"line":5627},[5324,11610,11611],{"class":5334},"    ax.text(",[5324,11613,5530],{"class":5377},[5324,11615,5405],{"class":5334},[5324,11617,11618],{"class":5377},"0.12",[5324,11620,11621],{"class":5334},", subtitle, ",[5324,11623,9987],{"class":5370},[5324,11625,5374],{"class":5334},[5324,11627,9992],{"class":5519},[5324,11629,5405],{"class":5334},[5324,11631,5546],{"class":5370},[5324,11633,5374],{"class":5334},[5324,11635,11636],{"class":5377},"11",[5324,11638,5405],{"class":5334},[5324,11640,5593],{"class":5370},[5324,11642,5374],{"class":5334},[5324,11644,11645],{"class":5519},"'semibold'",[5324,11647,10003],{"class":5334},[5324,11649,11650,11653,11655,11657,11659,11661,11663,11666,11668,11670,11672,11675,11677,11680,11682,11685,11687,11689,11691,11694],{"class":5326,"line":5633},[5324,11651,11652],{"class":5370},"            bbox",[5324,11654,5374],{"class":5334},[5324,11656,10014],{"class":10013},[5324,11658,5645],{"class":5334},[5324,11660,10019],{"class":5370},[5324,11662,5374],{"class":5334},[5324,11664,11665],{"class":5519},"'round,pad=0.5'",[5324,11667,5405],{"class":5334},[5324,11669,10029],{"class":5370},[5324,11671,5374],{"class":5334},[5324,11673,11674],{"class":5519},"'#fef3c7'",[5324,11676,5405],{"class":5334},[5324,11678,11679],{"class":5370},"edgecolor",[5324,11681,5374],{"class":5334},[5324,11683,11684],{"class":5519},"'#f59e0b'",[5324,11686,5405],{"class":5334},[5324,11688,5494],{"class":5370},[5324,11690,5374],{"class":5334},[5324,11692,11693],{"class":5377},"0.9",[5324,11695,5485],{"class":5334},[5324,11697,11698],{"class":5326,"line":5638},[5324,11699,5361],{"emptyLinePlaceholder":5360},[5324,11701,11702,11705,11708,11710],{"class":5326,"line":5653},[5324,11703,11704],{"class":5330},"    for",[5324,11706,11707],{"class":5334}," x1, y1, x2, y2 ",[5324,11709,9558],{"class":5330},[5324,11711,11712],{"class":5334}," arrows:\n",[5324,11714,11715],{"class":5326,"line":5691},[5324,11716,11717],{"class":5334},"        arrow = FancyArrowPatch((x1, y1), (x2, y2),\n",[5324,11719,11720,11723,11725,11728,11730,11733,11735,11737],{"class":5326,"line":5725},[5324,11721,11722],{"class":5370},"                                arrowstyle",[5324,11724,5374],{"class":5334},[5324,11726,11727],{"class":5519},"'-|>'",[5324,11729,5405],{"class":5334},[5324,11731,11732],{"class":5370},"mutation_scale",[5324,11734,5374],{"class":5334},[5324,11736,7085],{"class":5377},[5324,11738,10003],{"class":5334},[5324,11740,11741,11744,11746,11748,11750,11752,11754,11756],{"class":5326,"line":5743},[5324,11742,11743],{"class":5370},"                                linewidth",[5324,11745,5374],{"class":5334},[5324,11747,10595],{"class":5377},[5324,11749,5405],{"class":5334},[5324,11751,7421],{"class":5370},[5324,11753,5374],{"class":5334},[5324,11755,7426],{"class":5519},[5324,11757,5381],{"class":5334},[5324,11759,11760],{"class":5326,"line":6150},[5324,11761,11762],{"class":5334},"        ax.add_patch(arrow)\n",[5324,11764,11765],{"class":5326,"line":7370},[5324,11766,5361],{"emptyLinePlaceholder":5360},[5324,11768,11769,11772,11775,11778,11780],{"class":5326,"line":7375},[5324,11770,11771],{"class":5330},"    if",[5324,11773,11774],{"class":5641}," len",[5324,11776,11777],{"class":5334},"(arrows) == ",[5324,11779,5312],{"class":5377},[5324,11781,7948],{"class":5334},[5324,11783,11784,11787,11789,11791,11793,11795,11798,11800,11803,11805,11807,11809,11811,11813,11815],{"class":5326,"line":7381},[5324,11785,11786],{"class":5334},"        ax.plot(",[5324,11788,11402],{"class":5377},[5324,11790,5405],{"class":5334},[5324,11792,5530],{"class":5377},[5324,11794,5405],{"class":5334},[5324,11796,11797],{"class":5519},"'o'",[5324,11799,5405],{"class":5334},[5324,11801,11802],{"class":5370},"markersize",[5324,11804,5374],{"class":5334},[5324,11806,5378],{"class":5377},[5324,11808,5405],{"class":5334},[5324,11810,7421],{"class":5370},[5324,11812,5374],{"class":5334},[5324,11814,7511],{"class":5519},[5324,11816,5381],{"class":5334},[5324,11818,11819,11821,11823,11825,11827,11829,11831,11833,11835,11837,11839,11841,11843,11845,11847],{"class":5326,"line":7392},[5324,11820,11786],{"class":5334},[5324,11822,11411],{"class":5377},[5324,11824,5405],{"class":5334},[5324,11826,5530],{"class":5377},[5324,11828,5405],{"class":5334},[5324,11830,11797],{"class":5519},[5324,11832,5405],{"class":5334},[5324,11834,11802],{"class":5370},[5324,11836,5374],{"class":5334},[5324,11838,5378],{"class":5377},[5324,11840,5405],{"class":5334},[5324,11842,7421],{"class":5370},[5324,11844,5374],{"class":5334},[5324,11846,8993],{"class":5519},[5324,11848,5381],{"class":5334},[5324,11850,11851,11854,11856,11858,11860,11862,11864,11866,11868,11870,11872,11874,11877,11879,11881,11883,11885,11887,11889,11891,11893,11895,11897,11899,11901,11903,11906],{"class":5326,"line":7397},[5324,11852,11853],{"class":5334},"        ax.text(",[5324,11855,11402],{"class":5377},[5324,11857,5405],{"class":5334},[5324,11859,5530],{"class":5377},[5324,11861,5405],{"class":5334},[5324,11863,9668],{"class":5519},[5324,11865,5405],{"class":5334},[5324,11867,9987],{"class":5370},[5324,11869,5374],{"class":5334},[5324,11871,9992],{"class":5519},[5324,11873,5405],{"class":5334},[5324,11875,11876],{"class":5370},"va",[5324,11878,5374],{"class":5334},[5324,11880,9992],{"class":5519},[5324,11882,5405],{"class":5334},[5324,11884,5546],{"class":5370},[5324,11886,5374],{"class":5334},[5324,11888,7080],{"class":5377},[5324,11890,5405],{"class":5334},[5324,11892,5593],{"class":5370},[5324,11894,5374],{"class":5334},[5324,11896,5598],{"class":5519},[5324,11898,5405],{"class":5334},[5324,11900,7421],{"class":5370},[5324,11902,5374],{"class":5334},[5324,11904,11905],{"class":5519},"'white'",[5324,11907,5381],{"class":5334},[5324,11909,11910,11912,11914,11916,11918,11920,11922,11924,11926,11928,11930,11932,11934,11936,11938,11940,11942,11944,11946,11948,11950,11952,11954,11956,11958,11960,11962],{"class":5326,"line":7415},[5324,11911,11853],{"class":5334},[5324,11913,11411],{"class":5377},[5324,11915,5405],{"class":5334},[5324,11917,5530],{"class":5377},[5324,11919,5405],{"class":5334},[5324,11921,9678],{"class":5519},[5324,11923,5405],{"class":5334},[5324,11925,9987],{"class":5370},[5324,11927,5374],{"class":5334},[5324,11929,9992],{"class":5519},[5324,11931,5405],{"class":5334},[5324,11933,11876],{"class":5370},[5324,11935,5374],{"class":5334},[5324,11937,9992],{"class":5519},[5324,11939,5405],{"class":5334},[5324,11941,5546],{"class":5370},[5324,11943,5374],{"class":5334},[5324,11945,7080],{"class":5377},[5324,11947,5405],{"class":5334},[5324,11949,5593],{"class":5370},[5324,11951,5374],{"class":5334},[5324,11953,5598],{"class":5519},[5324,11955,5405],{"class":5334},[5324,11957,7421],{"class":5370},[5324,11959,5374],{"class":5334},[5324,11961,11905],{"class":5519},[5324,11963,5381],{"class":5334},[5324,11965,11966,11969],{"class":5326,"line":7501},[5324,11967,11968],{"class":5330},"    else",[5324,11970,7948],{"class":5334},[5324,11972,11973,11975,11977,11979,11981,11983,11985,11987,11989,11991,11993,11995,11997,11999,12001],{"class":5326,"line":7557},[5324,11974,11786],{"class":5334},[5324,11976,5530],{"class":5377},[5324,11978,5405],{"class":5334},[5324,11980,11411],{"class":5377},[5324,11982,5405],{"class":5334},[5324,11984,11797],{"class":5519},[5324,11986,5405],{"class":5334},[5324,11988,11802],{"class":5370},[5324,11990,5374],{"class":5334},[5324,11992,5378],{"class":5377},[5324,11994,5405],{"class":5334},[5324,11996,7421],{"class":5370},[5324,11998,5374],{"class":5334},[5324,12000,9115],{"class":5519},[5324,12002,5381],{"class":5334},[5324,12004,12005,12007,12009,12011,12013,12015,12017,12019,12021,12023,12025,12027,12029,12031,12033],{"class":5326,"line":7607},[5324,12006,11786],{"class":5334},[5324,12008,11402],{"class":5377},[5324,12010,5405],{"class":5334},[5324,12012,11497],{"class":5377},[5324,12014,5405],{"class":5334},[5324,12016,11797],{"class":5519},[5324,12018,5405],{"class":5334},[5324,12020,11802],{"class":5370},[5324,12022,5374],{"class":5334},[5324,12024,5378],{"class":5377},[5324,12026,5405],{"class":5334},[5324,12028,7421],{"class":5370},[5324,12030,5374],{"class":5334},[5324,12032,7511],{"class":5519},[5324,12034,5381],{"class":5334},[5324,12036,12037,12039,12041,12043,12045,12047,12049,12051,12053,12055,12057,12059,12061,12063,12065],{"class":5326,"line":7657},[5324,12038,11786],{"class":5334},[5324,12040,11411],{"class":5377},[5324,12042,5405],{"class":5334},[5324,12044,11497],{"class":5377},[5324,12046,5405],{"class":5334},[5324,12048,11797],{"class":5519},[5324,12050,5405],{"class":5334},[5324,12052,11802],{"class":5370},[5324,12054,5374],{"class":5334},[5324,12056,5378],{"class":5377},[5324,12058,5405],{"class":5334},[5324,12060,7421],{"class":5370},[5324,12062,5374],{"class":5334},[5324,12064,8993],{"class":5519},[5324,12066,5381],{"class":5334},[5324,12068,12069,12071,12073,12075,12077,12079,12082,12084,12086,12088,12090,12092,12094,12096,12098,12100,12102,12104,12106,12108,12110,12112,12114,12116,12118,12120,12122],{"class":5326,"line":7686},[5324,12070,11853],{"class":5334},[5324,12072,5530],{"class":5377},[5324,12074,5405],{"class":5334},[5324,12076,11411],{"class":5377},[5324,12078,5405],{"class":5334},[5324,12080,12081],{"class":5519},"'Z'",[5324,12083,5405],{"class":5334},[5324,12085,9987],{"class":5370},[5324,12087,5374],{"class":5334},[5324,12089,9992],{"class":5519},[5324,12091,5405],{"class":5334},[5324,12093,11876],{"class":5370},[5324,12095,5374],{"class":5334},[5324,12097,9992],{"class":5519},[5324,12099,5405],{"class":5334},[5324,12101,5546],{"class":5370},[5324,12103,5374],{"class":5334},[5324,12105,7080],{"class":5377},[5324,12107,5405],{"class":5334},[5324,12109,5593],{"class":5370},[5324,12111,5374],{"class":5334},[5324,12113,5598],{"class":5519},[5324,12115,5405],{"class":5334},[5324,12117,7421],{"class":5370},[5324,12119,5374],{"class":5334},[5324,12121,11905],{"class":5519},[5324,12123,5381],{"class":5334},[5324,12125,12126,12128,12130,12132,12134,12136,12138,12140,12142,12144,12146,12148,12150,12152,12154,12156,12158,12160,12162,12164,12166,12168,12170,12172,12174,12176,12178],{"class":5326,"line":7696},[5324,12127,11853],{"class":5334},[5324,12129,11402],{"class":5377},[5324,12131,5405],{"class":5334},[5324,12133,11497],{"class":5377},[5324,12135,5405],{"class":5334},[5324,12137,9668],{"class":5519},[5324,12139,5405],{"class":5334},[5324,12141,9987],{"class":5370},[5324,12143,5374],{"class":5334},[5324,12145,9992],{"class":5519},[5324,12147,5405],{"class":5334},[5324,12149,11876],{"class":5370},[5324,12151,5374],{"class":5334},[5324,12153,9992],{"class":5519},[5324,12155,5405],{"class":5334},[5324,12157,5546],{"class":5370},[5324,12159,5374],{"class":5334},[5324,12161,7080],{"class":5377},[5324,12163,5405],{"class":5334},[5324,12165,5593],{"class":5370},[5324,12167,5374],{"class":5334},[5324,12169,5598],{"class":5519},[5324,12171,5405],{"class":5334},[5324,12173,7421],{"class":5370},[5324,12175,5374],{"class":5334},[5324,12177,11905],{"class":5519},[5324,12179,5381],{"class":5334},[5324,12181,12182,12184,12186,12188,12190,12192,12194,12196,12198,12200,12202,12204,12206,12208,12210,12212,12214,12216,12218,12220,12222,12224,12226,12228,12230,12232,12234],{"class":5326,"line":7706},[5324,12183,11853],{"class":5334},[5324,12185,11411],{"class":5377},[5324,12187,5405],{"class":5334},[5324,12189,11497],{"class":5377},[5324,12191,5405],{"class":5334},[5324,12193,9678],{"class":5519},[5324,12195,5405],{"class":5334},[5324,12197,9987],{"class":5370},[5324,12199,5374],{"class":5334},[5324,12201,9992],{"class":5519},[5324,12203,5405],{"class":5334},[5324,12205,11876],{"class":5370},[5324,12207,5374],{"class":5334},[5324,12209,9992],{"class":5519},[5324,12211,5405],{"class":5334},[5324,12213,5546],{"class":5370},[5324,12215,5374],{"class":5334},[5324,12217,7080],{"class":5377},[5324,12219,5405],{"class":5334},[5324,12221,5593],{"class":5370},[5324,12223,5374],{"class":5334},[5324,12225,5598],{"class":5519},[5324,12227,5405],{"class":5334},[5324,12229,7421],{"class":5370},[5324,12231,5374],{"class":5334},[5324,12233,11905],{"class":5519},[5324,12235,5381],{"class":5334},[5324,12237,12238],{"class":5326,"line":7733},[5324,12239,5361],{"emptyLinePlaceholder":5360},[5324,12241,12242],{"class":5326,"line":7739},[5324,12243,7742],{"class":5334},[5324,12245,12246],{"class":5326,"line":7745},[5324,12247,5630],{"class":5334},[5324,12249,12250],{"class":5326,"line":9046},[5324,12251,5361],{"emptyLinePlaceholder":5360},[5324,12253,12254,12256,12258,12261],{"class":5326,"line":9057},[5324,12255,5642],{"class":5641},[5324,12257,5645],{"class":5334},[5324,12259,12260],{"class":5519},"\"При виявленні кореляції між X та Y необхідно ретельно перевірити ВСІ три сценарії!\"",[5324,12262,5381],{"class":5334},[5324,12264,12265,12267,12269,12272],{"class":5326,"line":9068},[5324,12266,5642],{"class":5641},[5324,12268,5645],{"class":5334},[5324,12270,12271],{"class":5519},"\"Без проведення контрольованих рандомізованих експериментів строго довести причинність неможливо!\"",[5324,12273,5381],{"class":5334},[5754,12275,12276,12283],{"v-slot:output":5319},[5278,12277,12278],{},[5759,12279],{"alt":12280,"className":12281,"src":12282},"Три сценарії пояснення кореляції: пряма причинність, зворотна причинність та хибна кореляція через спільну причину",[5763],"\u002Fimages\u002Fai-python\u002Fstatistics-basics\u002Fcorrelation\u002F04.png",[5314,12284,12287],{"className":12285,"code":12286,"language":5770},[5768],"При виявленні кореляції між X та Y необхідно ретельно перевірити ВСІ три сценарії!\nБез проведення контрольованих рандомізованих експериментів строго довести причинність неможливо!\n",[5321,12288,12286],{"__ignoreMap":5319},[5306,12290,12292],{"id":12291},"як-у-науці-доводять-причинність","Як у науці доводять причинність?",[5278,12294,12295],{},"Кореляція — це лише первинна евристика для формулювання наукової гіпотези. Для доведення причинно-наслідкового зв'язку потрібні:",[5779,12297,12298,12320,12334,12348],{},[5201,12299,12300,7948,12303],{},[5217,12301,12302],{},"Рандомізовані контрольовані дослідження (RCT — Randomized Controlled Trials)",[5198,12304,12305,12314],{},[5201,12306,12307,12308,12310,12311,12313],{},"Випадковим чином розбити вибірку на тестову (де штучно змінюється ",[5895,12309],{"tex":6166,":inline":5898},") та контрольну (де ",[5895,12312],{"tex":6166,":inline":5898}," зафіксовано на базовому рівні).",[5201,12315,12316,12317,12319],{},"Якщо статистично значущі зміни ",[5895,12318],{"tex":6173,":inline":5898}," виникають виключно в тестовій групі, причинність доведено.",[5201,12321,12322,7948,12325],{},[5217,12323,12324],{},"Темпоральний пріоритет (послідовність у часі)",[5198,12326,12327],{},[5201,12328,12329,12330,12333],{},"Причина повинна строго передувати наслідку (",[5895,12331],{"tex":12332,":inline":5898},"t_X \u003C t_Y","). Якщо відгук змінюється раніше за тригер, гіпотеза відкидається.",[5201,12335,12336,7948,12339],{},[5217,12337,12338],{},"Контроль заважаючих факторів (Confounders)",[5198,12340,12341],{},[5201,12342,12343,12344,12347],{},"Усунення або статистична фіксація впливу всіх прихованих факторів ",[5895,12345],{"tex":12346,":inline":5898},"Z_1, Z_2, \\dots, Z_k"," (наприклад, через A\u002FB-тестування або метод інструментальних змінних).",[5201,12349,12350,7948,12353],{},[5217,12351,12352],{},"Фізичний або біологічний механізм",[5198,12354,12355],{},[5201,12356,12357,12358,12361,12362,6640,12364,5812],{},"Наявність чіткої наукової теорії, що пояснює, ",[5217,12359,12360],{},"яким саме чином"," вплив передається від ",[5895,12363],{"tex":6166,":inline":5898},[5895,12365],{"tex":6173,":inline":5898},[8125,12367,12368,12373,12379,12401,12407],{},[5278,12369,12370],{},[5217,12371,12372],{},"Мовний етикет дата-аналітика:",[5278,12374,12375,12376],{},"✅ ",[5217,12377,12378],{},"Коректно стверджувати:",[5198,12380,12381,12390,12393],{},[5201,12382,12383,12384,12386,12387,12389],{},"«Ознака ",[5895,12385],{"tex":6166,":inline":5898}," статистично асоційована зі зростанням ",[5895,12388],{"tex":6173,":inline":5898},"»",[5201,12391,12392],{},"«Між параметрами виявлено помірний коваріаційний зв'язок»",[5201,12394,12395,12396,12398,12399,12389],{},"«Змінна ",[5895,12397],{"tex":6166,":inline":5898}," володіє прогностичною силою щодо ",[5895,12400],{"tex":6173,":inline":5898},[5278,12402,12403,12404],{},"❌ ",[5217,12405,12406],{},"Неприпустимо без експерименту:",[5198,12408,12409,12416],{},[5201,12410,12383,12411,12413,12414,12389],{},[5895,12412],{"tex":6166,":inline":5898}," призводить до падіння ",[5895,12415],{"tex":6173,":inline":5898},[5201,12417,12418,12419,12421,12422,12389],{},"«Підвищення параметра ",[5895,12420],{"tex":6166,":inline":5898}," викликає зростання ",[5895,12423],{"tex":6173,":inline":5898},[5306,12425,12427],{"id":12426},"spurious-correlations-хибні-кореляції","Spurious Correlations (хибні кореляції)",[5278,12429,12430,12431,12434,12435,6250],{},"Відомий проєкт Тайлера Вігена (",[5232,12432,12433],{},"Tyler Vigen",") наочно доводить: якщо зібрати тисячі незалежних часових рядів, закон великих чисел гарантує, що деякі з них випадково покажуть ",[5895,12436],{"tex":11287,":inline":5898},[5198,12438,12439,12445],{},[5201,12440,12441,12442,6507],{},"Споживання сиру моцарела на душу населення ↔ Кількість захищених докторських дисертацій з цивільної інженерії (",[5895,12443],{"tex":12444,":inline":5898},"r = 0.959",[5201,12446,12447,12448,6507],{},"Кількість людей, що втонули в басейнах США ↔ Кількість фільмів за участю Ніколаса Кейджа (",[5895,12449],{"tex":12450,":inline":5898},"r = 0.67",[5297,12452,12454],{"kernel":5299,"title":12453},"spurious_correlation_example.ipynb",[5302,12455,12456,13001],{"execution-count":5312},[5314,12457,12459],{"className":5316,"code":12458,"language":5318,"meta":5319,"style":5319},"import numpy as np\nimport matplotlib.pyplot as plt\n\nrng = np.random.default_rng(seed=42)\n\n# Дві повністю незалежні змінні з глобальним трендом часу\nyears = np.arange(2000, 2020)\ncheese_consumption = 10 + 0.5 * np.arange(20) + rng.normal(0, 1, 20)\nengineering_phd = 500 + 25 * np.arange(20) + rng.normal(0, 30, 20)\n\n# Обчислення кореляції\nr = np.corrcoef(cheese_consumption, engineering_phd)[0, 1]\n\n# Візуалізація двох шкал\nfig, ax1 = plt.subplots(figsize=(11, 5.5))\n\nax1.plot(years, cheese_consumption, 'o-', color='#f59e0b', linewidth=2.2, markersize=7, label='Споживання сиру (кг\u002Fособу)')\nax1.set_xlabel('Рік', fontsize=12)\nax1.set_ylabel('Споживання сиру (кг\u002Fособу)', color='#d97706', fontsize=12)\nax1.tick_params(axis='y', labelcolor='#d97706')\n\nax2 = ax1.twinx()\nax2.plot(years, engineering_phd, 's--', color='#2563eb', linewidth=2.2, markersize=7, label='Докторські з інженерії')\nax2.set_ylabel('Кількість захищених дисертацій', color='#1d4ed8', fontsize=12)\nax2.tick_params(axis='y', labelcolor='#1d4ed8')\n\nplt.title(f'Spurious Correlation: r = {r:.3f}\\n(Спільний часовий тренд без жодного причинно-наслідкового зв\\'язку)',\n          fontweight='bold', fontsize=13)\nfig.legend(loc='upper left', bbox_to_anchor=(0.12, 0.88))\nplt.grid(True, linestyle=':', alpha=0.5)\nplt.tight_layout()\nplt.show()\n\nprint(f\"Кореляція: r = {r:.3f}\")\nprint(\"Пояснення: обидва процеси зростають в часі з незалежних причин.\")\nprint(\"Це класичний випадок хибної кореляції трендів (Spurious Correlation)!\")\n",[5321,12460,12461,12471,12481,12485,12497,12501,12506,12520,12552,12582,12586,12591,12604,12608,12613,12630,12634,12678,12695,12720,12744,12748,12753,12796,12822,12843,12847,12874,12893,12922,12946,12950,12954,12958,12979,12990],{"__ignoreMap":5319},[5324,12462,12463,12465,12467,12469],{"class":5326,"line":5327},[5324,12464,5331],{"class":5330},[5324,12466,5335],{"class":5334},[5324,12468,5338],{"class":5330},[5324,12470,5341],{"class":5334},[5324,12472,12473,12475,12477,12479],{"class":5326,"line":5344},[5324,12474,5331],{"class":5330},[5324,12476,5349],{"class":5334},[5324,12478,5338],{"class":5330},[5324,12480,5354],{"class":5334},[5324,12482,12483],{"class":5326,"line":5357},[5324,12484,5361],{"emptyLinePlaceholder":5360},[5324,12486,12487,12489,12491,12493,12495],{"class":5326,"line":5364},[5324,12488,5367],{"class":5334},[5324,12490,5371],{"class":5370},[5324,12492,5374],{"class":5334},[5324,12494,5378],{"class":5377},[5324,12496,5381],{"class":5334},[5324,12498,12499],{"class":5326,"line":5384},[5324,12500,5361],{"emptyLinePlaceholder":5360},[5324,12502,12503],{"class":5326,"line":5389},[5324,12504,12505],{"class":5392},"# Дві повністю незалежні змінні з глобальним трендом часу\n",[5324,12507,12508,12511,12513,12515,12518],{"class":5326,"line":5396},[5324,12509,12510],{"class":5334},"years = np.arange(",[5324,12512,10641],{"class":5377},[5324,12514,5405],{"class":5334},[5324,12516,12517],{"class":5377},"2020",[5324,12519,5381],{"class":5334},[5324,12521,12522,12525,12527,12530,12532,12535,12537,12540,12542,12544,12546,12548,12550],{"class":5326,"line":5422},[5324,12523,12524],{"class":5334},"cheese_consumption = ",[5324,12526,5408],{"class":5377},[5324,12528,12529],{"class":5334}," + ",[5324,12531,5530],{"class":5377},[5324,12533,12534],{"class":5334}," * np.arange(",[5324,12536,10552],{"class":5377},[5324,12538,12539],{"class":5334},") + rng.normal(",[5324,12541,5434],{"class":5377},[5324,12543,5405],{"class":5334},[5324,12545,5312],{"class":5377},[5324,12547,5405],{"class":5334},[5324,12549,10552],{"class":5377},[5324,12551,5381],{"class":5334},[5324,12553,12554,12557,12560,12562,12564,12566,12568,12570,12572,12574,12576,12578,12580],{"class":5326,"line":5455},[5324,12555,12556],{"class":5334},"engineering_phd = ",[5324,12558,12559],{"class":5377},"500",[5324,12561,12529],{"class":5334},[5324,12563,7090],{"class":5377},[5324,12565,12534],{"class":5334},[5324,12567,10552],{"class":5377},[5324,12569,12539],{"class":5334},[5324,12571,5434],{"class":5377},[5324,12573,5405],{"class":5334},[5324,12575,6512],{"class":5377},[5324,12577,5405],{"class":5334},[5324,12579,10552],{"class":5377},[5324,12581,5381],{"class":5334},[5324,12583,12584],{"class":5326,"line":5460},[5324,12585,5361],{"emptyLinePlaceholder":5360},[5324,12587,12588],{"class":5326,"line":5466},[5324,12589,12590],{"class":5392},"# Обчислення кореляції\n",[5324,12592,12593,12596,12598,12600,12602],{"class":5326,"line":5488},[5324,12594,12595],{"class":5334},"r = np.corrcoef(cheese_consumption, engineering_phd)[",[5324,12597,5434],{"class":5377},[5324,12599,5405],{"class":5334},[5324,12601,5312],{"class":5377},[5324,12603,8647],{"class":5334},[5324,12605,12606],{"class":5326,"line":5535},[5324,12607,5361],{"emptyLinePlaceholder":5360},[5324,12609,12610],{"class":5326,"line":5556},[5324,12611,12612],{"class":5392},"# Візуалізація двох шкал\n",[5324,12614,12615,12618,12620,12622,12624,12626,12628],{"class":5326,"line":5575},[5324,12616,12617],{"class":5334},"fig, ax1 = plt.subplots(",[5324,12619,5472],{"class":5370},[5324,12621,5475],{"class":5334},[5324,12623,11636],{"class":5377},[5324,12625,5405],{"class":5334},[5324,12627,8931],{"class":5377},[5324,12629,5485],{"class":5334},[5324,12631,12632],{"class":5326,"line":5612},[5324,12633,5361],{"emptyLinePlaceholder":5360},[5324,12635,12636,12639,12642,12644,12646,12648,12650,12652,12654,12656,12659,12661,12663,12665,12667,12669,12671,12673,12676],{"class":5326,"line":5627},[5324,12637,12638],{"class":5334},"ax1.plot(years, cheese_consumption, ",[5324,12640,12641],{"class":5519},"'o-'",[5324,12643,5405],{"class":5334},[5324,12645,7421],{"class":5370},[5324,12647,5374],{"class":5334},[5324,12649,11684],{"class":5519},[5324,12651,5405],{"class":5334},[5324,12653,9714],{"class":5370},[5324,12655,5374],{"class":5334},[5324,12657,12658],{"class":5377},"2.2",[5324,12660,5405],{"class":5334},[5324,12662,11802],{"class":5370},[5324,12664,5374],{"class":5334},[5324,12666,9824],{"class":5377},[5324,12668,5405],{"class":5334},[5324,12670,7441],{"class":5370},[5324,12672,5374],{"class":5334},[5324,12674,12675],{"class":5519},"'Споживання сиру (кг\u002Fособу)'",[5324,12677,5381],{"class":5334},[5324,12679,12680,12682,12685,12687,12689,12691,12693],{"class":5326,"line":5633},[5324,12681,9049],{"class":5334},[5324,12683,12684],{"class":5519},"'Рік'",[5324,12686,5405],{"class":5334},[5324,12688,5546],{"class":5370},[5324,12690,5374],{"class":5334},[5324,12692,5551],{"class":5377},[5324,12694,5381],{"class":5334},[5324,12696,12697,12699,12701,12703,12705,12707,12710,12712,12714,12716,12718],{"class":5326,"line":5638},[5324,12698,9060],{"class":5334},[5324,12700,12675],{"class":5519},[5324,12702,5405],{"class":5334},[5324,12704,7421],{"class":5370},[5324,12706,5374],{"class":5334},[5324,12708,12709],{"class":5519},"'#d97706'",[5324,12711,5405],{"class":5334},[5324,12713,5546],{"class":5370},[5324,12715,5374],{"class":5334},[5324,12717,5551],{"class":5377},[5324,12719,5381],{"class":5334},[5324,12721,12722,12725,12728,12730,12733,12735,12738,12740,12742],{"class":5326,"line":5653},[5324,12723,12724],{"class":5334},"ax1.tick_params(",[5324,12726,12727],{"class":5370},"axis",[5324,12729,5374],{"class":5334},[5324,12731,12732],{"class":5519},"'y'",[5324,12734,5405],{"class":5334},[5324,12736,12737],{"class":5370},"labelcolor",[5324,12739,5374],{"class":5334},[5324,12741,12709],{"class":5519},[5324,12743,5381],{"class":5334},[5324,12745,12746],{"class":5326,"line":5691},[5324,12747,5361],{"emptyLinePlaceholder":5360},[5324,12749,12750],{"class":5326,"line":5725},[5324,12751,12752],{"class":5334},"ax2 = ax1.twinx()\n",[5324,12754,12755,12758,12761,12763,12765,12767,12769,12771,12773,12775,12777,12779,12781,12783,12785,12787,12789,12791,12794],{"class":5326,"line":5743},[5324,12756,12757],{"class":5334},"ax2.plot(years, engineering_phd, ",[5324,12759,12760],{"class":5519},"'s--'",[5324,12762,5405],{"class":5334},[5324,12764,7421],{"class":5370},[5324,12766,5374],{"class":5334},[5324,12768,7511],{"class":5519},[5324,12770,5405],{"class":5334},[5324,12772,9714],{"class":5370},[5324,12774,5374],{"class":5334},[5324,12776,12658],{"class":5377},[5324,12778,5405],{"class":5334},[5324,12780,11802],{"class":5370},[5324,12782,5374],{"class":5334},[5324,12784,9824],{"class":5377},[5324,12786,5405],{"class":5334},[5324,12788,7441],{"class":5370},[5324,12790,5374],{"class":5334},[5324,12792,12793],{"class":5519},"'Докторські з інженерії'",[5324,12795,5381],{"class":5334},[5324,12797,12798,12800,12803,12805,12807,12809,12812,12814,12816,12818,12820],{"class":5326,"line":6150},[5324,12799,9284],{"class":5334},[5324,12801,12802],{"class":5519},"'Кількість захищених дисертацій'",[5324,12804,5405],{"class":5334},[5324,12806,7421],{"class":5370},[5324,12808,5374],{"class":5334},[5324,12810,12811],{"class":5519},"'#1d4ed8'",[5324,12813,5405],{"class":5334},[5324,12815,5546],{"class":5370},[5324,12817,5374],{"class":5334},[5324,12819,5551],{"class":5377},[5324,12821,5381],{"class":5334},[5324,12823,12824,12827,12829,12831,12833,12835,12837,12839,12841],{"class":5326,"line":7370},[5324,12825,12826],{"class":5334},"ax2.tick_params(",[5324,12828,12727],{"class":5370},[5324,12830,5374],{"class":5334},[5324,12832,12732],{"class":5519},[5324,12834,5405],{"class":5334},[5324,12836,12737],{"class":5370},[5324,12838,5374],{"class":5334},[5324,12840,12811],{"class":5519},[5324,12842,5381],{"class":5334},[5324,12844,12845],{"class":5326,"line":7375},[5324,12846,5361],{"emptyLinePlaceholder":5360},[5324,12848,12849,12851,12853,12856,12858,12860,12862,12864,12867,12869,12872],{"class":5326,"line":7381},[5324,12850,5578],{"class":5334},[5324,12852,5661],{"class":5660},[5324,12854,12855],{"class":5519},"'Spurious Correlation: r = ",[5324,12857,5667],{"class":5660},[5324,12859,7815],{"class":5334},[5324,12861,8847],{"class":5660},[5324,12863,5735],{"class":5584},[5324,12865,12866],{"class":5519},"(Спільний часовий тренд без жодного причинно-наслідкового зв",[5324,12868,5585],{"class":5584},[5324,12870,12871],{"class":5519},"язку)'",[5324,12873,10003],{"class":5334},[5324,12875,12876,12879,12881,12883,12885,12887,12889,12891],{"class":5326,"line":7392},[5324,12877,12878],{"class":5370},"          fontweight",[5324,12880,5374],{"class":5334},[5324,12882,5598],{"class":5519},[5324,12884,5405],{"class":5334},[5324,12886,5546],{"class":5370},[5324,12888,5374],{"class":5334},[5324,12890,10904],{"class":5377},[5324,12892,5381],{"class":5334},[5324,12894,12895,12898,12901,12903,12906,12908,12911,12913,12915,12917,12920],{"class":5326,"line":7397},[5324,12896,12897],{"class":5334},"fig.legend(",[5324,12899,12900],{"class":5370},"loc",[5324,12902,5374],{"class":5334},[5324,12904,12905],{"class":5519},"'upper left'",[5324,12907,5405],{"class":5334},[5324,12909,12910],{"class":5370},"bbox_to_anchor",[5324,12912,5475],{"class":5334},[5324,12914,11618],{"class":5377},[5324,12916,5405],{"class":5334},[5324,12918,12919],{"class":5377},"0.88",[5324,12921,5485],{"class":5334},[5324,12923,12924,12926,12928,12930,12932,12934,12936,12938,12940,12942,12944],{"class":5326,"line":7415},[5324,12925,5615],{"class":5334},[5324,12927,7711],{"class":5660},[5324,12929,5405],{"class":5334},[5324,12931,7431],{"class":5370},[5324,12933,5374],{"class":5334},[5324,12935,7720],{"class":5519},[5324,12937,5405],{"class":5334},[5324,12939,5494],{"class":5370},[5324,12941,5374],{"class":5334},[5324,12943,5530],{"class":5377},[5324,12945,5381],{"class":5334},[5324,12947,12948],{"class":5326,"line":7501},[5324,12949,7742],{"class":5334},[5324,12951,12952],{"class":5326,"line":7557},[5324,12953,5630],{"class":5334},[5324,12955,12956],{"class":5326,"line":7607},[5324,12957,5361],{"emptyLinePlaceholder":5360},[5324,12959,12960,12962,12964,12966,12969,12971,12973,12975,12977],{"class":5326,"line":7657},[5324,12961,5642],{"class":5641},[5324,12963,5645],{"class":5334},[5324,12965,5661],{"class":5660},[5324,12967,12968],{"class":5519},"\"Кореляція: r = ",[5324,12970,5667],{"class":5660},[5324,12972,7815],{"class":5334},[5324,12974,8847],{"class":5660},[5324,12976,5732],{"class":5519},[5324,12978,5381],{"class":5334},[5324,12980,12981,12983,12985,12988],{"class":5326,"line":7686},[5324,12982,5642],{"class":5641},[5324,12984,5645],{"class":5334},[5324,12986,12987],{"class":5519},"\"Пояснення: обидва процеси зростають в часі з незалежних причин.\"",[5324,12989,5381],{"class":5334},[5324,12991,12992,12994,12996,12999],{"class":5326,"line":7696},[5324,12993,5642],{"class":5641},[5324,12995,5645],{"class":5334},[5324,12997,12998],{"class":5519},"\"Це класичний випадок хибної кореляції трендів (Spurious Correlation)!\"",[5324,13000,5381],{"class":5334},[5754,13002,13003,13010],{"v-slot:output":5319},[5278,13004,13005],{},[5759,13006],{"alt":13007,"className":13008,"src":13009},"Хибна кореляція (Spurious correlation): спільний часовий тренд без причинного зв'язку",[5763],"\u002Fimages\u002Fai-python\u002Fstatistics-basics\u002Fcorrelation\u002F05.png",[5314,13011,13014],{"className":13012,"code":13013,"language":5770},[5768],"Кореляція: r = 0.959\nПояснення: обидва процеси зростають в часі з незалежних причин.\nЦе класичний випадок хибної кореляції трендів (Spurious Correlation)!\n",[5321,13015,13013],{"__ignoreMap":5319},[7764,13017,13019,13022,13025,13046,13060,13073],{"title":13018},"Інженерна аналогія: Хибна кореляція в телеметрії та DevOps (SRE)",[5278,13020,13021],{},"У моніторингу розподілених бекенд-систем (Datadog, Prometheus, Grafana) хибні кореляції — це щоденний кошмар чергових інженерів.",[5278,13023,13024],{},"Уявіть ситуацію:",[5198,13026,13027,13034,13040],{},[5201,13028,13029,13030,13033],{},"Щоранку о 09:00 спостерігається стрімкий стрибок навантаження CPU мікросервісу ",[5321,13031,13032],{},"auth-service"," (з 15% до 85%).",[5201,13035,13036,13037,5812],{},"Одночасно на балансувальнику навантаження (Nginx\u002FCloudflare) різко зростає кількість помилок ",[5321,13038,13039],{},"HTTP 404 Not Found",[5201,13041,13042,13043,5812],{},"Матриця кореляцій показує майже ідеальний зв'язок: ",[5895,13044],{"tex":13045,":inline":5898},"r = 0.97",[5278,13047,13048,13051,13052,13055,13056,13059],{},[5217,13049,13050],{},"Хибний висновок",": «Сервіс авторизації перевантажений, через що балансувальник губить маршрути і повертає 404!».\n",[5217,13053,13054],{},"Реальність (Confounding Variable — прихований фактор)",":\nТретім фактором є ",[5217,13057,13058],{},"початок робочого дня співробітників компанії",". О 09:00 тисячі працівників одночасно відкривають ноутбуки:",[5779,13061,13062,13067],{},[5201,13063,13064,13065,6025],{},"Вони проходять процедуру SSO-авторизації (навантажуючи ",[5321,13066,13032],{},[5201,13068,13069,13070,6025],{},"Їхні браузери автоматично відкривають закешовані вкладки із застарілими endpoint-ами, які бекенд-команда видалила під час нічного деплою (викликаючи сплеск ",[5321,13071,13072],{},"404",[5278,13074,13075,13076,5808,13078,13081],{},"Між ",[5321,13077,13032],{},[5321,13079,13080],{},"HTTP 404"," немає жодного причинного зв'язку. Якщо інженер кинеться оптимізувати сервіс авторизації, щоб зменшити помилки 404, він даремно змарнує робочий час на боротьбу з міражем.",[5270,13083],{},[5273,13085,13087],{"id":13086},"мультиколінеарність-multicollinearity","Мультиколінеарність (Multicollinearity)",[5278,13089,13090,13093,13094,5812],{},[5217,13091,13092],{},"Мультиколінеарність"," — це явище в багатовимірному аналізі та машинному навчанні, коли дві або більше пояснювальних ознак (features) перебувають у ",[5217,13095,13096],{},"сильній лінійній залежності між собою",[5306,13098,13100],{"id":13099},"чому-це-критична-проблема-для-моделей","Чому це критична проблема для моделей?",[5779,13102,13103,13115,13121],{},[5201,13104,13105,13108,13109,6640,13112,5812],{},[5217,13106,13107],{},"Нестійкість коефіцієнтів регресії",": незначна зміна у вибірці або невеликий шум спричиняють стрибки ваг моделі від ",[5895,13110],{"tex":13111,":inline":5898},"-\\infty",[5895,13113],{"tex":13114,":inline":5898},"+\\infty",[5201,13116,13117,13120],{},[5217,13118,13119],{},"Втрата інтерпретованості",": стає неможливо визначити, яка саме ознака насправді впливає на цільову змінну, оскільки ознаки-дублікати «крадуть» вагу одна в одної.",[5201,13122,13123,13126],{},[5217,13124,13125],{},"Завищена дисперсія помилок",": стандартні похибки коефіцієнтів стрімко зростають, роблячи t-статистику неінформативною.",[5814,13128,13129],{},[5278,13130,13131,13132,13135,13136,13139],{},"Аналогія: Уявіть, що ви прогнозуєте вартість квартири, використовуючи одночасно дві ознаки: «Площа в м²» та «Площа у фут²». Оскільки ",[5895,13133],{"tex":13134,":inline":5898},"1\\text{ м}^2 \\approx 10.764\\text{ фут}^2",", коефіцієнт кореляції між ними ",[5895,13137],{"tex":13138,":inline":5898},"r = 1.00",". Алгоритм лінійної регресії не може вирішити, як розподілити вагу між цими ознаками-клонами!",[7764,13141,13143,13146],{"title":13142},"Інженерна аналогія: Порушення 3NF в базах даних та сингулярність матриць",[5278,13144,13145],{},"Для software-інженерів мультиколінеарність має прямий еквівалент у реляційних базах даних та лінійній алгебрі:",[5779,13147,13148,13172],{},[5201,13149,13150,13153,13154,13157,13158,5405,13161,5808,13164,13167,13168,13171],{},[5217,13151,13152],{},"Порушення 3-ї нормальної форми (3NF)",":\nЯкщо в таблиці ",[5321,13155,13156],{},"users"," зберігати стовпчики ",[5321,13159,13160],{},"birth_date",[5321,13162,13163],{},"age_years",[5321,13165,13166],{},"age_months",", ви вносите функціональну транзитивну залежність. У СУБД це призводить до аномалій оновлення (",[5321,13169,13170],{},"UPDATE","), а в ML — змушує оптимізатор штучно ділити градієнт між дублікатами.",[5201,13173,13174,13180,13181,13184,13186,13187,13190,13191,13194,13195,13198,13199,13202],{},[5217,13175,13176,13177,6507],{},"Сингулярність матриці Грама (",[5895,13178],{"tex":13179,":inline":5898},"\\mathbf{X}^T \\mathbf{X}",":\nАналітичний розв'язок методу найменших квадратів (OLS) задається нормальним рівнянням:",[5895,13182],{"tex":13183},"\\mathbf{w} = (\\mathbf{X}^T \\mathbf{X})^{-1} \\mathbf{X}^T \\mathbf{y}",[5850,13185],{},"Якщо два стовпці матриці ",[5895,13188],{"tex":13189,":inline":5898},"\\mathbf{X}"," лінійно залежні, визначник ",[5895,13192],{"tex":13193,":inline":5898},"\\det(\\mathbf{X}^T \\mathbf{X}) \\to 0",". Матриця стає майже виродженою (число обумовленості ",[5232,13196,13197],{},"condition number"," прямує до нескінченності). Похибки округлення чисел з плаваючою комою (",[5232,13200,13201],{},"floating-point errors",") лавиноподібно зростають, руйнуючи обчислення.",[5306,13204,13206],{"id":13205},"виявлення-мультиколінеарності","Виявлення мультиколінеарності",[5297,13208,13210,13216],{"kernel":5299,"title":13209},"multicollinearity_detection.ipynb",[5302,13211,13212],{"type":5304},[5306,13213,13215],{"id":13214},"виявлення-мультиколінеарності-через-кореляційну-матрицю","Виявлення мультиколінеарності через кореляційну матрицю",[5302,13217,13218,13780],{"execution-count":5312},[5314,13219,13221],{"className":5316,"code":13220,"language":5318,"meta":5319,"style":5319},"import numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport seaborn as sns\n\nrng = np.random.default_rng(seed=42)\nn = 100\n\n# Генеруємо штучні ознаки з колінеарністю\narea_m2 = rng.uniform(30, 150, n)\narea_ft2 = area_m2 * 10.764               # Ідеальна колінеарність (r = 1.0)\nrooms = rng.poisson(3, n)\nage = rng.integers(0, 50, n)\nage_squared = age ** 2                    # Нелінійна монотонна залежність (r ≈ 0.97)\n\n# Цільова змінна: ціна\nprice = 1000 * area_m2 - 500 * age + rng.normal(0, 5000, n)\n\ndata = pd.DataFrame({\n    'Площа (м²)': area_m2,\n    'Площа (фут²)': area_ft2,\n    'Кімнати': rooms,\n    'Вік': age,\n    'Вік²': age_squared,\n    'Ціна': price\n})\n\ncorr_matrix = data.corr()\n\n# Візуалізація\nplt.figure(figsize=(9, 7.5))\nsns.heatmap(corr_matrix, annot=True, fmt='.2f', cmap='RdYlGn', center=0, vmin=-1, vmax=1,\n            square=True, linewidths=1.5, linecolor='white', cbar_kws={'shrink': 0.8, 'label': 'Коефіцієнт r'})\nplt.title('Матриця кореляцій: Виявлення мультиколінеарності ознак', fontweight='bold', fontsize=13)\nplt.tight_layout()\nplt.show()\n\n# Автоматичний пошук колінеарних пар\nprint(\"⚠ ВИЯВЛЕНА МУЛЬТИКОЛІНЕАРНІСТЬ (|r| > 0.90 серед предикторів):\\n\")\nfeatures = [col for col in corr_matrix.columns if col != 'Ціна']\nfor i in range(len(features)):\n    for j in range(i + 1, len(features)):\n        r_val = corr_matrix.loc[features[i], features[j]]\n        if abs(r_val) > 0.90:\n            print(f\"  {features[i]} ↔ {features[j]}: r = {r_val:.3f}\")\n            print(f\"    → Рекомендація: вилучити одну з ознак або застосувати регуляризацію!\\n\")\n",[5321,13222,13223,13233,13243,13253,13263,13267,13279,13285,13289,13294,13307,13318,13327,13339,13349,13353,13358,13381,13385,13389,13397,13405,13413,13419,13427,13435,13439,13443,13447,13451,13455,13471,13524,13575,13600,13604,13608,13612,13617,13632,13658,13677,13699,13704,13720,13763],{"__ignoreMap":5319},[5324,13224,13225,13227,13229,13231],{"class":5326,"line":5327},[5324,13226,5331],{"class":5330},[5324,13228,5335],{"class":5334},[5324,13230,5338],{"class":5330},[5324,13232,5341],{"class":5334},[5324,13234,13235,13237,13239,13241],{"class":5326,"line":5344},[5324,13236,5331],{"class":5330},[5324,13238,10486],{"class":5334},[5324,13240,5338],{"class":5330},[5324,13242,10491],{"class":5334},[5324,13244,13245,13247,13249,13251],{"class":5326,"line":5357},[5324,13246,5331],{"class":5330},[5324,13248,5349],{"class":5334},[5324,13250,5338],{"class":5330},[5324,13252,5354],{"class":5334},[5324,13254,13255,13257,13259,13261],{"class":5326,"line":5364},[5324,13256,5331],{"class":5330},[5324,13258,10508],{"class":5334},[5324,13260,5338],{"class":5330},[5324,13262,10513],{"class":5334},[5324,13264,13265],{"class":5326,"line":5384},[5324,13266,5361],{"emptyLinePlaceholder":5360},[5324,13268,13269,13271,13273,13275,13277],{"class":5326,"line":5389},[5324,13270,5367],{"class":5334},[5324,13272,5371],{"class":5370},[5324,13274,5374],{"class":5334},[5324,13276,5378],{"class":5377},[5324,13278,5381],{"class":5334},[5324,13280,13281,13283],{"class":5326,"line":5396},[5324,13282,9407],{"class":5334},[5324,13284,9410],{"class":5377},[5324,13286,13287],{"class":5326,"line":5422},[5324,13288,5361],{"emptyLinePlaceholder":5360},[5324,13290,13291],{"class":5326,"line":5455},[5324,13292,13293],{"class":5392},"# Генеруємо штучні ознаки з колінеарністю\n",[5324,13295,13296,13299,13301,13303,13305],{"class":5326,"line":5460},[5324,13297,13298],{"class":5334},"area_m2 = rng.uniform(",[5324,13300,6512],{"class":5377},[5324,13302,5405],{"class":5334},[5324,13304,7152],{"class":5377},[5324,13306,10559],{"class":5334},[5324,13308,13309,13312,13315],{"class":5326,"line":5466},[5324,13310,13311],{"class":5334},"area_ft2 = area_m2 * ",[5324,13313,13314],{"class":5377},"10.764",[5324,13316,13317],{"class":5392},"               # Ідеальна колінеарність (r = 1.0)\n",[5324,13319,13320,13323,13325],{"class":5326,"line":5488},[5324,13321,13322],{"class":5334},"rooms = rng.poisson(",[5324,13324,10595],{"class":5377},[5324,13326,10559],{"class":5334},[5324,13328,13329,13331,13333,13335,13337],{"class":5326,"line":5535},[5324,13330,10549],{"class":5334},[5324,13332,5434],{"class":5377},[5324,13334,5405],{"class":5334},[5324,13336,5509],{"class":5377},[5324,13338,10559],{"class":5334},[5324,13340,13341,13344,13346],{"class":5326,"line":5556},[5324,13342,13343],{"class":5334},"age_squared = age ** ",[5324,13345,6334],{"class":5377},[5324,13347,13348],{"class":5392},"                    # Нелінійна монотонна залежність (r ≈ 0.97)\n",[5324,13350,13351],{"class":5326,"line":5575},[5324,13352,5361],{"emptyLinePlaceholder":5360},[5324,13354,13355],{"class":5326,"line":5612},[5324,13356,13357],{"class":5392},"# Цільова змінна: ціна\n",[5324,13359,13360,13363,13365,13368,13370,13373,13375,13377,13379],{"class":5326,"line":5627},[5324,13361,13362],{"class":5334},"price = ",[5324,13364,10611],{"class":5377},[5324,13366,13367],{"class":5334}," * area_m2 - ",[5324,13369,12559],{"class":5377},[5324,13371,13372],{"class":5334}," * age + rng.normal(",[5324,13374,5434],{"class":5377},[5324,13376,5405],{"class":5334},[5324,13378,10577],{"class":5377},[5324,13380,10559],{"class":5334},[5324,13382,13383],{"class":5326,"line":5633},[5324,13384,5361],{"emptyLinePlaceholder":5360},[5324,13386,13387],{"class":5326,"line":5638},[5324,13388,10660],{"class":5334},[5324,13390,13391,13394],{"class":5326,"line":5653},[5324,13392,13393],{"class":5519},"    'Площа (м²)'",[5324,13395,13396],{"class":5334},": area_m2,\n",[5324,13398,13399,13402],{"class":5326,"line":5691},[5324,13400,13401],{"class":5519},"    'Площа (фут²)'",[5324,13403,13404],{"class":5334},": area_ft2,\n",[5324,13406,13407,13410],{"class":5326,"line":5725},[5324,13408,13409],{"class":5519},"    'Кімнати'",[5324,13411,13412],{"class":5334},": rooms,\n",[5324,13414,13415,13417],{"class":5326,"line":5743},[5324,13416,10665],{"class":5519},[5324,13418,10668],{"class":5334},[5324,13420,13421,13424],{"class":5326,"line":6150},[5324,13422,13423],{"class":5519},"    'Вік²'",[5324,13425,13426],{"class":5334},": age_squared,\n",[5324,13428,13429,13432],{"class":5326,"line":7370},[5324,13430,13431],{"class":5519},"    'Ціна'",[5324,13433,13434],{"class":5334},": price\n",[5324,13436,13437],{"class":5326,"line":7375},[5324,13438,10705],{"class":5334},[5324,13440,13441],{"class":5326,"line":7381},[5324,13442,5361],{"emptyLinePlaceholder":5360},[5324,13444,13445],{"class":5326,"line":7392},[5324,13446,10719],{"class":5334},[5324,13448,13449],{"class":5326,"line":7397},[5324,13450,5361],{"emptyLinePlaceholder":5360},[5324,13452,13453],{"class":5326,"line":7415},[5324,13454,5463],{"class":5392},[5324,13456,13457,13459,13461,13463,13465,13467,13469],{"class":5326,"line":7501},[5324,13458,5469],{"class":5334},[5324,13460,5472],{"class":5370},[5324,13462,5475],{"class":5334},[5324,13464,7406],{"class":5377},[5324,13466,5405],{"class":5334},[5324,13468,10773],{"class":5377},[5324,13470,5485],{"class":5334},[5324,13472,13473,13475,13477,13479,13481,13483,13485,13487,13489,13491,13493,13495,13498,13500,13502,13504,13506,13508,13510,13512,13514,13516,13518,13520,13522],{"class":5326,"line":7557},[5324,13474,10780],{"class":5334},[5324,13476,10783],{"class":5370},[5324,13478,5374],{"class":5334},[5324,13480,7711],{"class":5660},[5324,13482,5405],{"class":5334},[5324,13484,10792],{"class":5370},[5324,13486,5374],{"class":5334},[5324,13488,10797],{"class":5519},[5324,13490,5405],{"class":5334},[5324,13492,10802],{"class":5370},[5324,13494,5374],{"class":5334},[5324,13496,13497],{"class":5519},"'RdYlGn'",[5324,13499,5405],{"class":5334},[5324,13501,6288],{"class":5370},[5324,13503,5374],{"class":5334},[5324,13505,5434],{"class":5377},[5324,13507,5405],{"class":5334},[5324,13509,10820],{"class":5370},[5324,13511,10823],{"class":5334},[5324,13513,5312],{"class":5377},[5324,13515,5405],{"class":5334},[5324,13517,10830],{"class":5370},[5324,13519,5374],{"class":5334},[5324,13521,5312],{"class":5377},[5324,13523,10003],{"class":5334},[5324,13525,13526,13528,13530,13532,13534,13536,13538,13541,13543,13546,13548,13550,13552,13554,13556,13559,13561,13563,13565,13568,13570,13573],{"class":5326,"line":7607},[5324,13527,10841],{"class":5370},[5324,13529,5374],{"class":5334},[5324,13531,7711],{"class":5660},[5324,13533,5405],{"class":5334},[5324,13535,5525],{"class":5370},[5324,13537,5374],{"class":5334},[5324,13539,13540],{"class":5377},"1.5",[5324,13542,5405],{"class":5334},[5324,13544,13545],{"class":5370},"linecolor",[5324,13547,5374],{"class":5334},[5324,13549,11905],{"class":5519},[5324,13551,5405],{"class":5334},[5324,13553,10858],{"class":5370},[5324,13555,10861],{"class":5334},[5324,13557,13558],{"class":5519},"'shrink'",[5324,13560,10438],{"class":5334},[5324,13562,5428],{"class":5377},[5324,13564,5405],{"class":5334},[5324,13566,13567],{"class":5519},"'label'",[5324,13569,10438],{"class":5334},[5324,13571,13572],{"class":5519},"'Коефіцієнт r'",[5324,13574,10705],{"class":5334},[5324,13576,13577,13579,13582,13584,13586,13588,13590,13592,13594,13596,13598],{"class":5326,"line":7657},[5324,13578,5578],{"class":5334},[5324,13580,13581],{"class":5519},"'Матриця кореляцій: Виявлення мультиколінеарності ознак'",[5324,13583,5405],{"class":5334},[5324,13585,5593],{"class":5370},[5324,13587,5374],{"class":5334},[5324,13589,5598],{"class":5519},[5324,13591,5405],{"class":5334},[5324,13593,5546],{"class":5370},[5324,13595,5374],{"class":5334},[5324,13597,10904],{"class":5377},[5324,13599,5381],{"class":5334},[5324,13601,13602],{"class":5326,"line":7686},[5324,13603,7742],{"class":5334},[5324,13605,13606],{"class":5326,"line":7696},[5324,13607,5630],{"class":5334},[5324,13609,13610],{"class":5326,"line":7706},[5324,13611,5361],{"emptyLinePlaceholder":5360},[5324,13613,13614],{"class":5326,"line":7733},[5324,13615,13616],{"class":5392},"# Автоматичний пошук колінеарних пар\n",[5324,13618,13619,13621,13623,13626,13628,13630],{"class":5326,"line":7739},[5324,13620,5642],{"class":5641},[5324,13622,5645],{"class":5334},[5324,13624,13625],{"class":5519},"\"⚠ ВИЯВЛЕНА МУЛЬТИКОЛІНЕАРНІСТЬ (|r| > 0.90 серед предикторів):",[5324,13627,5735],{"class":5584},[5324,13629,5732],{"class":5519},[5324,13631,5381],{"class":5334},[5324,13633,13634,13637,13639,13642,13644,13647,13650,13653,13656],{"class":5326,"line":7745},[5324,13635,13636],{"class":5334},"features = [col ",[5324,13638,9552],{"class":5330},[5324,13640,13641],{"class":5334}," col ",[5324,13643,9558],{"class":5330},[5324,13645,13646],{"class":5334}," corr_matrix.columns ",[5324,13648,13649],{"class":5330},"if",[5324,13651,13652],{"class":5334}," col != ",[5324,13654,13655],{"class":5519},"'Ціна'",[5324,13657,8647],{"class":5334},[5324,13659,13660,13662,13665,13667,13670,13672,13674],{"class":5326,"line":9046},[5324,13661,9552],{"class":5330},[5324,13663,13664],{"class":5334}," i ",[5324,13666,9558],{"class":5330},[5324,13668,13669],{"class":5641}," range",[5324,13671,5645],{"class":5334},[5324,13673,7185],{"class":5641},[5324,13675,13676],{"class":5334},"(features)):\n",[5324,13678,13679,13681,13684,13686,13688,13691,13693,13695,13697],{"class":5326,"line":9057},[5324,13680,11704],{"class":5330},[5324,13682,13683],{"class":5334}," j ",[5324,13685,9558],{"class":5330},[5324,13687,13669],{"class":5641},[5324,13689,13690],{"class":5334},"(i + ",[5324,13692,5312],{"class":5377},[5324,13694,5405],{"class":5334},[5324,13696,7185],{"class":5641},[5324,13698,13676],{"class":5334},[5324,13700,13701],{"class":5326,"line":9068},[5324,13702,13703],{"class":5334},"        r_val = corr_matrix.loc[features[i], features[j]]\n",[5324,13705,13706,13709,13712,13715,13718],{"class":5326,"line":9094},[5324,13707,13708],{"class":5330},"        if",[5324,13710,13711],{"class":5641}," abs",[5324,13713,13714],{"class":5334},"(r_val) > ",[5324,13716,13717],{"class":5377},"0.90",[5324,13719,7948],{"class":5334},[5324,13721,13722,13725,13727,13729,13732,13734,13737,13740,13743,13745,13748,13750,13753,13755,13757,13759,13761],{"class":5326,"line":9100},[5324,13723,13724],{"class":5641},"            print",[5324,13726,5645],{"class":5334},[5324,13728,5661],{"class":5660},[5324,13730,13731],{"class":5519},"\"  ",[5324,13733,5667],{"class":5660},[5324,13735,13736],{"class":5334},"features[i]",[5324,13738,13739],{"class":5660},"}",[5324,13741,13742],{"class":5519}," ↔ ",[5324,13744,5667],{"class":5660},[5324,13746,13747],{"class":5334},"features[j]",[5324,13749,13739],{"class":5660},[5324,13751,13752],{"class":5519},": r = ",[5324,13754,5667],{"class":5660},[5324,13756,9018],{"class":5334},[5324,13758,8847],{"class":5660},[5324,13760,5732],{"class":5519},[5324,13762,5381],{"class":5334},[5324,13764,13765,13767,13769,13771,13774,13776,13778],{"class":5326,"line":9105},[5324,13766,13724],{"class":5641},[5324,13768,5645],{"class":5334},[5324,13770,5661],{"class":5660},[5324,13772,13773],{"class":5519},"\"    → Рекомендація: вилучити одну з ознак або застосувати регуляризацію!",[5324,13775,5735],{"class":5584},[5324,13777,5732],{"class":5519},[5324,13779,5381],{"class":5334},[5754,13781,13782,13789],{"v-slot:output":5319},[5278,13783,13784],{},[5759,13785],{"alt":13786,"className":13787,"src":13788},"Матриця кореляцій для виявлення мультиколінеарності",[5763],"\u002Fimages\u002Fai-python\u002Fstatistics-basics\u002Fcorrelation\u002F06.png",[5314,13790,13793],{"className":13791,"code":13792,"language":5770},[5768],"⚠ ВИЯВЛЕНА МУЛЬТИКОЛІНЕАРНІСТЬ (|r| > 0.90 серед предикторів):\n\n  Площа (м²) ↔ Площа (фут²): r = 1.000\n    → Рекомендація: вилучити одну з ознак або застосувати регуляризацію!\n\n  Вік ↔ Вік²: r = 0.968\n    → Рекомендація: вилучити одну з ознак або застосувати регуляризацію!\n",[5321,13794,13792],{"__ignoreMap":5319},[5306,13796,13798],{"id":13797},"метрика-vif-variance-inflation-factor","Метрика VIF (Variance Inflation Factor)",[5278,13800,13801,13802,5916],{},"Для суворого кількісного оцінювання мультиколінеарності в економетриці та ML застосовують коефіцієнт інфляції дисперсії (",[5217,13803,13804],{},"VIF",[5895,13806],{"tex":13807},"\\text{VIF}_j = \\frac{1}{1 - R_j^2}",[5278,13809,13810,13811,13814,13815,13817,13818,5812],{},"де ",[5895,13812],{"tex":13813,":inline":5898},"R_j^2"," — коефіцієнт детермінації моделі, в якій ознака ",[5895,13816],{"tex":10301,":inline":5898}," регресується на ",[5217,13819,13820],{},"всі інші предиктори",[5198,13822,13823,13829,13835],{},[5201,13824,13825,13828],{},[5895,13826],{"tex":13827,":inline":5898},"\\text{VIF}_j = 1"," — ознака абсолютно некорельована з іншими.",[5201,13830,13831,13834],{},[5895,13832],{"tex":13833,":inline":5898},"1 \u003C \\text{VIF}_j \u003C 5"," — помірна, безпечна колінеарність.",[5201,13836,13837,13840,13841,13844],{},[5895,13838],{"tex":13839,":inline":5898},"\\text{VIF}_j \\ge 5"," (або ",[5895,13842],{"tex":13843,":inline":5898},"\\ge 10",") — критична мультиколінеарність; оцінки параметрів моделі стають ненадійними.",[5306,13846,13848],{"id":13847},"стратегії-подолання-мультиколінеарності","Стратегії подолання мультиколінеарності",[8174,13850,13851,13876,13884],{},[8177,13852,13855,13862],{"icon":13853,"label":13854},"i-lucide-trash","Метод 1: Видалення надлишкових ознак-дублікатів",[5278,13856,13857,13858,13861],{},"Якщо дві ознаки корелюють із ",[5895,13859],{"tex":13860,":inline":5898},"|r| > 0.85\\dots0.90",", вилучіть одну з них. Критерії вибору:",[5198,13863,13864,13867,13873],{},[5201,13865,13866],{},"Залишити ознаку, що має простішу та зрозумілішу фізичну інтерпретацію (наприклад, площа в метрах замість футів).",[5201,13868,13869,13870,6025],{},"Залишити ознаку з меншою кількістю пропусків (",[5232,13871,13872],{},"missing values",[5201,13874,13875],{},"Залишити ознаку, яка сильніше лінійно або нелінійно пов'язана з цільовою змінною.",[8177,13877,13879,13880,13883],{"icon":6965,"label":13878},"Метод 2: Зниження розмірності (PCA \u002F SVD)","Метод головних компонент (",[5232,13881,13882],{},"Principal Component Analysis",") проектує простір вихідних взаємопов'язаних ознак на новий базис взаємно ортогональних (нескорельованих) компонент. Це дозволяє зберегти 95–99% сумарної дисперсії без ризику виродження матриць.",[8177,13885,13887,13890],{"icon":4660,"label":13886},"Метод 3: Регуляризація (Ridge L2 \u002F Lasso L1)",[5278,13888,13889],{},"Замість звичайного OLS застосовують регуляризовану лінійну регресію:",[5198,13891,13892,13908],{},[5201,13893,13894,13899,13900,13903,13904,13907],{},[5217,13895,13896,13897,6507],{},"Ridge (",[5895,13898],{"tex":7924,":inline":5898},": додає штраф ",[5895,13901],{"tex":13902,":inline":5898},"\\lambda \\|\\mathbf{w}\\|_2^2",", що стабілізує матрицю ",[5895,13905],{"tex":13906,":inline":5898},"(\\mathbf{X}^T \\mathbf{X} + \\lambda \\mathbf{I})^{-1}"," та пригнічує коливання ваг колінеарних ознак.",[5201,13909,13910,13899,13916,13919,13920,6025],{},[5217,13911,13912,13913,6507],{},"Lasso (",[5895,13914],{"tex":13915,":inline":5898},"L_1",[5895,13917],{"tex":13918,":inline":5898},"\\lambda \\|\\mathbf{w}\\|_1",", який автоматично обнуляє ваги менш важливих дублюючих ознак, виконуючи автоматичний відбір ознак (",[5232,13921,13922],{},"Feature Selection",[5270,13924],{},[5273,13926,13928],{"id":13927},"інші-міри-статистичного-звязку","Інші міри статистичного зв'язку",[5278,13930,13931,13932,13935],{},"Коефіцієнт Пірсона чудово вимірює ",[5217,13933,13934],{},"лінійний"," зв'язок нормальних неперервних змінних. Проте в реальних інженерних задачах дані часто бувають порядковими, містять грубі викиди або мають нелінійний монотонний характер.",[5306,13937,13939],{"id":13938},"кореляція-спірмена-spearmans-rank-correlation-ρ","Кореляція Спірмена (Spearman's Rank Correlation, ρ)",[5278,13941,13942,5230,13945,6002,13948,13951,13952,5812],{},[5217,13943,13944],{},"Ранговий коефіцієнт Спірмена",[5895,13946],{"tex":13947,":inline":5898},"\\rho",[5895,13949],{"tex":13950,":inline":5898},"r_s",") — це непараметрична міра, яка оцінює, наскільки монотонно зростає або спадає одна змінна при зростанні іншої, ",[5217,13953,13954],{},"не вимагаючи строгої лінійності",[5278,13956,13957],{},"Алгоритм обчислення:",[5779,13959,13960,13980],{},[5201,13961,13962,13963,5808,13965,13967,13968,6183,13971,5808,13974,13977,13978,6025],{},"Замінити сирі значення ",[5895,13964],{"tex":6291,":inline":5898},[5895,13966],{"tex":6297,":inline":5898}," на їхні ",[5217,13969,13970],{},"ранги",[5895,13972],{"tex":13973,":inline":5898},"R(x_i)",[5895,13975],{"tex":13976,":inline":5898},"R(y_i)"," (номери за порядком зростання від 1 до ",[5895,13979],{"tex":9431,":inline":5898},[5201,13981,13982,13983,13986,13987,13990,13991,13993],{},"Якщо зв'язаних (однакових) рангів немає, формула набуває елегантного вигляду:\n",[5895,13984],{"tex":13985},"\\rho = 1 - \\frac{6 \\sum_{i=1}^{n} d_i^2}{n(n^2 - 1)}","\nде ",[5895,13988],{"tex":13989,":inline":5898},"d_i = R(x_i) - R(y_i)"," — різниця між рангами ",[5895,13992],{"tex":10290,":inline":5898},"-го об'єкта.",[5278,13995,13996],{},[5217,13997,13998],{},"Переваги Спірмена:",[5198,14000,14001,14010,14024],{},[5201,14002,14003,14006,14007,14009],{},[5217,14004,14005],{},"Стійкість до викидів (Robustness)",": аномальне значення 1,000,000 отримує максимальний ранг ",[5895,14008],{"tex":9431,":inline":5898},", не зміщуючи результат лавиноподібно.",[5201,14011,14012,14015,14016,14019,14020,14023],{},[5217,14013,14014],{},"Діагностика монотонних нелінійностей",": для експоненти чи логарифма (",[5895,14017],{"tex":14018,":inline":5898},"y = e^x",") коефіцієнт Спірмена дорівнює точній одиниці (",[5895,14021],{"tex":14022,":inline":5898},"\\rho = 1.00","), тоді як Пірсон видає занижені значення.",[5201,14025,14026,14029],{},[5217,14027,14028],{},"Підтримка порядкових (ординальних) шкал",": оцінки задоволеності (1–5 зірок), рівні пріоритету задач у Jira (P1–P4).",[5297,14031,14033],{"kernel":5299,"title":14032},"spearman_correlation.ipynb",[5302,14034,14035,14545],{"execution-count":5312},[5314,14036,14038],{"className":5316,"code":14037,"language":5318,"meta":5319,"style":5319},"import numpy as np\nfrom scipy import stats\nimport matplotlib.pyplot as plt\n\nrng = np.random.default_rng(seed=42)\n\n# Нелінійна, але суворо монотонна функціональна залежність\nx = np.linspace(0, 5, 50)\ny = np.exp(x) + rng.normal(0, 5, 50)\n\n# Обчислення коефіцієнтів\npearson_r, _ = stats.pearsonr(x, y)\nspearman_r, _ = stats.spearmanr(x, y)\n\n# Візуалізація\nplt.figure(figsize=(10, 6))\nplt.scatter(x, y, alpha=0.8, s=60, edgecolors='#1e293b', linewidths=0.7, color='#0284c7', label='Спостереження')\nplt.plot(x, np.exp(x), color='#ea580c', linestyle='-', linewidth=2, label='Базова експонента y = exp(x)')\n\nplt.xlabel('X', fontsize=12)\nplt.ylabel('Y', fontsize=12)\nplt.title('Нелінійний монотонний зв\\'язок: порівняння коефіцієнтів Пірсона та Спірмена', fontweight='bold', fontsize=13)\nplt.grid(True, linestyle=':', alpha=0.5)\nplt.text(0.3, max(y) * 0.75, f'Pearson r = {pearson_r:.3f}\\nSpearman ρ = {spearman_r:.3f}',\n         fontsize=12, fontweight='semibold', bbox=dict(boxstyle='round,pad=0.6', facecolor='#fef08a', edgecolor='#eab308', alpha=0.9))\nplt.legend(loc='upper left')\nplt.tight_layout()\nplt.show()\n\nprint(\"Порівняльні висновки:\")\nprint(f\"  Pearson r = {pearson_r:.3f} — недооцінює силу зв'язку через вигин експоненти\")\nprint(f\"  Spearman ρ = {spearman_r:.3f} — бездоганно фіксує збереження порядку рангів\")\n",[5321,14039,14040,14050,14060,14070,14074,14086,14090,14095,14112,14129,14133,14138,14143,14148,14152,14156,14172,14227,14266,14270,14286,14302,14332,14356,14403,14465,14478,14482,14486,14490,14501,14523],{"__ignoreMap":5319},[5324,14041,14042,14044,14046,14048],{"class":5326,"line":5327},[5324,14043,5331],{"class":5330},[5324,14045,5335],{"class":5334},[5324,14047,5338],{"class":5330},[5324,14049,5341],{"class":5334},[5324,14051,14052,14054,14056,14058],{"class":5326,"line":5344},[5324,14053,8535],{"class":5330},[5324,14055,8538],{"class":5334},[5324,14057,5331],{"class":5330},[5324,14059,8543],{"class":5334},[5324,14061,14062,14064,14066,14068],{"class":5326,"line":5357},[5324,14063,5331],{"class":5330},[5324,14065,5349],{"class":5334},[5324,14067,5338],{"class":5330},[5324,14069,5354],{"class":5334},[5324,14071,14072],{"class":5326,"line":5364},[5324,14073,5361],{"emptyLinePlaceholder":5360},[5324,14075,14076,14078,14080,14082,14084],{"class":5326,"line":5384},[5324,14077,5367],{"class":5334},[5324,14079,5371],{"class":5370},[5324,14081,5374],{"class":5334},[5324,14083,5378],{"class":5377},[5324,14085,5381],{"class":5334},[5324,14087,14088],{"class":5326,"line":5389},[5324,14089,5361],{"emptyLinePlaceholder":5360},[5324,14091,14092],{"class":5326,"line":5396},[5324,14093,14094],{"class":5392},"# Нелінійна, але суворо монотонна функціональна залежність\n",[5324,14096,14097,14100,14102,14104,14106,14108,14110],{"class":5326,"line":5422},[5324,14098,14099],{"class":5334},"x = np.linspace(",[5324,14101,5434],{"class":5377},[5324,14103,5405],{"class":5334},[5324,14105,5439],{"class":5377},[5324,14107,5405],{"class":5334},[5324,14109,5509],{"class":5377},[5324,14111,5381],{"class":5334},[5324,14113,14114,14117,14119,14121,14123,14125,14127],{"class":5326,"line":5455},[5324,14115,14116],{"class":5334},"y = np.exp(x) + rng.normal(",[5324,14118,5434],{"class":5377},[5324,14120,5405],{"class":5334},[5324,14122,5439],{"class":5377},[5324,14124,5405],{"class":5334},[5324,14126,5509],{"class":5377},[5324,14128,5381],{"class":5334},[5324,14130,14131],{"class":5326,"line":5460},[5324,14132,5361],{"emptyLinePlaceholder":5360},[5324,14134,14135],{"class":5326,"line":5466},[5324,14136,14137],{"class":5392},"# Обчислення коефіцієнтів\n",[5324,14139,14140],{"class":5326,"line":5488},[5324,14141,14142],{"class":5334},"pearson_r, _ = stats.pearsonr(x, y)\n",[5324,14144,14145],{"class":5326,"line":5535},[5324,14146,14147],{"class":5334},"spearman_r, _ = stats.spearmanr(x, y)\n",[5324,14149,14150],{"class":5326,"line":5556},[5324,14151,5361],{"emptyLinePlaceholder":5360},[5324,14153,14154],{"class":5326,"line":5575},[5324,14155,5463],{"class":5392},[5324,14157,14158,14160,14162,14164,14166,14168,14170],{"class":5326,"line":5612},[5324,14159,5469],{"class":5334},[5324,14161,5472],{"class":5370},[5324,14163,5475],{"class":5334},[5324,14165,5408],{"class":5377},[5324,14167,5405],{"class":5334},[5324,14169,5482],{"class":5377},[5324,14171,5485],{"class":5334},[5324,14173,14174,14177,14179,14181,14183,14185,14187,14189,14191,14193,14195,14197,14200,14202,14204,14206,14208,14210,14212,14214,14216,14218,14220,14222,14225],{"class":5326,"line":5627},[5324,14175,14176],{"class":5334},"plt.scatter(x, y, ",[5324,14178,5494],{"class":5370},[5324,14180,5374],{"class":5334},[5324,14182,5428],{"class":5377},[5324,14184,5405],{"class":5334},[5324,14186,5504],{"class":5370},[5324,14188,5374],{"class":5334},[5324,14190,6372],{"class":5377},[5324,14192,5405],{"class":5334},[5324,14194,5514],{"class":5370},[5324,14196,5374],{"class":5334},[5324,14198,14199],{"class":5519},"'#1e293b'",[5324,14201,5405],{"class":5334},[5324,14203,5525],{"class":5370},[5324,14205,5374],{"class":5334},[5324,14207,10043],{"class":5377},[5324,14209,5405],{"class":5334},[5324,14211,7421],{"class":5370},[5324,14213,5374],{"class":5334},[5324,14215,7575],{"class":5519},[5324,14217,5405],{"class":5334},[5324,14219,7441],{"class":5370},[5324,14221,5374],{"class":5334},[5324,14223,14224],{"class":5519},"'Спостереження'",[5324,14226,5381],{"class":5334},[5324,14228,14229,14232,14234,14236,14238,14240,14242,14244,14247,14249,14251,14253,14255,14257,14259,14261,14264],{"class":5326,"line":5633},[5324,14230,14231],{"class":5334},"plt.plot(x, np.exp(x), ",[5324,14233,7421],{"class":5370},[5324,14235,5374],{"class":5334},[5324,14237,8993],{"class":5519},[5324,14239,5405],{"class":5334},[5324,14241,7431],{"class":5370},[5324,14243,5374],{"class":5334},[5324,14245,14246],{"class":5519},"'-'",[5324,14248,5405],{"class":5334},[5324,14250,9714],{"class":5370},[5324,14252,5374],{"class":5334},[5324,14254,6334],{"class":5377},[5324,14256,5405],{"class":5334},[5324,14258,7441],{"class":5370},[5324,14260,5374],{"class":5334},[5324,14262,14263],{"class":5519},"'Базова експонента y = exp(x)'",[5324,14265,5381],{"class":5334},[5324,14267,14268],{"class":5326,"line":5638},[5324,14269,5361],{"emptyLinePlaceholder":5360},[5324,14271,14272,14274,14276,14278,14280,14282,14284],{"class":5326,"line":5653},[5324,14273,5538],{"class":5334},[5324,14275,9668],{"class":5519},[5324,14277,5405],{"class":5334},[5324,14279,5546],{"class":5370},[5324,14281,5374],{"class":5334},[5324,14283,5551],{"class":5377},[5324,14285,5381],{"class":5334},[5324,14287,14288,14290,14292,14294,14296,14298,14300],{"class":5326,"line":5691},[5324,14289,5559],{"class":5334},[5324,14291,9678],{"class":5519},[5324,14293,5405],{"class":5334},[5324,14295,5546],{"class":5370},[5324,14297,5374],{"class":5334},[5324,14299,5551],{"class":5377},[5324,14301,5381],{"class":5334},[5324,14303,14304,14306,14309,14311,14314,14316,14318,14320,14322,14324,14326,14328,14330],{"class":5326,"line":5725},[5324,14305,5578],{"class":5334},[5324,14307,14308],{"class":5519},"'Нелінійний монотонний зв",[5324,14310,5585],{"class":5584},[5324,14312,14313],{"class":5519},"язок: порівняння коефіцієнтів Пірсона та Спірмена'",[5324,14315,5405],{"class":5334},[5324,14317,5593],{"class":5370},[5324,14319,5374],{"class":5334},[5324,14321,5598],{"class":5519},[5324,14323,5405],{"class":5334},[5324,14325,5546],{"class":5370},[5324,14327,5374],{"class":5334},[5324,14329,10904],{"class":5377},[5324,14331,5381],{"class":5334},[5324,14333,14334,14336,14338,14340,14342,14344,14346,14348,14350,14352,14354],{"class":5326,"line":5743},[5324,14335,5615],{"class":5334},[5324,14337,7711],{"class":5660},[5324,14339,5405],{"class":5334},[5324,14341,7431],{"class":5370},[5324,14343,5374],{"class":5334},[5324,14345,7720],{"class":5519},[5324,14347,5405],{"class":5334},[5324,14349,5494],{"class":5370},[5324,14351,5374],{"class":5334},[5324,14353,5530],{"class":5377},[5324,14355,5381],{"class":5334},[5324,14357,14358,14361,14363,14365,14368,14371,14373,14375,14377,14380,14382,14385,14387,14389,14392,14394,14397,14399,14401],{"class":5326,"line":6150},[5324,14359,14360],{"class":5334},"plt.text(",[5324,14362,5622],{"class":5377},[5324,14364,5405],{"class":5334},[5324,14366,14367],{"class":5641},"max",[5324,14369,14370],{"class":5334},"(y) * ",[5324,14372,11411],{"class":5377},[5324,14374,5405],{"class":5334},[5324,14376,5661],{"class":5660},[5324,14378,14379],{"class":5519},"'Pearson r = ",[5324,14381,5667],{"class":5660},[5324,14383,14384],{"class":5334},"pearson_r",[5324,14386,8847],{"class":5660},[5324,14388,5735],{"class":5584},[5324,14390,14391],{"class":5519},"Spearman ρ = ",[5324,14393,5667],{"class":5660},[5324,14395,14396],{"class":5334},"spearman_r",[5324,14398,8847],{"class":5660},[5324,14400,9193],{"class":5519},[5324,14402,10003],{"class":5334},[5324,14404,14405,14408,14410,14412,14414,14416,14418,14420,14422,14425,14427,14429,14431,14433,14435,14438,14440,14442,14444,14447,14449,14451,14453,14455,14457,14459,14461,14463],{"class":5326,"line":7370},[5324,14406,14407],{"class":5370},"         fontsize",[5324,14409,5374],{"class":5334},[5324,14411,5551],{"class":5377},[5324,14413,5405],{"class":5334},[5324,14415,5593],{"class":5370},[5324,14417,5374],{"class":5334},[5324,14419,11645],{"class":5519},[5324,14421,5405],{"class":5334},[5324,14423,14424],{"class":5370},"bbox",[5324,14426,5374],{"class":5334},[5324,14428,10014],{"class":10013},[5324,14430,5645],{"class":5334},[5324,14432,10019],{"class":5370},[5324,14434,5374],{"class":5334},[5324,14436,14437],{"class":5519},"'round,pad=0.6'",[5324,14439,5405],{"class":5334},[5324,14441,10029],{"class":5370},[5324,14443,5374],{"class":5334},[5324,14445,14446],{"class":5519},"'#fef08a'",[5324,14448,5405],{"class":5334},[5324,14450,11679],{"class":5370},[5324,14452,5374],{"class":5334},[5324,14454,7626],{"class":5519},[5324,14456,5405],{"class":5334},[5324,14458,5494],{"class":5370},[5324,14460,5374],{"class":5334},[5324,14462,11693],{"class":5377},[5324,14464,5485],{"class":5334},[5324,14466,14467,14470,14472,14474,14476],{"class":5326,"line":7375},[5324,14468,14469],{"class":5334},"plt.legend(",[5324,14471,12900],{"class":5370},[5324,14473,5374],{"class":5334},[5324,14475,12905],{"class":5519},[5324,14477,5381],{"class":5334},[5324,14479,14480],{"class":5326,"line":7381},[5324,14481,7742],{"class":5334},[5324,14483,14484],{"class":5326,"line":7392},[5324,14485,5630],{"class":5334},[5324,14487,14488],{"class":5326,"line":7397},[5324,14489,5361],{"emptyLinePlaceholder":5360},[5324,14491,14492,14494,14496,14499],{"class":5326,"line":7415},[5324,14493,5642],{"class":5641},[5324,14495,5645],{"class":5334},[5324,14497,14498],{"class":5519},"\"Порівняльні висновки:\"",[5324,14500,5381],{"class":5334},[5324,14502,14503,14505,14507,14509,14512,14514,14516,14518,14521],{"class":5326,"line":7501},[5324,14504,5642],{"class":5641},[5324,14506,5645],{"class":5334},[5324,14508,5661],{"class":5660},[5324,14510,14511],{"class":5519},"\"  Pearson r = ",[5324,14513,5667],{"class":5660},[5324,14515,14384],{"class":5334},[5324,14517,8847],{"class":5660},[5324,14519,14520],{"class":5519}," — недооцінює силу зв'язку через вигин експоненти\"",[5324,14522,5381],{"class":5334},[5324,14524,14525,14527,14529,14531,14534,14536,14538,14540,14543],{"class":5326,"line":7557},[5324,14526,5642],{"class":5641},[5324,14528,5645],{"class":5334},[5324,14530,5661],{"class":5660},[5324,14532,14533],{"class":5519},"\"  Spearman ρ = ",[5324,14535,5667],{"class":5660},[5324,14537,14396],{"class":5334},[5324,14539,8847],{"class":5660},[5324,14541,14542],{"class":5519}," — бездоганно фіксує збереження порядку рангів\"",[5324,14544,5381],{"class":5334},[5754,14546,14547,14554],{"v-slot:output":5319},[5278,14548,14549],{},[5759,14550],{"alt":14551,"className":14552,"src":14553},"Нелінійний монотонний зв'язок: порівняння коефіцієнтів Пірсона та Спірмена",[5763],"\u002Fimages\u002Fai-python\u002Fstatistics-basics\u002Fcorrelation\u002F07.png",[5314,14555,14558],{"className":14556,"code":14557,"language":5770},[5768],"Порівняльні висновки:\n  Pearson r = 0.856 — недооцінює силу зв'язку через вигин експоненти\n  Spearman ρ = 0.955 — бездоганно фіксує збереження порядку рангів\n",[5321,14559,14557],{"__ignoreMap":5319},[5306,14561,14563],{"id":14562},"рангова-кореляція-кендалла-kendalls-tau-τ","Рангова кореляція Кендалла (Kendall's Tau, τ)",[5278,14565,14566,5230,14569,14572,14573,14576],{},[5217,14567,14568],{},"Коефіцієнт кореляції Кендалла",[5895,14570],{"tex":14571,":inline":5898},"\\tau",") базується на аналізі ",[5217,14574,14575],{},"узгодженості (конкордантності)"," між усіма можливими парами спостережень.",[5278,14578,14579,14580,5808,14583,6250],{},"Для будь-якої пари спостережень ",[5895,14581],{"tex":14582,":inline":5898},"(x_i, y_i)",[5895,14584],{"tex":14585,":inline":5898},"(x_j, y_j)",[5198,14587,14588,14598],{},[5201,14589,14590,14593,14594,14597],{},[5217,14591,14592],{},"Узгоджена (concordant)"," пара: коли знак різниць однаковий, тобто ",[5895,14595],{"tex":14596,":inline":5898},"(x_i - x_j)(y_i - y_j) > 0"," (обидві змінні зростають або обидві спадають).",[5201,14599,14600,14603,14604,5812],{},[5217,14601,14602],{},"Неузгоджена (discordant)"," пара: коли знаки протилежні, тобто ",[5895,14605],{"tex":14606,":inline":5898},"(x_i - x_j)(y_i - y_j) \u003C 0",[5278,14608,14609],{},"Математична формула:",[5895,14611],{"tex":14612},"\\tau = \\frac{C - D}{\\frac{1}{2} n (n - 1)} = \\frac{C - D}{\\binom{n}{2}}",[5278,14614,13810,14615,14617,14618,14621],{},[5895,14616],{"tex":7491,":inline":5898}," — кількість узгоджених пар, а ",[5895,14619],{"tex":14620,":inline":5898},"D"," — кількість неузгоджених пар.",[5278,14623,14624],{},[5217,14625,14626],{},"Коли Кендалл кращий за Спірмена?",[5198,14628,14629,14639,14648],{},[5201,14630,14631,14632,5230,14635,14638],{},"На ",[5217,14633,14634],{},"малих вибірках",[5895,14636],{"tex":14637,":inline":5898},"n \u003C 30",") Кендалл дає меншу похибку оцінки генерального параметра.",[5201,14640,14641,14642,10438,14645,14647],{},"Володіє ",[5217,14643,14644],{},"прямою ймовірнісною інтерпретацією",[5895,14646],{"tex":14571,":inline":5898}," — це різниця між імовірністю того, що пара точок узгоджена, та ймовірністю того, що вона неузгоджена.",[5201,14649,14650],{},"Надійніший при наявності великої кількості однакових (зв'язаних) значень.",[5306,14652,14654],{"id":14653},"як-обрати-міру-взаємозвязку-дерево-рішень","Як обрати міру взаємозв'язку? (Дерево рішень)",[6027,14656,14658],{"alt":14657},"Дерево прийняття рішень для вибору коефіцієнта кореляції",[5314,14659,14661],{"className":6032,"code":14660,"language":6034,"meta":5319,"style":5319},"@startuml\nskinparam style plain\nskinparam backgroundColor #FFFFFF\nskinparam defaultTextAlignment center\n\nstart\n:Який тип даних та шкала вимірювання?;\n\nif (Шкала?) then (Кількісна \u002F Неперервна)\n  if (Розподіл нормальний і зв'язок лінійний?) then (Так, без викидів)\n    #LightGreen:\u003Cb>Кореляція Пірсона (r)\u003C\u002Fb>\\nМаксимальна статистична потужність;\n  else (Ні: монотонний, викиди, асиметрія)\n    if (Обсяг вибірки n?) then (n > 30)\n      #LightBlue:\u003Cb>Кореляція Спірмена (ρ)\u003C\u002Fb>\\nШвидке ранжування великих даних;\n    else (n ≤ 30 або багато дублікатів)\n      #LightCyan:\u003Cb>Кореляція Кендалла (τ)\u003C\u002Fb>\\nМенша дисперсія на малих вибірках;\n    endif\n  endif\nelse (Порядкова \u002F Ординальна)\n  #LightCyan:\u003Cb>Спірмен (ρ) або Кендалл (τ)\u003C\u002Fb>\\nРейтинги, лікертівські шкали;\nendif\n\nstop\n@enduml\n",[5321,14662,14663,14667,14671,14675,14679,14683,14688,14693,14697,14702,14707,14712,14717,14722,14727,14732,14737,14742,14747,14752,14757,14762,14766,14771],{"__ignoreMap":5319},[5324,14664,14665],{"class":5326,"line":5327},[5324,14666,6041],{},[5324,14668,14669],{"class":5326,"line":5344},[5324,14670,6046],{},[5324,14672,14673],{"class":5326,"line":5357},[5324,14674,6051],{},[5324,14676,14677],{"class":5326,"line":5364},[5324,14678,6056],{},[5324,14680,14681],{"class":5326,"line":5384},[5324,14682,5361],{"emptyLinePlaceholder":5360},[5324,14684,14685],{"class":5326,"line":5389},[5324,14686,14687],{},"start\n",[5324,14689,14690],{"class":5326,"line":5396},[5324,14691,14692],{},":Який тип даних та шкала вимірювання?;\n",[5324,14694,14695],{"class":5326,"line":5422},[5324,14696,5361],{"emptyLinePlaceholder":5360},[5324,14698,14699],{"class":5326,"line":5455},[5324,14700,14701],{},"if (Шкала?) then (Кількісна \u002F Неперервна)\n",[5324,14703,14704],{"class":5326,"line":5460},[5324,14705,14706],{},"  if (Розподіл нормальний і зв'язок лінійний?) then (Так, без викидів)\n",[5324,14708,14709],{"class":5326,"line":5466},[5324,14710,14711],{},"    #LightGreen:\u003Cb>Кореляція Пірсона (r)\u003C\u002Fb>\\nМаксимальна статистична потужність;\n",[5324,14713,14714],{"class":5326,"line":5488},[5324,14715,14716],{},"  else (Ні: монотонний, викиди, асиметрія)\n",[5324,14718,14719],{"class":5326,"line":5535},[5324,14720,14721],{},"    if (Обсяг вибірки n?) then (n > 30)\n",[5324,14723,14724],{"class":5326,"line":5556},[5324,14725,14726],{},"      #LightBlue:\u003Cb>Кореляція Спірмена (ρ)\u003C\u002Fb>\\nШвидке ранжування великих даних;\n",[5324,14728,14729],{"class":5326,"line":5575},[5324,14730,14731],{},"    else (n ≤ 30 або багато дублікатів)\n",[5324,14733,14734],{"class":5326,"line":5612},[5324,14735,14736],{},"      #LightCyan:\u003Cb>Кореляція Кендалла (τ)\u003C\u002Fb>\\nМенша дисперсія на малих вибірках;\n",[5324,14738,14739],{"class":5326,"line":5627},[5324,14740,14741],{},"    endif\n",[5324,14743,14744],{"class":5326,"line":5633},[5324,14745,14746],{},"  endif\n",[5324,14748,14749],{"class":5326,"line":5638},[5324,14750,14751],{},"else (Порядкова \u002F Ординальна)\n",[5324,14753,14754],{"class":5326,"line":5653},[5324,14755,14756],{},"  #LightCyan:\u003Cb>Спірмен (ρ) або Кендалл (τ)\u003C\u002Fb>\\nРейтинги, лікертівські шкали;\n",[5324,14758,14759],{"class":5326,"line":5691},[5324,14760,14761],{},"endif\n",[5324,14763,14764],{"class":5326,"line":5725},[5324,14765,5361],{"emptyLinePlaceholder":5360},[5324,14767,14768],{"class":5326,"line":5743},[5324,14769,14770],{},"stop\n",[5324,14772,14773],{"class":5326,"line":6150},[5324,14774,6153],{},[5306,14776,14778],{"id":14777},"коефіцієнт-детермінації-r","Коефіцієнт детермінації (R²)",[5278,14780,14781,14787,14788,14794,14795,6250],{},[5217,14782,14783,14784,6507],{},"Коефіцієнт детермінації (",[5895,14785],{"tex":14786,":inline":5898},"R^2"," показує, ",[5217,14789,14790,14791,14793],{},"яка частка дисперсії залежної змінної ",[5895,14792],{"tex":6173,":inline":5898}," пояснюється моделлю регресії"," від ",[5895,14796],{"tex":6166,":inline":5898},[5895,14798],{"tex":14799},"R^2 = 1 - \\frac{\\text{SS}_{\\text{res}}}{\\text{SS}_{\\text{tot}}} = 1 - \\frac{\\sum (y_i - \\hat{y}_i)^2}{\\sum (y_i - \\bar{y})^2}",[5278,14801,14802],{},"Для простої однофакторної лінійної регресії виконується елегантна тотожність:",[5895,14804],{"tex":14805},"R^2 = r^2",[5278,14807,14808],{},[5217,14809,14810],{},"Практична інтерпретація:",[5198,14812,14813,14823,14833],{},[5201,14814,14815,14818,14819,14822],{},[5895,14816],{"tex":14817,":inline":5898},"r = 0.80 \\implies R^2 = 0.64",": модель пояснює ",[5217,14820,14821],{},"64%"," варіації цільової змінної (а 36% зумовлені неврахованими факторами або шумом).",[5201,14824,14825,14828,14829,14832],{},[5895,14826],{"tex":14827,":inline":5898},"r = 0.30 \\implies R^2 = 0.09",": пояснюється лише ",[5217,14830,14831],{},"9%"," варіації (прогнозна сила слабка).",[5201,14834,14835,14836,14839,14840,5812],{},"У множинній регресії (де предикторів багато) ",[5895,14837],{"tex":14838,":inline":5898},"R^2 \\ne r^2",", тому використовують скоригований ",[5895,14841],{"tex":14842,":inline":5898},"R^2_{\\text{adj}}",[5270,14844],{},[5273,14846,14848],{"id":14847},"практичні-завдання","Практичні завдання",[5306,14850,14852],{"id":14851},"рівень-1-базові-вправи","Рівень 1: Базові вправи",[8174,14854,14855,15294,15778],{},[8177,14856,14858,14864,14876,14881,14907],{"icon":2990,"label":14857},"Завдання 1.1: Обчислення коваріації та кореляції вручну і через NumPy",[5278,14859,14860,14861,5916],{},"Дано два вектори спостережень однакової довжини (",[5895,14862],{"tex":14863,":inline":5898},"n = 5",[5198,14865,14866,14871],{},[5201,14867,14868],{},[5895,14869],{"tex":14870,":inline":5898},"X = [10, 20, 30, 40, 50]",[5201,14872,14873],{},[5895,14874],{"tex":14875,":inline":5898},"Y = [15, 25, 35, 45, 55]",[5278,14877,14878],{},[5217,14879,14880],{},"Вимоги:",[5779,14882,14883,14892,14901],{},[5201,14884,14885,14886,14888,14889,5812],{},"Обчисліть вибіркову коваріацію ",[5895,14887],{"tex":6817,":inline":5898}," вручну за формулою та перевірте через ",[5321,14890,14891],{},"np.cov()",[5201,14893,14894,14895,14897,14898,5812],{},"Обчисліть коефіцієнт кореляції Пірсона ",[5895,14896],{"tex":7815,":inline":5898}," вручну та перевірте через ",[5321,14899,14900],{},"np.corrcoef()",[5201,14902,14903,14904,14906],{},"Поясніть отримане значення ",[5895,14905],{"tex":7815,":inline":5898},": чому воно набуло саме такої величини?",[8177,14908,14911,15260,15269],{"icon":14909,"label":14910},"i-lucide-check-circle","✅ Розв'язок",[5314,14912,14914],{"className":5316,"code":14913,"language":5318,"meta":5319,"style":5319},"import numpy as np\n\nX = np.array([10, 20, 30, 40, 50], dtype=float)\nY = np.array([15, 25, 35, 45, 55], dtype=float)\nn = len(X)\n\n# 1. Обчислення вручну\nmean_x, mean_y = np.mean(X), np.mean(Y)\ndev_x, dev_y = X - mean_x, Y - mean_y\n\ncov_manual = np.sum(dev_x * dev_y) \u002F (n - 1)\nstd_x = np.sqrt(np.sum(dev_x**2) \u002F (n - 1))\nstd_y = np.sqrt(np.sum(dev_y**2) \u002F (n - 1))\nr_manual = cov_manual \u002F (std_x * std_y)\n\n# 2. Обчислення через бібліотеку NumPy\ncov_numpy = np.cov(X, Y)[0, 1]\nr_numpy = np.corrcoef(X, Y)[0, 1]\n\nprint(\"--- Ручний розрахунок ---\")\nprint(f\"Середні значення: μ_X = {mean_x:.1f}, μ_Y = {mean_y:.1f}\")\nprint(f\"Коваріація Cov(X, Y): {cov_manual:.2f}\")\nprint(f\"Коефіцієнт кореляції r: {r_manual:.4f}\")\n\nprint(\"\\n--- Перевірка NumPy ---\")\nprint(f\"np.cov(X, Y)[0, 1]:      {cov_numpy:.2f}\")\nprint(f\"np.corrcoef(X, Y)[0, 1]: {r_numpy:.4f}\")\n",[5321,14915,14916,14926,14930,14967,15002,15011,15015,15020,15025,15030,15034,15043,15057,15070,15075,15079,15084,15097,15110,15114,15125,15157,15178,15199,15203,15218,15239],{"__ignoreMap":5319},[5324,14917,14918,14920,14922,14924],{"class":5326,"line":5327},[5324,14919,5331],{"class":5330},[5324,14921,5335],{"class":5334},[5324,14923,5338],{"class":5330},[5324,14925,5341],{"class":5334},[5324,14927,14928],{"class":5326,"line":5344},[5324,14929,5361],{"emptyLinePlaceholder":5360},[5324,14931,14932,14935,14937,14939,14941,14943,14945,14947,14950,14952,14954,14957,14960,14962,14965],{"class":5326,"line":5357},[5324,14933,14934],{"class":5334},"X = np.array([",[5324,14936,5408],{"class":5377},[5324,14938,5405],{"class":5334},[5324,14940,10552],{"class":5377},[5324,14942,5405],{"class":5334},[5324,14944,6512],{"class":5377},[5324,14946,5405],{"class":5334},[5324,14948,14949],{"class":5377},"40",[5324,14951,5405],{"class":5334},[5324,14953,5509],{"class":5377},[5324,14955,14956],{"class":5334},"], ",[5324,14958,14959],{"class":5370},"dtype",[5324,14961,5374],{"class":5334},[5324,14963,14964],{"class":10013},"float",[5324,14966,5381],{"class":5334},[5324,14968,14969,14972,14974,14976,14978,14980,14982,14984,14987,14989,14992,14994,14996,14998,15000],{"class":5326,"line":5364},[5324,14970,14971],{"class":5334},"Y = np.array([",[5324,14973,7075],{"class":5377},[5324,14975,5405],{"class":5334},[5324,14977,7090],{"class":5377},[5324,14979,5405],{"class":5334},[5324,14981,7109],{"class":5377},[5324,14983,5405],{"class":5334},[5324,14985,14986],{"class":5377},"45",[5324,14988,5405],{"class":5334},[5324,14990,14991],{"class":5377},"55",[5324,14993,14956],{"class":5334},[5324,14995,14959],{"class":5370},[5324,14997,5374],{"class":5334},[5324,14999,14964],{"class":10013},[5324,15001,5381],{"class":5334},[5324,15003,15004,15006,15008],{"class":5326,"line":5384},[5324,15005,9407],{"class":5334},[5324,15007,7185],{"class":5641},[5324,15009,15010],{"class":5334},"(X)\n",[5324,15012,15013],{"class":5326,"line":5389},[5324,15014,5361],{"emptyLinePlaceholder":5360},[5324,15016,15017],{"class":5326,"line":5396},[5324,15018,15019],{"class":5392},"# 1. Обчислення вручну\n",[5324,15021,15022],{"class":5326,"line":5422},[5324,15023,15024],{"class":5334},"mean_x, mean_y = np.mean(X), np.mean(Y)\n",[5324,15026,15027],{"class":5326,"line":5455},[5324,15028,15029],{"class":5334},"dev_x, dev_y = X - mean_x, Y - mean_y\n",[5324,15031,15032],{"class":5326,"line":5460},[5324,15033,5361],{"emptyLinePlaceholder":5360},[5324,15035,15036,15039,15041],{"class":5326,"line":5466},[5324,15037,15038],{"class":5334},"cov_manual = np.sum(dev_x * dev_y) \u002F (n - ",[5324,15040,5312],{"class":5377},[5324,15042,5381],{"class":5334},[5324,15044,15045,15048,15050,15053,15055],{"class":5326,"line":5488},[5324,15046,15047],{"class":5334},"std_x = np.sqrt(np.sum(dev_x**",[5324,15049,6334],{"class":5377},[5324,15051,15052],{"class":5334},") \u002F (n - ",[5324,15054,5312],{"class":5377},[5324,15056,5485],{"class":5334},[5324,15058,15059,15062,15064,15066,15068],{"class":5326,"line":5535},[5324,15060,15061],{"class":5334},"std_y = np.sqrt(np.sum(dev_y**",[5324,15063,6334],{"class":5377},[5324,15065,15052],{"class":5334},[5324,15067,5312],{"class":5377},[5324,15069,5485],{"class":5334},[5324,15071,15072],{"class":5326,"line":5556},[5324,15073,15074],{"class":5334},"r_manual = cov_manual \u002F (std_x * std_y)\n",[5324,15076,15077],{"class":5326,"line":5575},[5324,15078,5361],{"emptyLinePlaceholder":5360},[5324,15080,15081],{"class":5326,"line":5612},[5324,15082,15083],{"class":5392},"# 2. Обчислення через бібліотеку NumPy\n",[5324,15085,15086,15089,15091,15093,15095],{"class":5326,"line":5627},[5324,15087,15088],{"class":5334},"cov_numpy = np.cov(X, Y)[",[5324,15090,5434],{"class":5377},[5324,15092,5405],{"class":5334},[5324,15094,5312],{"class":5377},[5324,15096,8647],{"class":5334},[5324,15098,15099,15102,15104,15106,15108],{"class":5326,"line":5633},[5324,15100,15101],{"class":5334},"r_numpy = np.corrcoef(X, Y)[",[5324,15103,5434],{"class":5377},[5324,15105,5405],{"class":5334},[5324,15107,5312],{"class":5377},[5324,15109,8647],{"class":5334},[5324,15111,15112],{"class":5326,"line":5638},[5324,15113,5361],{"emptyLinePlaceholder":5360},[5324,15115,15116,15118,15120,15123],{"class":5326,"line":5653},[5324,15117,5642],{"class":5641},[5324,15119,5645],{"class":5334},[5324,15121,15122],{"class":5519},"\"--- Ручний розрахунок ---\"",[5324,15124,5381],{"class":5334},[5324,15126,15127,15129,15131,15133,15136,15138,15141,15143,15146,15148,15151,15153,15155],{"class":5326,"line":5691},[5324,15128,5642],{"class":5641},[5324,15130,5645],{"class":5334},[5324,15132,5661],{"class":5660},[5324,15134,15135],{"class":5519},"\"Середні значення: μ_X = ",[5324,15137,5667],{"class":5660},[5324,15139,15140],{"class":5334},"mean_x",[5324,15142,5673],{"class":5660},[5324,15144,15145],{"class":5519},", μ_Y = ",[5324,15147,5667],{"class":5660},[5324,15149,15150],{"class":5334},"mean_y",[5324,15152,5673],{"class":5660},[5324,15154,5732],{"class":5519},[5324,15156,5381],{"class":5334},[5324,15158,15159,15161,15163,15165,15168,15170,15172,15174,15176],{"class":5326,"line":5725},[5324,15160,5642],{"class":5641},[5324,15162,5645],{"class":5334},[5324,15164,5661],{"class":5660},[5324,15166,15167],{"class":5519},"\"Коваріація Cov(X, Y): ",[5324,15169,5667],{"class":5660},[5324,15171,7257],{"class":5334},[5324,15173,6770],{"class":5660},[5324,15175,5732],{"class":5519},[5324,15177,5381],{"class":5334},[5324,15179,15180,15182,15184,15186,15189,15191,15193,15195,15197],{"class":5326,"line":5743},[5324,15181,5642],{"class":5641},[5324,15183,5645],{"class":5334},[5324,15185,5661],{"class":5660},[5324,15187,15188],{"class":5519},"\"Коефіцієнт кореляції r: ",[5324,15190,5667],{"class":5660},[5324,15192,8751],{"class":5334},[5324,15194,8754],{"class":5660},[5324,15196,5732],{"class":5519},[5324,15198,5381],{"class":5334},[5324,15200,15201],{"class":5326,"line":6150},[5324,15202,5361],{"emptyLinePlaceholder":5360},[5324,15204,15205,15207,15209,15211,15213,15216],{"class":5326,"line":7370},[5324,15206,5642],{"class":5641},[5324,15208,5645],{"class":5334},[5324,15210,5732],{"class":5519},[5324,15212,5735],{"class":5584},[5324,15214,15215],{"class":5519},"--- Перевірка NumPy ---\"",[5324,15217,5381],{"class":5334},[5324,15219,15220,15222,15224,15226,15229,15231,15233,15235,15237],{"class":5326,"line":7375},[5324,15221,5642],{"class":5641},[5324,15223,5645],{"class":5334},[5324,15225,5661],{"class":5660},[5324,15227,15228],{"class":5519},"\"np.cov(X, Y)[0, 1]:      ",[5324,15230,5667],{"class":5660},[5324,15232,7279],{"class":5334},[5324,15234,6770],{"class":5660},[5324,15236,5732],{"class":5519},[5324,15238,5381],{"class":5334},[5324,15240,15241,15243,15245,15247,15250,15252,15254,15256,15258],{"class":5326,"line":7381},[5324,15242,5642],{"class":5641},[5324,15244,5645],{"class":5334},[5324,15246,5661],{"class":5660},[5324,15248,15249],{"class":5519},"\"np.corrcoef(X, Y)[0, 1]: ",[5324,15251,5667],{"class":5660},[5324,15253,8774],{"class":5334},[5324,15255,8754],{"class":5660},[5324,15257,5732],{"class":5519},[5324,15259,5381],{"class":5334},[15261,15262,15263],"terminal-preview",{},[5314,15264,15267],{"className":15265,"code":15266,"language":5770},[5768],"--- Ручний розрахунок ---\nСередні значення: μ_X = 30.0, μ_Y = 35.0\nКоваріація Cov(X, Y): 250.00\nКоефіцієнт кореляції r: 1.0000\n\n--- Перевірка NumPy ---\nnp.cov(X, Y)[0, 1]:      250.00\nnp.corrcoef(X, Y)[0, 1]: 1.0000\n",[5321,15268,15266],{"__ignoreMap":5319},[5278,15270,15271,15274,15275,15278,15279,5808,15281,15283,15284,15287,15288,15290,15291,15293],{},[5217,15272,15273],{},"Аналітичний висновок:","\nКоефіцієнт ",[5895,15276],{"tex":15277,":inline":5898},"r = +1.0000",", тому що між ",[5895,15280],{"tex":6173,":inline":5898},[5895,15282],{"tex":6166,":inline":5898}," існує ідеальна лінійна залежність виду ",[5895,15285],{"tex":15286,":inline":5898},"Y = X + 5",". Кожне збільшення ",[5895,15289],{"tex":6166,":inline":5898}," на 10 одиниць супроводжується строго пропорційним зростанням ",[5895,15292],{"tex":6173,":inline":5898}," на 10 одиниць, а всі точки лежать строго на одній прямій із додатним кутом нахилу.",[8177,15295,15298,15301,15319,15325],{"icon":15296,"label":15297},"i-lucide-eye","Завдання 1.2: Візуалізація спектра кореляцій",[5278,15299,15300],{},"Згенеруйте три синтетичні датасети по 100 спостережень із різною силою лінійного зв'язку:",[5779,15302,15303,15309,15314],{},[5201,15304,15305,15308],{},[5895,15306],{"tex":15307,":inline":5898},"r \\approx +0.90"," (сильна позитивна колінеарність)",[5201,15310,15311,15313],{},[5895,15312],{"tex":8265,":inline":5898}," (відсутність зв'язку — білий шум)",[5201,15315,15316,15318],{},[5895,15317],{"tex":8336,":inline":5898}," (помірна негативна залежність)",[5278,15320,15321,15322,15324],{},"Побудуйте три підграфіки (scatter plots) в один рядок. Відобразіть лінію тренду та точне обчислене значення ",[5895,15323],{"tex":7815,":inline":5898}," у заголовку кожного графіка.",[8177,15326,15327,15763,15771],{"icon":14909,"label":14910},[5314,15328,15330],{"className":5316,"code":15329,"language":5318,"meta":5319,"style":5319},"import numpy as np\nimport matplotlib.pyplot as plt\n\nrng = np.random.default_rng(seed=42)\nn = 100\n\ndef make_data(target_r):\n    x = rng.standard_normal(n)\n    y = target_r * x + np.sqrt(1 - target_r**2) * rng.standard_normal(n)\n    return x, y\n\nconfigs = [\n    (0.90, 'Сильна позитивна', '#16a34a'),\n    (0.00, 'Лінійний зв\\'язок відсутній', '#64748b'),\n    (-0.70, 'Помірна негативна', '#dc2626')\n]\n\nfig, axes = plt.subplots(1, 3, figsize=(15, 4.5), dpi=150)\n\nfor ax, (r_target, label, color) in zip(axes, configs):\n    x, y = make_data(r_target)\n    r_actual = np.corrcoef(x, y)[0, 1]\n\n    ax.scatter(x, y, alpha=0.7, color=color, edgecolors='black', linewidths=0.5)\n\n    # Лінія регресійного тренду\n    slope, intercept = np.polyfit(x, y, 1)\n    x_grid = np.linspace(x.min(), x.max(), 50)\n    ax.plot(x_grid, slope * x_grid + intercept, color='#1e293b', linestyle='--', linewidth=2)\n\n    ax.set_title(f\"{label}\\nФактичний r = {r_actual:.2f}\", fontweight='bold', fontsize=12)\n    ax.set_xlabel(\"Змінна X\")\n    ax.set_ylabel(\"Змінна Y\")\n    ax.grid(True, linestyle=':', alpha=0.6)\n\nplt.tight_layout()\nplt.show()\n",[5321,15331,15332,15342,15352,15356,15368,15374,15378,15392,15396,15410,15416,15420,15425,15443,15467,15486,15490,15494,15527,15531,15545,15550,15562,15566,15600,15604,15609,15618,15627,15656,15660,15706,15716,15726,15751,15755,15759],{"__ignoreMap":5319},[5324,15333,15334,15336,15338,15340],{"class":5326,"line":5327},[5324,15335,5331],{"class":5330},[5324,15337,5335],{"class":5334},[5324,15339,5338],{"class":5330},[5324,15341,5341],{"class":5334},[5324,15343,15344,15346,15348,15350],{"class":5326,"line":5344},[5324,15345,5331],{"class":5330},[5324,15347,5349],{"class":5334},[5324,15349,5338],{"class":5330},[5324,15351,5354],{"class":5334},[5324,15353,15354],{"class":5326,"line":5357},[5324,15355,5361],{"emptyLinePlaceholder":5360},[5324,15357,15358,15360,15362,15364,15366],{"class":5326,"line":5364},[5324,15359,5367],{"class":5334},[5324,15361,5371],{"class":5370},[5324,15363,5374],{"class":5334},[5324,15365,5378],{"class":5377},[5324,15367,5381],{"class":5334},[5324,15369,15370,15372],{"class":5326,"line":5384},[5324,15371,9407],{"class":5334},[5324,15373,9410],{"class":5377},[5324,15375,15376],{"class":5326,"line":5389},[5324,15377,5361],{"emptyLinePlaceholder":5360},[5324,15379,15380,15382,15385,15387,15390],{"class":5326,"line":5396},[5324,15381,9419],{"class":5660},[5324,15383,15384],{"class":5641}," make_data",[5324,15386,5645],{"class":5334},[5324,15388,15389],{"class":5370},"target_r",[5324,15391,9438],{"class":5334},[5324,15393,15394],{"class":5326,"line":5422},[5324,15395,9448],{"class":5334},[5324,15397,15398,15401,15403,15406,15408],{"class":5326,"line":5455},[5324,15399,15400],{"class":5334},"    y = target_r * x + np.sqrt(",[5324,15402,5312],{"class":5377},[5324,15404,15405],{"class":5334}," - target_r**",[5324,15407,6334],{"class":5377},[5324,15409,9463],{"class":5334},[5324,15411,15412,15414],{"class":5326,"line":5460},[5324,15413,9468],{"class":5330},[5324,15415,9471],{"class":5334},[5324,15417,15418],{"class":5326,"line":5466},[5324,15419,5361],{"emptyLinePlaceholder":5360},[5324,15421,15422],{"class":5326,"line":5488},[5324,15423,15424],{"class":5334},"configs = [\n",[5324,15426,15427,15429,15431,15433,15436,15438,15440],{"class":5326,"line":5535},[5324,15428,11378],{"class":5334},[5324,15430,13717],{"class":5377},[5324,15432,5405],{"class":5334},[5324,15434,15435],{"class":5519},"'Сильна позитивна'",[5324,15437,5405],{"class":5334},[5324,15439,9115],{"class":5519},[5324,15441,15442],{"class":5334},"),\n",[5324,15444,15445,15447,15450,15452,15455,15457,15460,15462,15465],{"class":5326,"line":5556},[5324,15446,11378],{"class":5334},[5324,15448,15449],{"class":5377},"0.00",[5324,15451,5405],{"class":5334},[5324,15453,15454],{"class":5519},"'Лінійний зв",[5324,15456,5585],{"class":5584},[5324,15458,15459],{"class":5519},"язок відсутній'",[5324,15461,5405],{"class":5334},[5324,15463,15464],{"class":5519},"'#64748b'",[5324,15466,15442],{"class":5334},[5324,15468,15469,15472,15475,15477,15480,15482,15484],{"class":5326,"line":5575},[5324,15470,15471],{"class":5334},"    (-",[5324,15473,15474],{"class":5377},"0.70",[5324,15476,5405],{"class":5334},[5324,15478,15479],{"class":5519},"'Помірна негативна'",[5324,15481,5405],{"class":5334},[5324,15483,7426],{"class":5519},[5324,15485,5381],{"class":5334},[5324,15487,15488],{"class":5326,"line":5612},[5324,15489,8647],{"class":5334},[5324,15491,15492],{"class":5326,"line":5627},[5324,15493,5361],{"emptyLinePlaceholder":5360},[5324,15495,15496,15498,15500,15502,15504,15506,15508,15510,15512,15514,15516,15518,15521,15523,15525],{"class":5326,"line":5633},[5324,15497,9517],{"class":5334},[5324,15499,5312],{"class":5377},[5324,15501,5405],{"class":5334},[5324,15503,10595],{"class":5377},[5324,15505,5405],{"class":5334},[5324,15507,5472],{"class":5370},[5324,15509,5475],{"class":5334},[5324,15511,7075],{"class":5377},[5324,15513,5405],{"class":5334},[5324,15515,11362],{"class":5377},[5324,15517,7968],{"class":5334},[5324,15519,15520],{"class":5370},"dpi",[5324,15522,5374],{"class":5334},[5324,15524,7152],{"class":5377},[5324,15526,5381],{"class":5334},[5324,15528,15529],{"class":5326,"line":5638},[5324,15530,5361],{"emptyLinePlaceholder":5360},[5324,15532,15533,15535,15538,15540,15542],{"class":5326,"line":5653},[5324,15534,9552],{"class":5330},[5324,15536,15537],{"class":5334}," ax, (r_target, label, color) ",[5324,15539,9558],{"class":5330},[5324,15541,11537],{"class":5641},[5324,15543,15544],{"class":5334},"(axes, configs):\n",[5324,15546,15547],{"class":5326,"line":5691},[5324,15548,15549],{"class":5334},"    x, y = make_data(r_target)\n",[5324,15551,15552,15554,15556,15558,15560],{"class":5326,"line":5725},[5324,15553,9574],{"class":5334},[5324,15555,5434],{"class":5377},[5324,15557,5405],{"class":5334},[5324,15559,5312],{"class":5377},[5324,15561,8647],{"class":5334},[5324,15563,15564],{"class":5326,"line":5743},[5324,15565,5361],{"emptyLinePlaceholder":5360},[5324,15567,15568,15571,15573,15575,15577,15579,15581,15584,15586,15588,15590,15592,15594,15596,15598],{"class":5326,"line":6150},[5324,15569,15570],{"class":5334},"    ax.scatter(x, y, ",[5324,15572,5494],{"class":5370},[5324,15574,5374],{"class":5334},[5324,15576,10043],{"class":5377},[5324,15578,5405],{"class":5334},[5324,15580,7421],{"class":5370},[5324,15582,15583],{"class":5334},"=color, ",[5324,15585,5514],{"class":5370},[5324,15587,5374],{"class":5334},[5324,15589,5520],{"class":5519},[5324,15591,5405],{"class":5334},[5324,15593,5525],{"class":5370},[5324,15595,5374],{"class":5334},[5324,15597,5530],{"class":5377},[5324,15599,5381],{"class":5334},[5324,15601,15602],{"class":5326,"line":7370},[5324,15603,5361],{"emptyLinePlaceholder":5360},[5324,15605,15606],{"class":5326,"line":7375},[5324,15607,15608],{"class":5392},"    # Лінія регресійного тренду\n",[5324,15610,15611,15614,15616],{"class":5326,"line":7381},[5324,15612,15613],{"class":5334},"    slope, intercept = np.polyfit(x, y, ",[5324,15615,5312],{"class":5377},[5324,15617,5381],{"class":5334},[5324,15619,15620,15623,15625],{"class":5326,"line":7392},[5324,15621,15622],{"class":5334},"    x_grid = np.linspace(x.min(), x.max(), ",[5324,15624,5509],{"class":5377},[5324,15626,5381],{"class":5334},[5324,15628,15629,15632,15634,15636,15638,15640,15642,15644,15646,15648,15650,15652,15654],{"class":5326,"line":7397},[5324,15630,15631],{"class":5334},"    ax.plot(x_grid, slope * x_grid + intercept, ",[5324,15633,7421],{"class":5370},[5324,15635,5374],{"class":5334},[5324,15637,14199],{"class":5519},[5324,15639,5405],{"class":5334},[5324,15641,7431],{"class":5370},[5324,15643,5374],{"class":5334},[5324,15645,7436],{"class":5519},[5324,15647,5405],{"class":5334},[5324,15649,9714],{"class":5370},[5324,15651,5374],{"class":5334},[5324,15653,6334],{"class":5377},[5324,15655,5381],{"class":5334},[5324,15657,15658],{"class":5326,"line":7415},[5324,15659,5361],{"emptyLinePlaceholder":5360},[5324,15661,15662,15665,15667,15669,15671,15673,15675,15677,15680,15682,15684,15686,15688,15690,15692,15694,15696,15698,15700,15702,15704],{"class":5326,"line":7501},[5324,15663,15664],{"class":5334},"    ax.set_title(",[5324,15666,5661],{"class":5660},[5324,15668,5732],{"class":5519},[5324,15670,5667],{"class":5660},[5324,15672,7441],{"class":5334},[5324,15674,13739],{"class":5660},[5324,15676,5735],{"class":5584},[5324,15678,15679],{"class":5519},"Фактичний r = ",[5324,15681,5667],{"class":5660},[5324,15683,9638],{"class":5334},[5324,15685,6770],{"class":5660},[5324,15687,5732],{"class":5519},[5324,15689,5405],{"class":5334},[5324,15691,5593],{"class":5370},[5324,15693,5374],{"class":5334},[5324,15695,5598],{"class":5519},[5324,15697,5405],{"class":5334},[5324,15699,5546],{"class":5370},[5324,15701,5374],{"class":5334},[5324,15703,5551],{"class":5377},[5324,15705,5381],{"class":5334},[5324,15707,15708,15711,15714],{"class":5326,"line":7557},[5324,15709,15710],{"class":5334},"    ax.set_xlabel(",[5324,15712,15713],{"class":5519},"\"Змінна X\"",[5324,15715,5381],{"class":5334},[5324,15717,15718,15721,15724],{"class":5326,"line":7607},[5324,15719,15720],{"class":5334},"    ax.set_ylabel(",[5324,15722,15723],{"class":5519},"\"Змінна Y\"",[5324,15725,5381],{"class":5334},[5324,15727,15728,15731,15733,15735,15737,15739,15741,15743,15745,15747,15749],{"class":5326,"line":7657},[5324,15729,15730],{"class":5334},"    ax.grid(",[5324,15732,7711],{"class":5660},[5324,15734,5405],{"class":5334},[5324,15736,7431],{"class":5370},[5324,15738,5374],{"class":5334},[5324,15740,7720],{"class":5519},[5324,15742,5405],{"class":5334},[5324,15744,5494],{"class":5370},[5324,15746,5374],{"class":5334},[5324,15748,5499],{"class":5377},[5324,15750,5381],{"class":5334},[5324,15752,15753],{"class":5326,"line":7686},[5324,15754,5361],{"emptyLinePlaceholder":5360},[5324,15756,15757],{"class":5326,"line":7696},[5324,15758,7742],{"class":5334},[5324,15760,15761],{"class":5326,"line":7706},[5324,15762,5630],{"class":5334},[15261,15764,15765],{},[5314,15766,15769],{"className":15767,"code":15768,"language":5770},[5768],"Успішно згенеровано 3 графіки розсіювання:\n- Графік 1: висхідна компактна хмара точок, фактичний r = +0.89\n- Графік 2: сферична рівномірна хмара без нахилу, фактичний r = +0.02\n- Графік 3: спадна видовжена хмара точок, фактичний r = -0.71\n",[5321,15770,15768],{"__ignoreMap":5319},[5278,15772,15773],{},[5759,15774],{"alt":15775,"className":15776,"src":15777},"Візуалізація спектра кореляцій: сильна позитивна, нульова та помірна негативна кореляція",[5763],"\u002Fimages\u002Fai-python\u002Fstatistics-basics\u002Fcorrelation\u002Ftask-1-2-spectrum.png",[8177,15779,15782,15785,15814,15819,15833],{"icon":15780,"label":15781},"i-lucide-message-square","Завдання 1.3: Аудит причинно-наслідкових пасток",[5278,15783,15784],{},"Проаналізуйте наведені нижче 4 емпіричні твердження. Для кожної пари змінних визначте категорію залежності:",[5198,15786,15787,15795,15803],{},[5201,15788,15789,5230,15792,6507],{},[5217,15790,15791],{},"Пряма причинність",[5895,15793],{"tex":15794,":inline":5898},"X \\to Y",[5201,15796,15797,5230,15800,6507],{},[5217,15798,15799],{},"Зворотна причинність",[5895,15801],{"tex":15802,":inline":5898},"Y \\to X",[5201,15804,15805,5230,15808,5808,15811,6507],{},[5217,15806,15807],{},"Хибна кореляція через третій фактор (Confounder)",[5895,15809],{"tex":15810,":inline":5898},"Z \\to X",[5895,15812],{"tex":15813,":inline":5898},"Z \\to Y",[5278,15815,15816],{},[5217,15817,15818],{},"Пари для аналізу:",[5779,15820,15821,15824,15827,15830],{},[5201,15822,15823],{},"Рівень формальної освіти (роки навчання) ↔ Розмір заробітної плати.",[5201,15825,15826],{},"Регулярна аеробна фізична активність ↔ Зниження ризику серцево-судинних патологій.",[5201,15828,15829],{},"Споживання цукру на душу населення ↔ Рівень депресивних розладів.",[5201,15831,15832],{},"Кількість залучених пожежних автоцистерн ↔ Сума збитків від пожежі.",[8177,15834,15835,15840],{"icon":14909,"label":14910},[5278,15836,15837],{},[5217,15838,15839],{},"Аналітичний звіт:",[5779,15841,15842,15870,15889,15913],{},[5201,15843,15844,6250,15847],{},[5217,15845,15846],{},"Освіта ↔ Заробітна плата",[5198,15848,15849,15857],{},[5201,15850,15851,10438,15854,5812],{},[5232,15852,15853],{},"Категорія",[5217,15855,15856],{},"Пряма причинність з потужними конфаундерами (Confounding)",[5201,15858,15859,15862,15863,15865,15866,15869],{},[5232,15860,15861],{},"Аналіз",": Набуття кваліфікації підвищує продуктивність праці (",[5895,15864],{"tex":15794,":inline":5898},"). Проте суттєву частку кореляції пояснюють приховані треті фактори ",[5895,15867],{"tex":15868,":inline":5898},"Z",": соціально-економічний стан батьків, доступ до якісного менторства та когнітивні здібності, які одночасно впливають і на тривалість навчання, і на стартову посаду.",[5201,15871,15872,6250,15875],{},[5217,15873,15874],{},"Фізична активність ↔ Здоров'я серця",[5198,15876,15877,15884],{},[5201,15878,15879,10438,15881,5812],{},[5232,15880,15853],{},[5217,15882,15883],{},"Пряма причинність (підтверджена RCT та клінічною фізіологією)",[5201,15885,15886,15888],{},[5232,15887,15861],{},": Доведено біохімічний механізм: кардіонавантаження покращують еластичність судинного ендотелію, знижують рівень ліпопротеїнів низької щільності (LDL) та нормалізують артеріальний тиск.",[5201,15890,15891,6250,15894],{},[5217,15892,15893],{},"Споживання цукру ↔ Депресія",[5198,15895,15896,15903],{},[5201,15897,15898,10438,15900,5812],{},[5232,15899,15853],{},[5217,15901,15902],{},"Двостороння зворотна причинність (Feedback Loop)",[5201,15904,15905,15907,15908,15910,15911,6025],{},[5232,15906,15861],{},": Цукор спричиняє різкі інсулінові гойдалки та системне нейрозапалення (",[5895,15909],{"tex":15794,":inline":5898},"), але люди в депресивному стані інтуїтивно тягнуться до швидких вуглеводів для стимуляції дофамінової системи винагороди (",[5895,15912],{"tex":15802,":inline":5898},[5201,15914,15915,6250,15918],{},[5217,15916,15917],{},"Кількість пожежників ↔ Збитки від пожежі",[5198,15919,15920,15927],{},[5201,15921,15922,10438,15924,5812],{},[5232,15923,15853],{},[5217,15925,15926],{},"Зворотна причинність (Reverse Causality)",[5201,15928,15929,15931,15932,15934,15935,6025],{},[5232,15930,15861],{},": Пожежники не руйнують будівлі. Масштаб займання (",[5895,15933],{"tex":6173,":inline":5898},") є першопричиною того, скільки техніки диспетчер направляє за регламентом тривоги (",[5895,15936],{"tex":6166,":inline":5898},[5270,15938],{},[5306,15940,15942],{"id":15941},"рівень-2-алгоритмічні-задачі","Рівень 2: Алгоритмічні задачі",[8174,15944,15945,16511,17191],{},[8177,15946,15949,15956,15975],{"icon":15947,"label":15948},"i-lucide-table","Завдання 2.1: Пошук екстремальних кореляцій у багатовимірних даних",[5278,15950,15951,15952,15955],{},"Створіть синтетичний масив із 5 числових змінних (",[5895,15953],{"tex":15954,":inline":5898},"n = 200"," об'єктів).\nНапишіть скрипт, який:",[5779,15957,15958,15961,15964],{},[5201,15959,15960],{},"Розраховує симетричну кореляційну матрицю.",[5201,15962,15963],{},"Візуалізує її через теплову карту Seaborn.",[5201,15965,15966,15967,15970,15971,15974],{},"Програмно (без ручного перегляду очима) знаходить пару змінних із ",[5217,15968,15969],{},"найвищою позитивною"," та пару із ",[5217,15972,15973],{},"найсильнішою негативною"," кореляцією (ігноруючи одиниці на головній діагоналі).",[8177,15976,15977,16496,16504],{"icon":14909,"label":14910},[5314,15978,15980],{"className":5316,"code":15979,"language":5318,"meta":5319,"style":5319},"import numpy as np\nimport pandas as pd\nimport seaborn as sns\nimport matplotlib.pyplot as plt\n\nrng = np.random.default_rng(seed=42)\nn = 200\n\n# Генеруємо взаємопов'язані ознаки\nX1 = rng.normal(0, 1, n)\nX2 = 0.8 * X1 + rng.normal(0, 0.5, n)\nX3 = rng.normal(0, 1, n)\nX4 = -0.6 * X3 + rng.normal(0, 0.7, n)\nX5 = rng.uniform(10, 50, n)\n\ndf = pd.DataFrame({'X1': X1, 'X2': X2, 'X3': X3, 'X4': X4, 'X5': X5})\ncorr_matrix = df.corr()\n\n# Пошук унікальних пар (верхній трикутник без діагоналі)\npairs = []\ncols = corr_matrix.columns\nfor i in range(len(cols)):\n    for j in range(i + 1, len(cols)):\n        pairs.append((cols[i], cols[j], corr_matrix.iloc[i, j]))\n\npairs.sort(key=lambda item: item[2])\nmax_neg = pairs[0]   # Найменше (найбільш від'ємне)\nmax_pos = pairs[-1]  # Найбільше додатне\n\nprint(\"=== Результати аналізу кореляційної матриці ===\")\nprint(f\"Найсильніший позитивний зв'язок: {max_pos[0]} ↔ {max_pos[1]} (r = {max_pos[2]:.3f})\")\nprint(f\"Найсильніший негативний зв'язок:  {max_neg[0]} ↔ {max_neg[1]} (r = {max_neg[2]:.3f})\")\n\n# Візуалізація\nplt.figure(figsize=(7, 6))\nsns.heatmap(corr_matrix, annot=True, fmt='.2f', cmap='coolwarm', center=0, vmin=-1, vmax=1)\nplt.title('Матриця парних кореляцій')\nplt.tight_layout()\nplt.show()\n",[5321,15981,15982,15992,16002,16012,16022,16026,16038,16045,16049,16054,16067,16085,16098,16116,16129,16133,16168,16173,16177,16182,16187,16192,16209,16229,16234,16238,16261,16274,16286,16290,16301,16353,16403,16407,16411,16427,16479,16488,16492],{"__ignoreMap":5319},[5324,15983,15984,15986,15988,15990],{"class":5326,"line":5327},[5324,15985,5331],{"class":5330},[5324,15987,5335],{"class":5334},[5324,15989,5338],{"class":5330},[5324,15991,5341],{"class":5334},[5324,15993,15994,15996,15998,16000],{"class":5326,"line":5344},[5324,15995,5331],{"class":5330},[5324,15997,10486],{"class":5334},[5324,15999,5338],{"class":5330},[5324,16001,10491],{"class":5334},[5324,16003,16004,16006,16008,16010],{"class":5326,"line":5357},[5324,16005,5331],{"class":5330},[5324,16007,10508],{"class":5334},[5324,16009,5338],{"class":5330},[5324,16011,10513],{"class":5334},[5324,16013,16014,16016,16018,16020],{"class":5326,"line":5364},[5324,16015,5331],{"class":5330},[5324,16017,5349],{"class":5334},[5324,16019,5338],{"class":5330},[5324,16021,5354],{"class":5334},[5324,16023,16024],{"class":5326,"line":5384},[5324,16025,5361],{"emptyLinePlaceholder":5360},[5324,16027,16028,16030,16032,16034,16036],{"class":5326,"line":5389},[5324,16029,5367],{"class":5334},[5324,16031,5371],{"class":5370},[5324,16033,5374],{"class":5334},[5324,16035,5378],{"class":5377},[5324,16037,5381],{"class":5334},[5324,16039,16040,16042],{"class":5326,"line":5396},[5324,16041,9407],{"class":5334},[5324,16043,16044],{"class":5377},"200\n",[5324,16046,16047],{"class":5326,"line":5422},[5324,16048,5361],{"emptyLinePlaceholder":5360},[5324,16050,16051],{"class":5326,"line":5455},[5324,16052,16053],{"class":5392},"# Генеруємо взаємопов'язані ознаки\n",[5324,16055,16056,16059,16061,16063,16065],{"class":5326,"line":5460},[5324,16057,16058],{"class":5334},"X1 = rng.normal(",[5324,16060,5434],{"class":5377},[5324,16062,5405],{"class":5334},[5324,16064,5312],{"class":5377},[5324,16066,10559],{"class":5334},[5324,16068,16069,16072,16074,16077,16079,16081,16083],{"class":5326,"line":5466},[5324,16070,16071],{"class":5334},"X2 = ",[5324,16073,5428],{"class":5377},[5324,16075,16076],{"class":5334}," * X1 + rng.normal(",[5324,16078,5434],{"class":5377},[5324,16080,5405],{"class":5334},[5324,16082,5530],{"class":5377},[5324,16084,10559],{"class":5334},[5324,16086,16087,16090,16092,16094,16096],{"class":5326,"line":5488},[5324,16088,16089],{"class":5334},"X3 = rng.normal(",[5324,16091,5434],{"class":5377},[5324,16093,5405],{"class":5334},[5324,16095,5312],{"class":5377},[5324,16097,10559],{"class":5334},[5324,16099,16100,16103,16105,16108,16110,16112,16114],{"class":5326,"line":5535},[5324,16101,16102],{"class":5334},"X4 = -",[5324,16104,5499],{"class":5377},[5324,16106,16107],{"class":5334}," * X3 + rng.normal(",[5324,16109,5434],{"class":5377},[5324,16111,5405],{"class":5334},[5324,16113,10043],{"class":5377},[5324,16115,10559],{"class":5334},[5324,16117,16118,16121,16123,16125,16127],{"class":5326,"line":5556},[5324,16119,16120],{"class":5334},"X5 = rng.uniform(",[5324,16122,5408],{"class":5377},[5324,16124,5405],{"class":5334},[5324,16126,5509],{"class":5377},[5324,16128,10559],{"class":5334},[5324,16130,16131],{"class":5326,"line":5575},[5324,16132,5361],{"emptyLinePlaceholder":5360},[5324,16134,16135,16138,16141,16144,16147,16150,16153,16156,16159,16162,16165],{"class":5326,"line":5612},[5324,16136,16137],{"class":5334},"df = pd.DataFrame({",[5324,16139,16140],{"class":5519},"'X1'",[5324,16142,16143],{"class":5334},": X1, ",[5324,16145,16146],{"class":5519},"'X2'",[5324,16148,16149],{"class":5334},": X2, ",[5324,16151,16152],{"class":5519},"'X3'",[5324,16154,16155],{"class":5334},": X3, ",[5324,16157,16158],{"class":5519},"'X4'",[5324,16160,16161],{"class":5334},": X4, ",[5324,16163,16164],{"class":5519},"'X5'",[5324,16166,16167],{"class":5334},": X5})\n",[5324,16169,16170],{"class":5326,"line":5627},[5324,16171,16172],{"class":5334},"corr_matrix = df.corr()\n",[5324,16174,16175],{"class":5326,"line":5633},[5324,16176,5361],{"emptyLinePlaceholder":5360},[5324,16178,16179],{"class":5326,"line":5638},[5324,16180,16181],{"class":5392},"# Пошук унікальних пар (верхній трикутник без діагоналі)\n",[5324,16183,16184],{"class":5326,"line":5653},[5324,16185,16186],{"class":5334},"pairs = []\n",[5324,16188,16189],{"class":5326,"line":5691},[5324,16190,16191],{"class":5334},"cols = corr_matrix.columns\n",[5324,16193,16194,16196,16198,16200,16202,16204,16206],{"class":5326,"line":5725},[5324,16195,9552],{"class":5330},[5324,16197,13664],{"class":5334},[5324,16199,9558],{"class":5330},[5324,16201,13669],{"class":5641},[5324,16203,5645],{"class":5334},[5324,16205,7185],{"class":5641},[5324,16207,16208],{"class":5334},"(cols)):\n",[5324,16210,16211,16213,16215,16217,16219,16221,16223,16225,16227],{"class":5326,"line":5743},[5324,16212,11704],{"class":5330},[5324,16214,13683],{"class":5334},[5324,16216,9558],{"class":5330},[5324,16218,13669],{"class":5641},[5324,16220,13690],{"class":5334},[5324,16222,5312],{"class":5377},[5324,16224,5405],{"class":5334},[5324,16226,7185],{"class":5641},[5324,16228,16208],{"class":5334},[5324,16230,16231],{"class":5326,"line":6150},[5324,16232,16233],{"class":5334},"        pairs.append((cols[i], cols[j], corr_matrix.iloc[i, j]))\n",[5324,16235,16236],{"class":5326,"line":7370},[5324,16237,5361],{"emptyLinePlaceholder":5360},[5324,16239,16240,16243,16246,16248,16251,16254,16257,16259],{"class":5326,"line":7375},[5324,16241,16242],{"class":5334},"pairs.sort(",[5324,16244,16245],{"class":5370},"key",[5324,16247,5374],{"class":5334},[5324,16249,16250],{"class":5660},"lambda",[5324,16252,16253],{"class":5370}," item",[5324,16255,16256],{"class":5334},": item[",[5324,16258,6334],{"class":5377},[5324,16260,6693],{"class":5334},[5324,16262,16263,16266,16268,16271],{"class":5326,"line":7381},[5324,16264,16265],{"class":5334},"max_neg = pairs[",[5324,16267,5434],{"class":5377},[5324,16269,16270],{"class":5334},"]   ",[5324,16272,16273],{"class":5392},"# Найменше (найбільш від'ємне)\n",[5324,16275,16276,16279,16281,16283],{"class":5326,"line":7392},[5324,16277,16278],{"class":5334},"max_pos = pairs[-",[5324,16280,5312],{"class":5377},[5324,16282,7223],{"class":5334},[5324,16284,16285],{"class":5392},"# Найбільше додатне\n",[5324,16287,16288],{"class":5326,"line":7397},[5324,16289,5361],{"emptyLinePlaceholder":5360},[5324,16291,16292,16294,16296,16299],{"class":5326,"line":7415},[5324,16293,5642],{"class":5641},[5324,16295,5645],{"class":5334},[5324,16297,16298],{"class":5519},"\"=== Результати аналізу кореляційної матриці ===\"",[5324,16300,5381],{"class":5334},[5324,16302,16303,16305,16307,16309,16312,16314,16317,16319,16321,16323,16325,16327,16329,16331,16333,16335,16338,16340,16342,16344,16346,16348,16351],{"class":5326,"line":7501},[5324,16304,5642],{"class":5641},[5324,16306,5645],{"class":5334},[5324,16308,5661],{"class":5660},[5324,16310,16311],{"class":5519},"\"Найсильніший позитивний зв'язок: ",[5324,16313,5667],{"class":5660},[5324,16315,16316],{"class":5334},"max_pos[",[5324,16318,5434],{"class":5377},[5324,16320,6767],{"class":5334},[5324,16322,13739],{"class":5660},[5324,16324,13742],{"class":5519},[5324,16326,5667],{"class":5660},[5324,16328,16316],{"class":5334},[5324,16330,5312],{"class":5377},[5324,16332,6767],{"class":5334},[5324,16334,13739],{"class":5660},[5324,16336,16337],{"class":5519}," (r = ",[5324,16339,5667],{"class":5660},[5324,16341,16316],{"class":5334},[5324,16343,6334],{"class":5377},[5324,16345,6767],{"class":5334},[5324,16347,8847],{"class":5660},[5324,16349,16350],{"class":5519},")\"",[5324,16352,5381],{"class":5334},[5324,16354,16355,16357,16359,16361,16364,16366,16369,16371,16373,16375,16377,16379,16381,16383,16385,16387,16389,16391,16393,16395,16397,16399,16401],{"class":5326,"line":7557},[5324,16356,5642],{"class":5641},[5324,16358,5645],{"class":5334},[5324,16360,5661],{"class":5660},[5324,16362,16363],{"class":5519},"\"Найсильніший негативний зв'язок:  ",[5324,16365,5667],{"class":5660},[5324,16367,16368],{"class":5334},"max_neg[",[5324,16370,5434],{"class":5377},[5324,16372,6767],{"class":5334},[5324,16374,13739],{"class":5660},[5324,16376,13742],{"class":5519},[5324,16378,5667],{"class":5660},[5324,16380,16368],{"class":5334},[5324,16382,5312],{"class":5377},[5324,16384,6767],{"class":5334},[5324,16386,13739],{"class":5660},[5324,16388,16337],{"class":5519},[5324,16390,5667],{"class":5660},[5324,16392,16368],{"class":5334},[5324,16394,6334],{"class":5377},[5324,16396,6767],{"class":5334},[5324,16398,8847],{"class":5660},[5324,16400,16350],{"class":5519},[5324,16402,5381],{"class":5334},[5324,16404,16405],{"class":5326,"line":7607},[5324,16406,5361],{"emptyLinePlaceholder":5360},[5324,16408,16409],{"class":5326,"line":7657},[5324,16410,5463],{"class":5392},[5324,16412,16413,16415,16417,16419,16421,16423,16425],{"class":5326,"line":7686},[5324,16414,5469],{"class":5334},[5324,16416,5472],{"class":5370},[5324,16418,5475],{"class":5334},[5324,16420,9824],{"class":5377},[5324,16422,5405],{"class":5334},[5324,16424,5482],{"class":5377},[5324,16426,5485],{"class":5334},[5324,16428,16429,16431,16433,16435,16437,16439,16441,16443,16445,16447,16449,16451,16453,16455,16457,16459,16461,16463,16465,16467,16469,16471,16473,16475,16477],{"class":5326,"line":7696},[5324,16430,10780],{"class":5334},[5324,16432,10783],{"class":5370},[5324,16434,5374],{"class":5334},[5324,16436,7711],{"class":5660},[5324,16438,5405],{"class":5334},[5324,16440,10792],{"class":5370},[5324,16442,5374],{"class":5334},[5324,16444,10797],{"class":5519},[5324,16446,5405],{"class":5334},[5324,16448,10802],{"class":5370},[5324,16450,5374],{"class":5334},[5324,16452,10807],{"class":5519},[5324,16454,5405],{"class":5334},[5324,16456,6288],{"class":5370},[5324,16458,5374],{"class":5334},[5324,16460,5434],{"class":5377},[5324,16462,5405],{"class":5334},[5324,16464,10820],{"class":5370},[5324,16466,10823],{"class":5334},[5324,16468,5312],{"class":5377},[5324,16470,5405],{"class":5334},[5324,16472,10830],{"class":5370},[5324,16474,5374],{"class":5334},[5324,16476,5312],{"class":5377},[5324,16478,5381],{"class":5334},[5324,16480,16481,16483,16486],{"class":5326,"line":7706},[5324,16482,5578],{"class":5334},[5324,16484,16485],{"class":5519},"'Матриця парних кореляцій'",[5324,16487,5381],{"class":5334},[5324,16489,16490],{"class":5326,"line":7733},[5324,16491,7742],{"class":5334},[5324,16493,16494],{"class":5326,"line":7739},[5324,16495,5630],{"class":5334},[15261,16497,16498],{},[5314,16499,16502],{"className":16500,"code":16501,"language":5770},[5768],"=== Результати аналізу кореляційної матриці ===\nНайсильніший позитивний зв'язок: X1 ↔ X2 (r = 0.849)\nНайсильніший негативний зв'язок:  X3 ↔ X4 (r = -0.638)\n",[5321,16503,16501],{"__ignoreMap":5319},[5278,16505,16506],{},[5759,16507],{"alt":16508,"className":16509,"src":16510},"Теплова карта матриці парних кореляцій ознак X1-X5",[5763],"\u002Fimages\u002Fai-python\u002Fstatistics-basics\u002Fcorrelation\u002Ftask-2-1-heatmap.png",[8177,16512,16515,16522,16539],{"icon":16513,"label":16514},"i-lucide-alert-triangle","Завдання 2.2: Алгоритм автоматичного виявлення мультиколінеарності",[5278,16516,16517,16518,16521],{},"Напишіть функцію ",[5321,16519,16520],{},"detect_multicollinearity(df, threshold=0.90)",", яка:",[5779,16523,16524,16527,16530,16536],{},[5201,16525,16526],{},"Приймає на вхід датафрейм із довільною кількістю числових колонок.",[5201,16528,16529],{},"Вираховує кореляційну матрицю.",[5201,16531,16532,16533,5812],{},"Сканує позадіагональні коефіцієнти за модулем ",[5895,16534],{"tex":16535,":inline":5898},"|r| > \\text{threshold}",[5201,16537,16538],{},"Повертає структурований список попереджень із зазначенням конкретних пар колонок, величини коефіцієнта та інженерної рекомендації, яку ознаку безпечно видалити (наприклад, ту, яка має більшу частку нулів або меншу дисперсію).",[8177,16540,16541,17183],{"icon":14909,"label":14910},[5314,16542,16544],{"className":5316,"code":16543,"language":5318,"meta":5319,"style":5319},"import numpy as np\nimport pandas as pd\n\ndef detect_multicollinearity(df: pd.DataFrame, threshold: float = 0.90):\n    numeric_df = df.select_dtypes(include=[np.number])\n    corr = numeric_df.corr()\n    cols = corr.columns\n    warnings = []\n\n    for i in range(len(cols)):\n        for j in range(i + 1, len(cols)):\n            col_a, col_b = cols[i], cols[j]\n            r_val = corr.iloc[i, j]\n\n            if abs(r_val) >= threshold:\n                # Оцінюємо якість ознак для рекомендації вилучення\n                missing_a = df[col_a].isna().mean()\n                missing_b = df[col_b].isna().mean()\n\n                if missing_a > missing_b:\n                    rec = f\"Рекомендовано видалити '{col_a}' (містить більше пропусків: {missing_a:.1%})\"\n                elif missing_b > missing_a:\n                    rec = f\"Рекомендовано видалити '{col_b}' (містить більше пропусків: {missing_b:.1%})\"\n                else:\n                    rec = f\"Ознаки дублюють одна одну. Рекомендовано залишити '{col_a}', вилучивши '{col_b}'\"\n\n                warnings.append({\n                    'feature_1': col_a,\n                    'feature_2': col_b,\n                    'correlation': round(float(r_val), 4),\n                    'recommendation': rec\n                })\n\n    return warnings\n\n# Тестування на датасеті нерухомості\ntest_data = pd.DataFrame({\n    'area_m2': [45, 60, 85, 120, 150],\n    'area_sqft': [484.38, 645.83, 914.93, 1291.67, 1614.59],\n    'rooms': [1, 2, 3, 4, 5],\n    'distance_to_center_km': [12, 8, 5, 3, 1]\n})\n\nissues = detect_multicollinearity(test_data, threshold=0.95)\n\nprint(f\"Знайдено колінеарних пар: {len(issues)}\\n\")\nfor idx, item in enumerate(issues, start=1):\n    print(f\"[{idx}] {item['feature_1']} ↔ {item['feature_2']}: r = {item['correlation']}\")\n    print(f\"    Порада: {item['recommendation']}\\n\")\n",[5321,16545,16546,16556,16566,16570,16598,16609,16614,16619,16624,16628,16644,16665,16670,16675,16679,16689,16694,16699,16704,16708,16716,16747,16755,16781,16788,16815,16819,16824,16832,16840,16861,16869,16874,16878,16885,16889,16894,16899,16930,16962,16989,17016,17020,17024,17038,17042,17068,17091,17155],{"__ignoreMap":5319},[5324,16547,16548,16550,16552,16554],{"class":5326,"line":5327},[5324,16549,5331],{"class":5330},[5324,16551,5335],{"class":5334},[5324,16553,5338],{"class":5330},[5324,16555,5341],{"class":5334},[5324,16557,16558,16560,16562,16564],{"class":5326,"line":5344},[5324,16559,5331],{"class":5330},[5324,16561,10486],{"class":5334},[5324,16563,5338],{"class":5330},[5324,16565,10491],{"class":5334},[5324,16567,16568],{"class":5326,"line":5357},[5324,16569,5361],{"emptyLinePlaceholder":5360},[5324,16571,16572,16574,16577,16579,16582,16585,16588,16590,16592,16594,16596],{"class":5326,"line":5364},[5324,16573,9419],{"class":5660},[5324,16575,16576],{"class":5641}," detect_multicollinearity",[5324,16578,5645],{"class":5334},[5324,16580,16581],{"class":5370},"df",[5324,16583,16584],{"class":5334},": pd.DataFrame, ",[5324,16586,16587],{"class":5370},"threshold",[5324,16589,10438],{"class":5334},[5324,16591,14964],{"class":10013},[5324,16593,7466],{"class":5334},[5324,16595,13717],{"class":5377},[5324,16597,9438],{"class":5334},[5324,16599,16600,16603,16606],{"class":5326,"line":5384},[5324,16601,16602],{"class":5334},"    numeric_df = df.select_dtypes(",[5324,16604,16605],{"class":5370},"include",[5324,16607,16608],{"class":5334},"=[np.number])\n",[5324,16610,16611],{"class":5326,"line":5389},[5324,16612,16613],{"class":5334},"    corr = numeric_df.corr()\n",[5324,16615,16616],{"class":5326,"line":5396},[5324,16617,16618],{"class":5334},"    cols = corr.columns\n",[5324,16620,16621],{"class":5326,"line":5422},[5324,16622,16623],{"class":5334},"    warnings = []\n",[5324,16625,16626],{"class":5326,"line":5455},[5324,16627,5361],{"emptyLinePlaceholder":5360},[5324,16629,16630,16632,16634,16636,16638,16640,16642],{"class":5326,"line":5460},[5324,16631,11704],{"class":5330},[5324,16633,13664],{"class":5334},[5324,16635,9558],{"class":5330},[5324,16637,13669],{"class":5641},[5324,16639,5645],{"class":5334},[5324,16641,7185],{"class":5641},[5324,16643,16208],{"class":5334},[5324,16645,16646,16649,16651,16653,16655,16657,16659,16661,16663],{"class":5326,"line":5466},[5324,16647,16648],{"class":5330},"        for",[5324,16650,13683],{"class":5334},[5324,16652,9558],{"class":5330},[5324,16654,13669],{"class":5641},[5324,16656,13690],{"class":5334},[5324,16658,5312],{"class":5377},[5324,16660,5405],{"class":5334},[5324,16662,7185],{"class":5641},[5324,16664,16208],{"class":5334},[5324,16666,16667],{"class":5326,"line":5488},[5324,16668,16669],{"class":5334},"            col_a, col_b = cols[i], cols[j]\n",[5324,16671,16672],{"class":5326,"line":5535},[5324,16673,16674],{"class":5334},"            r_val = corr.iloc[i, j]\n",[5324,16676,16677],{"class":5326,"line":5556},[5324,16678,5361],{"emptyLinePlaceholder":5360},[5324,16680,16681,16684,16686],{"class":5326,"line":5575},[5324,16682,16683],{"class":5330},"            if",[5324,16685,13711],{"class":5641},[5324,16687,16688],{"class":5334},"(r_val) >= threshold:\n",[5324,16690,16691],{"class":5326,"line":5612},[5324,16692,16693],{"class":5392},"                # Оцінюємо якість ознак для рекомендації вилучення\n",[5324,16695,16696],{"class":5326,"line":5627},[5324,16697,16698],{"class":5334},"                missing_a = df[col_a].isna().mean()\n",[5324,16700,16701],{"class":5326,"line":5633},[5324,16702,16703],{"class":5334},"                missing_b = df[col_b].isna().mean()\n",[5324,16705,16706],{"class":5326,"line":5638},[5324,16707,5361],{"emptyLinePlaceholder":5360},[5324,16709,16710,16713],{"class":5326,"line":5653},[5324,16711,16712],{"class":5330},"                if",[5324,16714,16715],{"class":5334}," missing_a > missing_b:\n",[5324,16717,16718,16721,16723,16726,16728,16731,16733,16736,16738,16741,16744],{"class":5326,"line":5691},[5324,16719,16720],{"class":5334},"                    rec = ",[5324,16722,5661],{"class":5660},[5324,16724,16725],{"class":5519},"\"Рекомендовано видалити '",[5324,16727,5667],{"class":5660},[5324,16729,16730],{"class":5334},"col_a",[5324,16732,13739],{"class":5660},[5324,16734,16735],{"class":5519},"' (містить більше пропусків: ",[5324,16737,5667],{"class":5660},[5324,16739,16740],{"class":5334},"missing_a",[5324,16742,16743],{"class":5660},":.1%}",[5324,16745,16746],{"class":5519},")\"\n",[5324,16748,16749,16752],{"class":5326,"line":5725},[5324,16750,16751],{"class":5330},"                elif",[5324,16753,16754],{"class":5334}," missing_b > missing_a:\n",[5324,16756,16757,16759,16761,16763,16765,16768,16770,16772,16774,16777,16779],{"class":5326,"line":5743},[5324,16758,16720],{"class":5334},[5324,16760,5661],{"class":5660},[5324,16762,16725],{"class":5519},[5324,16764,5667],{"class":5660},[5324,16766,16767],{"class":5334},"col_b",[5324,16769,13739],{"class":5660},[5324,16771,16735],{"class":5519},[5324,16773,5667],{"class":5660},[5324,16775,16776],{"class":5334},"missing_b",[5324,16778,16743],{"class":5660},[5324,16780,16746],{"class":5519},[5324,16782,16783,16786],{"class":5326,"line":6150},[5324,16784,16785],{"class":5330},"                else",[5324,16787,7948],{"class":5334},[5324,16789,16790,16792,16794,16797,16799,16801,16803,16806,16808,16810,16812],{"class":5326,"line":7370},[5324,16791,16720],{"class":5334},[5324,16793,5661],{"class":5660},[5324,16795,16796],{"class":5519},"\"Ознаки дублюють одна одну. Рекомендовано залишити '",[5324,16798,5667],{"class":5660},[5324,16800,16730],{"class":5334},[5324,16802,13739],{"class":5660},[5324,16804,16805],{"class":5519},"', вилучивши '",[5324,16807,5667],{"class":5660},[5324,16809,16767],{"class":5334},[5324,16811,13739],{"class":5660},[5324,16813,16814],{"class":5519},"'\"\n",[5324,16816,16817],{"class":5326,"line":7375},[5324,16818,5361],{"emptyLinePlaceholder":5360},[5324,16820,16821],{"class":5326,"line":7381},[5324,16822,16823],{"class":5334},"                warnings.append({\n",[5324,16825,16826,16829],{"class":5326,"line":7392},[5324,16827,16828],{"class":5519},"                    'feature_1'",[5324,16830,16831],{"class":5334},": col_a,\n",[5324,16833,16834,16837],{"class":5326,"line":7397},[5324,16835,16836],{"class":5519},"                    'feature_2'",[5324,16838,16839],{"class":5334},": col_b,\n",[5324,16841,16842,16845,16847,16850,16852,16854,16857,16859],{"class":5326,"line":7415},[5324,16843,16844],{"class":5519},"                    'correlation'",[5324,16846,10438],{"class":5334},[5324,16848,16849],{"class":5641},"round",[5324,16851,5645],{"class":5334},[5324,16853,14964],{"class":10013},[5324,16855,16856],{"class":5334},"(r_val), ",[5324,16858,6369],{"class":5377},[5324,16860,15442],{"class":5334},[5324,16862,16863,16866],{"class":5326,"line":7501},[5324,16864,16865],{"class":5519},"                    'recommendation'",[5324,16867,16868],{"class":5334},": rec\n",[5324,16870,16871],{"class":5326,"line":7557},[5324,16872,16873],{"class":5334},"                })\n",[5324,16875,16876],{"class":5326,"line":7607},[5324,16877,5361],{"emptyLinePlaceholder":5360},[5324,16879,16880,16882],{"class":5326,"line":7657},[5324,16881,9468],{"class":5330},[5324,16883,16884],{"class":5334}," warnings\n",[5324,16886,16887],{"class":5326,"line":7686},[5324,16888,5361],{"emptyLinePlaceholder":5360},[5324,16890,16891],{"class":5326,"line":7696},[5324,16892,16893],{"class":5392},"# Тестування на датасеті нерухомості\n",[5324,16895,16896],{"class":5326,"line":7706},[5324,16897,16898],{"class":5334},"test_data = pd.DataFrame({\n",[5324,16900,16901,16904,16907,16909,16911,16913,16915,16918,16920,16923,16925,16927],{"class":5326,"line":7733},[5324,16902,16903],{"class":5519},"    'area_m2'",[5324,16905,16906],{"class":5334},": [",[5324,16908,14986],{"class":5377},[5324,16910,5405],{"class":5334},[5324,16912,6372],{"class":5377},[5324,16914,5405],{"class":5334},[5324,16916,16917],{"class":5377},"85",[5324,16919,5405],{"class":5334},[5324,16921,16922],{"class":5377},"120",[5324,16924,5405],{"class":5334},[5324,16926,7152],{"class":5377},[5324,16928,16929],{"class":5334},"],\n",[5324,16931,16932,16935,16937,16940,16942,16945,16947,16950,16952,16955,16957,16960],{"class":5326,"line":7739},[5324,16933,16934],{"class":5519},"    'area_sqft'",[5324,16936,16906],{"class":5334},[5324,16938,16939],{"class":5377},"484.38",[5324,16941,5405],{"class":5334},[5324,16943,16944],{"class":5377},"645.83",[5324,16946,5405],{"class":5334},[5324,16948,16949],{"class":5377},"914.93",[5324,16951,5405],{"class":5334},[5324,16953,16954],{"class":5377},"1291.67",[5324,16956,5405],{"class":5334},[5324,16958,16959],{"class":5377},"1614.59",[5324,16961,16929],{"class":5334},[5324,16963,16964,16967,16969,16971,16973,16975,16977,16979,16981,16983,16985,16987],{"class":5326,"line":7745},[5324,16965,16966],{"class":5519},"    'rooms'",[5324,16968,16906],{"class":5334},[5324,16970,5312],{"class":5377},[5324,16972,5405],{"class":5334},[5324,16974,6334],{"class":5377},[5324,16976,5405],{"class":5334},[5324,16978,10595],{"class":5377},[5324,16980,5405],{"class":5334},[5324,16982,6369],{"class":5377},[5324,16984,5405],{"class":5334},[5324,16986,5439],{"class":5377},[5324,16988,16929],{"class":5334},[5324,16990,16991,16994,16996,16998,17000,17002,17004,17006,17008,17010,17012,17014],{"class":5326,"line":9046},[5324,16992,16993],{"class":5519},"    'distance_to_center_km'",[5324,16995,16906],{"class":5334},[5324,16997,5551],{"class":5377},[5324,16999,5405],{"class":5334},[5324,17001,6436],{"class":5377},[5324,17003,5405],{"class":5334},[5324,17005,5439],{"class":5377},[5324,17007,5405],{"class":5334},[5324,17009,10595],{"class":5377},[5324,17011,5405],{"class":5334},[5324,17013,5312],{"class":5377},[5324,17015,8647],{"class":5334},[5324,17017,17018],{"class":5326,"line":9057},[5324,17019,10705],{"class":5334},[5324,17021,17022],{"class":5326,"line":9068},[5324,17023,5361],{"emptyLinePlaceholder":5360},[5324,17025,17026,17029,17031,17033,17036],{"class":5326,"line":9094},[5324,17027,17028],{"class":5334},"issues = detect_multicollinearity(test_data, ",[5324,17030,16587],{"class":5370},[5324,17032,5374],{"class":5334},[5324,17034,17035],{"class":5377},"0.95",[5324,17037,5381],{"class":5334},[5324,17039,17040],{"class":5326,"line":9100},[5324,17041,5361],{"emptyLinePlaceholder":5360},[5324,17043,17044,17046,17048,17050,17053,17055,17057,17060,17062,17064,17066],{"class":5326,"line":9105},[5324,17045,5642],{"class":5641},[5324,17047,5645],{"class":5334},[5324,17049,5661],{"class":5660},[5324,17051,17052],{"class":5519},"\"Знайдено колінеарних пар: ",[5324,17054,5667],{"class":5660},[5324,17056,7185],{"class":5641},[5324,17058,17059],{"class":5334},"(issues)",[5324,17061,13739],{"class":5660},[5324,17063,5735],{"class":5584},[5324,17065,5732],{"class":5519},[5324,17067,5381],{"class":5334},[5324,17069,17070,17072,17075,17077,17079,17082,17085,17087,17089],{"class":5326,"line":9137},[5324,17071,9552],{"class":5330},[5324,17073,17074],{"class":5334}," idx, item ",[5324,17076,9558],{"class":5330},[5324,17078,9561],{"class":5641},[5324,17080,17081],{"class":5334},"(issues, ",[5324,17083,17084],{"class":5370},"start",[5324,17086,5374],{"class":5334},[5324,17088,5312],{"class":5377},[5324,17090,9438],{"class":5334},[5324,17092,17093,17096,17098,17100,17103,17105,17108,17110,17113,17115,17118,17121,17123,17125,17127,17129,17131,17134,17136,17138,17140,17142,17144,17147,17149,17151,17153],{"class":5326,"line":9156},[5324,17094,17095],{"class":5641},"    print",[5324,17097,5645],{"class":5334},[5324,17099,5661],{"class":5660},[5324,17101,17102],{"class":5519},"\"[",[5324,17104,5667],{"class":5660},[5324,17106,17107],{"class":5334},"idx",[5324,17109,13739],{"class":5660},[5324,17111,17112],{"class":5519},"] ",[5324,17114,5667],{"class":5660},[5324,17116,17117],{"class":5334},"item[",[5324,17119,17120],{"class":5519},"'feature_1'",[5324,17122,6767],{"class":5334},[5324,17124,13739],{"class":5660},[5324,17126,13742],{"class":5519},[5324,17128,5667],{"class":5660},[5324,17130,17117],{"class":5334},[5324,17132,17133],{"class":5519},"'feature_2'",[5324,17135,6767],{"class":5334},[5324,17137,13739],{"class":5660},[5324,17139,13752],{"class":5519},[5324,17141,5667],{"class":5660},[5324,17143,17117],{"class":5334},[5324,17145,17146],{"class":5519},"'correlation'",[5324,17148,6767],{"class":5334},[5324,17150,13739],{"class":5660},[5324,17152,5732],{"class":5519},[5324,17154,5381],{"class":5334},[5324,17156,17157,17159,17161,17163,17166,17168,17170,17173,17175,17177,17179,17181],{"class":5326,"line":9198},[5324,17158,17095],{"class":5641},[5324,17160,5645],{"class":5334},[5324,17162,5661],{"class":5660},[5324,17164,17165],{"class":5519},"\"    Порада: ",[5324,17167,5667],{"class":5660},[5324,17169,17117],{"class":5334},[5324,17171,17172],{"class":5519},"'recommendation'",[5324,17174,6767],{"class":5334},[5324,17176,13739],{"class":5660},[5324,17178,5735],{"class":5584},[5324,17180,5732],{"class":5519},[5324,17182,5381],{"class":5334},[15261,17184,17185],{},[5314,17186,17189],{"className":17187,"code":17188,"language":5770},[5768],"Знайдено колінеарних пар: 1\n\n[1] area_m2 ↔ area_sqft: r = 1.0\n    Порада: Ознаки дублюють одна одну. Рекомендовано залишити 'area_m2', вилучивши 'area_sqft'\n",[5321,17190,17188],{"__ignoreMap":5319},[8177,17192,17195,17198,17201,17222],{"icon":17193,"label":17194},"i-lucide-git-compare","Завдання 2.3: Експериментальне порівняння Пірсона та Спірмена",[5278,17196,17197],{},"Згенеруйте вибірку зі 100 точок, пов'язаних суворо монотонною, але суттєво нелінійною функцією:",[5895,17199],{"tex":17200},"y = x^3 + \\\\varepsilon, \\\\quad x \\\\in [-3, 3], \\\\quad \\\\varepsilon \\\\sim \\\\mathcal{N}(0, 3^2)",[5779,17202,17203,17210,17219],{},[5201,17204,14894,17205,17207,17208,5812],{},[5895,17206],{"tex":7815,":inline":5898}," та коефіцієнт Спірмена ",[5895,17209],{"tex":13947,":inline":5898},[5201,17211,17212,17213,10438,17216,5812],{},"Додайте до вибірки ",[5217,17214,17215],{},"один екстремальний викид",[5895,17217],{"tex":17218,":inline":5898},"(x, y) = (3, -100)",[5201,17220,17221],{},"Повторно обчисліть обидві метрики та поясніть, чому ранг-орієнтований Спірмен виявився стійкішим до поломки.",[8177,17223,17224,17877,17885,17892],{"icon":14909,"label":14910},[5314,17225,17227],{"className":5316,"code":17226,"language":5318,"meta":5319,"style":5319},"import numpy as np\nfrom scipy import stats\n\nrng = np.random.default_rng(seed=42)\nn = 100\n\nx = np.linspace(-3, 3, n)\ny = x**3 + rng.normal(0, 3, n)\n\n# 1. Початковий розрахунок\nr_clean, _ = stats.pearsonr(x, y)\nrho_clean, _ = stats.spearmanr(x, y)\n\nprint(\"=== 1. Чисті нелінійні монотонні дані ===\")\nprint(f\"Пірсон r:  {r_clean:.4f}\")\nprint(f\"Спірмен ρ: {rho_clean:.4f}\")\n\n# 2. Додаємо один екстремальний викид у кінець масиву\nx_out = np.append(x, 3.0)\ny_out = np.append(y, -100.0)\n\nr_out, _ = stats.pearsonr(x_out, y_out)\nrho_out, _ = stats.spearmanr(x_out, y_out)\n\nprint(\"\\n=== 2. Дані з одним грубим викидом (3.0, -100.0) ===\")\nprint(f\"Пірсон r:  {r_out:.4f}  (падіння на {abs(r_clean - r_out):.4f})\")\nprint(f\"Спірмен ρ: {rho_out:.4f}  (падіння всього на {abs(rho_clean - rho_out):.4f})\")\n\n# 3. Візуалізація стійкості до викидів\nimport matplotlib.pyplot as plt\n\nfig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 5))\nax1.scatter(x, y, color='#0284c7', s=40, alpha=0.7)\nax1.plot(x, x**3, color='#ea580c', lw=2, linestyle='--', label='$y = x^3$')\nax1.set_title(f'Без викидів:\\nПірсон r = {r_clean:.3f}, Спірмен ρ = {rho_clean:.3f}', fontweight='bold')\nax1.grid(True, linestyle=':', alpha=0.5)\nax1.legend()\n\nax2.scatter(x_out[:-1], y_out[:-1], color='#0284c7', s=40, alpha=0.7)\nax2.scatter([x_out[-1]], [y_out[-1]], color='#dc2626', s=120, marker='X', label='Викид (3, -100)')\nax2.set_title(f'З викидом:\\nПірсон обвалився до {r_out:.3f}, але Спірмен ρ = {rho_out:.3f}!', fontweight='bold', color='#991b1b')\nax2.grid(True, linestyle=':', alpha=0.5)\nax2.legend()\nplt.tight_layout()\nplt.show()\n",[5321,17228,17229,17239,17249,17253,17265,17271,17275,17288,17305,17309,17314,17319,17324,17328,17339,17361,17383,17387,17392,17402,17412,17416,17421,17426,17430,17445,17479,17512,17516,17521,17531,17535,17559,17588,17630,17671,17695,17699,17703,17741,17790,17841,17865,17869,17873],{"__ignoreMap":5319},[5324,17230,17231,17233,17235,17237],{"class":5326,"line":5327},[5324,17232,5331],{"class":5330},[5324,17234,5335],{"class":5334},[5324,17236,5338],{"class":5330},[5324,17238,5341],{"class":5334},[5324,17240,17241,17243,17245,17247],{"class":5326,"line":5344},[5324,17242,8535],{"class":5330},[5324,17244,8538],{"class":5334},[5324,17246,5331],{"class":5330},[5324,17248,8543],{"class":5334},[5324,17250,17251],{"class":5326,"line":5357},[5324,17252,5361],{"emptyLinePlaceholder":5360},[5324,17254,17255,17257,17259,17261,17263],{"class":5326,"line":5364},[5324,17256,5367],{"class":5334},[5324,17258,5371],{"class":5370},[5324,17260,5374],{"class":5334},[5324,17262,5378],{"class":5377},[5324,17264,5381],{"class":5334},[5324,17266,17267,17269],{"class":5326,"line":5384},[5324,17268,9407],{"class":5334},[5324,17270,9410],{"class":5377},[5324,17272,17273],{"class":5326,"line":5389},[5324,17274,5361],{"emptyLinePlaceholder":5360},[5324,17276,17277,17280,17282,17284,17286],{"class":5326,"line":5396},[5324,17278,17279],{"class":5334},"x = np.linspace(-",[5324,17281,10595],{"class":5377},[5324,17283,5405],{"class":5334},[5324,17285,10595],{"class":5377},[5324,17287,10559],{"class":5334},[5324,17289,17290,17293,17295,17297,17299,17301,17303],{"class":5326,"line":5422},[5324,17291,17292],{"class":5334},"y = x**",[5324,17294,10595],{"class":5377},[5324,17296,10570],{"class":5334},[5324,17298,5434],{"class":5377},[5324,17300,5405],{"class":5334},[5324,17302,10595],{"class":5377},[5324,17304,10559],{"class":5334},[5324,17306,17307],{"class":5326,"line":5455},[5324,17308,5361],{"emptyLinePlaceholder":5360},[5324,17310,17311],{"class":5326,"line":5460},[5324,17312,17313],{"class":5392},"# 1. Початковий розрахунок\n",[5324,17315,17316],{"class":5326,"line":5466},[5324,17317,17318],{"class":5334},"r_clean, _ = stats.pearsonr(x, y)\n",[5324,17320,17321],{"class":5326,"line":5488},[5324,17322,17323],{"class":5334},"rho_clean, _ = stats.spearmanr(x, y)\n",[5324,17325,17326],{"class":5326,"line":5535},[5324,17327,5361],{"emptyLinePlaceholder":5360},[5324,17329,17330,17332,17334,17337],{"class":5326,"line":5556},[5324,17331,5642],{"class":5641},[5324,17333,5645],{"class":5334},[5324,17335,17336],{"class":5519},"\"=== 1. Чисті нелінійні монотонні дані ===\"",[5324,17338,5381],{"class":5334},[5324,17340,17341,17343,17345,17347,17350,17352,17355,17357,17359],{"class":5326,"line":5575},[5324,17342,5642],{"class":5641},[5324,17344,5645],{"class":5334},[5324,17346,5661],{"class":5660},[5324,17348,17349],{"class":5519},"\"Пірсон r:  ",[5324,17351,5667],{"class":5660},[5324,17353,17354],{"class":5334},"r_clean",[5324,17356,8754],{"class":5660},[5324,17358,5732],{"class":5519},[5324,17360,5381],{"class":5334},[5324,17362,17363,17365,17367,17369,17372,17374,17377,17379,17381],{"class":5326,"line":5612},[5324,17364,5642],{"class":5641},[5324,17366,5645],{"class":5334},[5324,17368,5661],{"class":5660},[5324,17370,17371],{"class":5519},"\"Спірмен ρ: ",[5324,17373,5667],{"class":5660},[5324,17375,17376],{"class":5334},"rho_clean",[5324,17378,8754],{"class":5660},[5324,17380,5732],{"class":5519},[5324,17382,5381],{"class":5334},[5324,17384,17385],{"class":5326,"line":5627},[5324,17386,5361],{"emptyLinePlaceholder":5360},[5324,17388,17389],{"class":5326,"line":5633},[5324,17390,17391],{"class":5392},"# 2. Додаємо один екстремальний викид у кінець масиву\n",[5324,17393,17394,17397,17400],{"class":5326,"line":5638},[5324,17395,17396],{"class":5334},"x_out = np.append(x, ",[5324,17398,17399],{"class":5377},"3.0",[5324,17401,5381],{"class":5334},[5324,17403,17404,17407,17410],{"class":5326,"line":5653},[5324,17405,17406],{"class":5334},"y_out = np.append(y, -",[5324,17408,17409],{"class":5377},"100.0",[5324,17411,5381],{"class":5334},[5324,17413,17414],{"class":5326,"line":5691},[5324,17415,5361],{"emptyLinePlaceholder":5360},[5324,17417,17418],{"class":5326,"line":5725},[5324,17419,17420],{"class":5334},"r_out, _ = stats.pearsonr(x_out, y_out)\n",[5324,17422,17423],{"class":5326,"line":5743},[5324,17424,17425],{"class":5334},"rho_out, _ = stats.spearmanr(x_out, y_out)\n",[5324,17427,17428],{"class":5326,"line":6150},[5324,17429,5361],{"emptyLinePlaceholder":5360},[5324,17431,17432,17434,17436,17438,17440,17443],{"class":5326,"line":7370},[5324,17433,5642],{"class":5641},[5324,17435,5645],{"class":5334},[5324,17437,5732],{"class":5519},[5324,17439,5735],{"class":5584},[5324,17441,17442],{"class":5519},"=== 2. Дані з одним грубим викидом (3.0, -100.0) ===\"",[5324,17444,5381],{"class":5334},[5324,17446,17447,17449,17451,17453,17455,17457,17460,17462,17465,17467,17470,17473,17475,17477],{"class":5326,"line":7375},[5324,17448,5642],{"class":5641},[5324,17450,5645],{"class":5334},[5324,17452,5661],{"class":5660},[5324,17454,17349],{"class":5519},[5324,17456,5667],{"class":5660},[5324,17458,17459],{"class":5334},"r_out",[5324,17461,8754],{"class":5660},[5324,17463,17464],{"class":5519},"  (падіння на ",[5324,17466,5667],{"class":5660},[5324,17468,17469],{"class":5641},"abs",[5324,17471,17472],{"class":5334},"(r_clean - r_out)",[5324,17474,8754],{"class":5660},[5324,17476,16350],{"class":5519},[5324,17478,5381],{"class":5334},[5324,17480,17481,17483,17485,17487,17489,17491,17494,17496,17499,17501,17503,17506,17508,17510],{"class":5326,"line":7381},[5324,17482,5642],{"class":5641},[5324,17484,5645],{"class":5334},[5324,17486,5661],{"class":5660},[5324,17488,17371],{"class":5519},[5324,17490,5667],{"class":5660},[5324,17492,17493],{"class":5334},"rho_out",[5324,17495,8754],{"class":5660},[5324,17497,17498],{"class":5519},"  (падіння всього на ",[5324,17500,5667],{"class":5660},[5324,17502,17469],{"class":5641},[5324,17504,17505],{"class":5334},"(rho_clean - rho_out)",[5324,17507,8754],{"class":5660},[5324,17509,16350],{"class":5519},[5324,17511,5381],{"class":5334},[5324,17513,17514],{"class":5326,"line":7392},[5324,17515,5361],{"emptyLinePlaceholder":5360},[5324,17517,17518],{"class":5326,"line":7397},[5324,17519,17520],{"class":5392},"# 3. Візуалізація стійкості до викидів\n",[5324,17522,17523,17525,17527,17529],{"class":5326,"line":7415},[5324,17524,5331],{"class":5330},[5324,17526,5349],{"class":5334},[5324,17528,5338],{"class":5330},[5324,17530,5354],{"class":5334},[5324,17532,17533],{"class":5326,"line":7501},[5324,17534,5361],{"emptyLinePlaceholder":5360},[5324,17536,17537,17539,17541,17543,17545,17547,17549,17551,17553,17555,17557],{"class":5326,"line":7557},[5324,17538,8912],{"class":5334},[5324,17540,5312],{"class":5377},[5324,17542,5405],{"class":5334},[5324,17544,6334],{"class":5377},[5324,17546,5405],{"class":5334},[5324,17548,5472],{"class":5370},[5324,17550,5475],{"class":5334},[5324,17552,5607],{"class":5377},[5324,17554,5405],{"class":5334},[5324,17556,5439],{"class":5377},[5324,17558,5485],{"class":5334},[5324,17560,17561,17564,17566,17568,17570,17572,17574,17576,17578,17580,17582,17584,17586],{"class":5326,"line":7607},[5324,17562,17563],{"class":5334},"ax1.scatter(x, y, ",[5324,17565,7421],{"class":5370},[5324,17567,5374],{"class":5334},[5324,17569,7575],{"class":5519},[5324,17571,5405],{"class":5334},[5324,17573,5504],{"class":5370},[5324,17575,5374],{"class":5334},[5324,17577,14949],{"class":5377},[5324,17579,5405],{"class":5334},[5324,17581,5494],{"class":5370},[5324,17583,5374],{"class":5334},[5324,17585,10043],{"class":5377},[5324,17587,5381],{"class":5334},[5324,17589,17590,17593,17595,17597,17599,17601,17603,17605,17607,17609,17611,17613,17615,17617,17619,17621,17623,17625,17628],{"class":5326,"line":7657},[5324,17591,17592],{"class":5334},"ax1.plot(x, x**",[5324,17594,10595],{"class":5377},[5324,17596,5405],{"class":5334},[5324,17598,7421],{"class":5370},[5324,17600,5374],{"class":5334},[5324,17602,8993],{"class":5519},[5324,17604,5405],{"class":5334},[5324,17606,8998],{"class":5370},[5324,17608,5374],{"class":5334},[5324,17610,6334],{"class":5377},[5324,17612,5405],{"class":5334},[5324,17614,7431],{"class":5370},[5324,17616,5374],{"class":5334},[5324,17618,7436],{"class":5519},[5324,17620,5405],{"class":5334},[5324,17622,7441],{"class":5370},[5324,17624,5374],{"class":5334},[5324,17626,17627],{"class":5519},"'$y = x^3$'",[5324,17629,5381],{"class":5334},[5324,17631,17632,17634,17636,17639,17641,17644,17646,17648,17650,17653,17655,17657,17659,17661,17663,17665,17667,17669],{"class":5326,"line":7686},[5324,17633,9030],{"class":5334},[5324,17635,5661],{"class":5660},[5324,17637,17638],{"class":5519},"'Без викидів:",[5324,17640,5735],{"class":5584},[5324,17642,17643],{"class":5519},"Пірсон r = ",[5324,17645,5667],{"class":5660},[5324,17647,17354],{"class":5334},[5324,17649,8847],{"class":5660},[5324,17651,17652],{"class":5519},", Спірмен ρ = ",[5324,17654,5667],{"class":5660},[5324,17656,17376],{"class":5334},[5324,17658,8847],{"class":5660},[5324,17660,9193],{"class":5519},[5324,17662,5405],{"class":5334},[5324,17664,5593],{"class":5370},[5324,17666,5374],{"class":5334},[5324,17668,5598],{"class":5519},[5324,17670,5381],{"class":5334},[5324,17672,17673,17675,17677,17679,17681,17683,17685,17687,17689,17691,17693],{"class":5326,"line":7696},[5324,17674,9071],{"class":5334},[5324,17676,7711],{"class":5660},[5324,17678,5405],{"class":5334},[5324,17680,7431],{"class":5370},[5324,17682,5374],{"class":5334},[5324,17684,7720],{"class":5519},[5324,17686,5405],{"class":5334},[5324,17688,5494],{"class":5370},[5324,17690,5374],{"class":5334},[5324,17692,5530],{"class":5377},[5324,17694,5381],{"class":5334},[5324,17696,17697],{"class":5326,"line":7706},[5324,17698,9097],{"class":5334},[5324,17700,17701],{"class":5326,"line":7733},[5324,17702,5361],{"emptyLinePlaceholder":5360},[5324,17704,17705,17708,17710,17713,17715,17717,17719,17721,17723,17725,17727,17729,17731,17733,17735,17737,17739],{"class":5326,"line":7739},[5324,17706,17707],{"class":5334},"ax2.scatter(x_out[:-",[5324,17709,5312],{"class":5377},[5324,17711,17712],{"class":5334},"], y_out[:-",[5324,17714,5312],{"class":5377},[5324,17716,14956],{"class":5334},[5324,17718,7421],{"class":5370},[5324,17720,5374],{"class":5334},[5324,17722,7575],{"class":5519},[5324,17724,5405],{"class":5334},[5324,17726,5504],{"class":5370},[5324,17728,5374],{"class":5334},[5324,17730,14949],{"class":5377},[5324,17732,5405],{"class":5334},[5324,17734,5494],{"class":5370},[5324,17736,5374],{"class":5334},[5324,17738,10043],{"class":5377},[5324,17740,5381],{"class":5334},[5324,17742,17743,17746,17748,17751,17753,17756,17758,17760,17762,17764,17766,17768,17770,17772,17775,17777,17779,17781,17783,17785,17788],{"class":5326,"line":7745},[5324,17744,17745],{"class":5334},"ax2.scatter([x_out[-",[5324,17747,5312],{"class":5377},[5324,17749,17750],{"class":5334},"]], [y_out[-",[5324,17752,5312],{"class":5377},[5324,17754,17755],{"class":5334},"]], ",[5324,17757,7421],{"class":5370},[5324,17759,5374],{"class":5334},[5324,17761,7426],{"class":5519},[5324,17763,5405],{"class":5334},[5324,17765,5504],{"class":5370},[5324,17767,5374],{"class":5334},[5324,17769,16922],{"class":5377},[5324,17771,5405],{"class":5334},[5324,17773,17774],{"class":5370},"marker",[5324,17776,5374],{"class":5334},[5324,17778,9668],{"class":5519},[5324,17780,5405],{"class":5334},[5324,17782,7441],{"class":5370},[5324,17784,5374],{"class":5334},[5324,17786,17787],{"class":5519},"'Викид (3, -100)'",[5324,17789,5381],{"class":5334},[5324,17791,17792,17794,17796,17799,17801,17804,17806,17808,17810,17813,17815,17817,17819,17822,17824,17826,17828,17830,17832,17834,17836,17839],{"class":5326,"line":9046},[5324,17793,9254],{"class":5334},[5324,17795,5661],{"class":5660},[5324,17797,17798],{"class":5519},"'З викидом:",[5324,17800,5735],{"class":5584},[5324,17802,17803],{"class":5519},"Пірсон обвалився до ",[5324,17805,5667],{"class":5660},[5324,17807,17459],{"class":5334},[5324,17809,8847],{"class":5660},[5324,17811,17812],{"class":5519},", але Спірмен ρ = ",[5324,17814,5667],{"class":5660},[5324,17816,17493],{"class":5334},[5324,17818,8847],{"class":5660},[5324,17820,17821],{"class":5519},"!'",[5324,17823,5405],{"class":5334},[5324,17825,5593],{"class":5370},[5324,17827,5374],{"class":5334},[5324,17829,5598],{"class":5519},[5324,17831,5405],{"class":5334},[5324,17833,7421],{"class":5370},[5324,17835,5374],{"class":5334},[5324,17837,17838],{"class":5519},"'#991b1b'",[5324,17840,5381],{"class":5334},[5324,17842,17843,17845,17847,17849,17851,17853,17855,17857,17859,17861,17863],{"class":5326,"line":9057},[5324,17844,9295],{"class":5334},[5324,17846,7711],{"class":5660},[5324,17848,5405],{"class":5334},[5324,17850,7431],{"class":5370},[5324,17852,5374],{"class":5334},[5324,17854,7720],{"class":5519},[5324,17856,5405],{"class":5334},[5324,17858,5494],{"class":5370},[5324,17860,5374],{"class":5334},[5324,17862,5530],{"class":5377},[5324,17864,5381],{"class":5334},[5324,17866,17867],{"class":5326,"line":9068},[5324,17868,9321],{"class":5334},[5324,17870,17871],{"class":5326,"line":9094},[5324,17872,7742],{"class":5334},[5324,17874,17875],{"class":5326,"line":9100},[5324,17876,5630],{"class":5334},[15261,17878,17879],{},[5314,17880,17883],{"className":17881,"code":17882,"language":5770},[5768],"=== 1. Чисті нелінійні монотонні дані ===\nПірсон r:  0.8884\nСпірмен ρ: 0.9050\n\n=== 2. Дані з одним грубим викидом (3.0, -100.0) ===\nПірсон r:  0.7258  (падіння на 0.1626)\nСпірмен ρ: 0.8878  (падіння всього на 0.0172)\n",[5321,17884,17882],{"__ignoreMap":5319},[5278,17886,17887],{},[5759,17888],{"alt":17889,"className":17890,"src":17891},"Порівняння стійкості до викиду: коефіцієнт Пірсона зазнає краху, тоді як ранг-орієнтований Спірмен зберігає стійкість",[5763],"\u002Fimages\u002Fai-python\u002Fstatistics-basics\u002Fcorrelation\u002Ftask-2-3-spearman-robustness.png",[5278,17893,17894,17896,17897,17900,17901,17903,17904,17907],{},[5217,17895,15273],{},"\nКоефіцієнт Пірсона використовує сирі числові відхилення у квадратах, тому точка зі значенням ",[5895,17898],{"tex":17899,":inline":5898},"y = -100"," внесла колосальний від'ємний внесок у чисельник коваріації, обваливши ",[5895,17902],{"tex":7815,":inline":5898}," на 0.16. Натомість для Спірмена точка ",[5895,17905],{"tex":17906,":inline":5898},"-100"," просто стала 1-м рангом у відсортованому списку серед 101 елемента, не завдавши відчутної шкоди ранговому порядку решти 100 спостережень.",[5270,17909],{},[5306,17911,17913],{"id":17912},"рівень-3-проєктні-завдання","Рівень 3: Проєктні завдання",[8174,17915,17916,18885,19558],{},[8177,17917,17919,17926,17943],{"icon":3063,"label":17918},"Завдання 3.1: Комплексний утилітарний модуль CorrelationExplorer",[5278,17920,17921,17922,17925],{},"Розробіть Python-клас або функцію ",[5321,17923,17924],{},"correlation_explorer(df, max_display=5, vif_threshold=5.0)",", яка виконує повноцінний EDA-аудит взаємозв'язків у табличних даних:",[5779,17927,17928,17931,17934,17937,17940],{},[5201,17929,17930],{},"Автоматично фільтрує лише числові стовпці.",[5201,17932,17933],{},"Обчислює матрицю кореляцій і будує естетичний heatmap.",[5201,17935,17936],{},"Друкує топ-N найсильніших позитивних зв'язків.",[5201,17938,17939],{},"Друкує топ-N найсильніших негативних зв'язків.",[5201,17941,17942],{},"Попереджає про мультиколінеарність між ознаками.",[8177,17944,17945,18870,18878],{"icon":14909,"label":14910},[5314,17946,17948],{"className":5316,"code":17947,"language":5318,"meta":5319,"style":5319},"import numpy as np\nimport pandas as pd\nimport seaborn as sns\nimport matplotlib.pyplot as plt\n\ndef correlation_explorer(df: pd.DataFrame, max_display: int = 3, threshold: float = 0.70):\n    num_df = df.select_dtypes(include=[np.number])\n    if num_df.shape[1] \u003C 2:\n        print(\"Недостатньо числових ознак для аналізу кореляції.\")\n        return\n\n    corr = num_df.corr()\n\n    # Збираємо всі унікальні позадіагональні пари\n    pairs = []\n    cols = corr.columns\n    for i in range(len(cols)):\n        for j in range(i + 1, len(cols)):\n            pairs.append((cols[i], cols[j], corr.iloc[i, j]))\n\n    pairs_sorted = sorted(pairs, key=lambda x: x[2], reverse=True)\n    top_pos = [p for p in pairs_sorted if p[2] > 0][:max_display]\n    top_neg = sorted([p for p in pairs if p[2] \u003C 0], key=lambda x: x[2])[:max_display]\n    high_collinear = [p for p in pairs if abs(p[2]) >= threshold]\n\n    print(\"=\" * 60)\n    print(\" 🔎 ЗВІТ МОДУЛЯ CORRELATION EXPLORER\")\n    print(\"=\" * 60)\n\n    print(f\"\\n📈 ТОП-{len(top_pos)} ПОЗИТИВНИХ ЗВ'ЯЗКІВ:\")\n    for a, b, r in top_pos:\n        print(f\"  • {a:\u003C20} ↔ {b:\u003C20} : r = {r:+.3f}\")\n\n    print(f\"\\n📉 ТОП-{len(top_neg)} НЕГАТИВНИХ ЗВ'ЯЗКІВ:\")\n    for a, b, r in top_neg:\n        print(f\"  • {a:\u003C20} ↔ {b:\u003C20} : r = {r:+.3f}\")\n\n    print(f\"\\n⚠ ПОТЕНЦІЙНА МУЛЬТИКОЛІНЕАРНІСТЬ (|r| ≥ {threshold}):\")\n    if high_collinear:\n        for a, b, r in high_collinear:\n            print(f\"  [!] Пара ({a}, {b}) має |r| = {abs(r):.3f} → Ризик нестабільності моделі!\")\n    else:\n        print(\"  ✓ Критичної мультиколінеарності серед предикторів не виявлено.\")\n    print(\"=\" * 60)\n\n    plt.figure(figsize=(8, 6.5))\n    sns.heatmap(corr, annot=True, fmt='.2f', cmap='coolwarm', center=0, vmin=-1, vmax=1)\n    plt.title('CorrelationExplorer: Heatmap', fontweight='bold')\n    plt.tight_layout()\n    plt.show()\n\n# Демонстрація роботи\nrng = np.random.default_rng(seed=42)\ndemo_df = pd.DataFrame({\n    'sales': rng.normal(100, 15, 80),\n    'ad_spend': rng.normal(50, 10, 80),\n    'discount': rng.uniform(0, 0.3, 80),\n    'complaints': rng.poisson(4, 80)\n})\ndemo_df['sales'] += 1.2 * demo_df['ad_spend'] - 30 * demo_df['complaints']\n\ncorrelation_explorer(demo_df)\n",[5321,17949,17950,17960,17970,17980,17990,17994,18033,18042,18058,18070,18075,18079,18084,18088,18093,18098,18102,18118,18138,18143,18147,18183,18213,18259,18284,18288,18304,18315,18329,18333,18362,18374,18416,18420,18449,18460,18496,18500,18526,18533,18543,18585,18591,18602,18616,18620,18638,18691,18709,18714,18719,18723,18728,18740,18745,18765,18784,18804,18821,18826,18859,18864],{"__ignoreMap":5319},[5324,17951,17952,17954,17956,17958],{"class":5326,"line":5327},[5324,17953,5331],{"class":5330},[5324,17955,5335],{"class":5334},[5324,17957,5338],{"class":5330},[5324,17959,5341],{"class":5334},[5324,17961,17962,17964,17966,17968],{"class":5326,"line":5344},[5324,17963,5331],{"class":5330},[5324,17965,10486],{"class":5334},[5324,17967,5338],{"class":5330},[5324,17969,10491],{"class":5334},[5324,17971,17972,17974,17976,17978],{"class":5326,"line":5357},[5324,17973,5331],{"class":5330},[5324,17975,10508],{"class":5334},[5324,17977,5338],{"class":5330},[5324,17979,10513],{"class":5334},[5324,17981,17982,17984,17986,17988],{"class":5326,"line":5364},[5324,17983,5331],{"class":5330},[5324,17985,5349],{"class":5334},[5324,17987,5338],{"class":5330},[5324,17989,5354],{"class":5334},[5324,17991,17992],{"class":5326,"line":5384},[5324,17993,5361],{"emptyLinePlaceholder":5360},[5324,17995,17996,17998,18001,18003,18005,18007,18010,18012,18015,18017,18019,18021,18023,18025,18027,18029,18031],{"class":5326,"line":5389},[5324,17997,9419],{"class":5660},[5324,17999,18000],{"class":5641}," correlation_explorer",[5324,18002,5645],{"class":5334},[5324,18004,16581],{"class":5370},[5324,18006,16584],{"class":5334},[5324,18008,18009],{"class":5370},"max_display",[5324,18011,10438],{"class":5334},[5324,18013,18014],{"class":10013},"int",[5324,18016,7466],{"class":5334},[5324,18018,10595],{"class":5377},[5324,18020,5405],{"class":5334},[5324,18022,16587],{"class":5370},[5324,18024,10438],{"class":5334},[5324,18026,14964],{"class":10013},[5324,18028,7466],{"class":5334},[5324,18030,15474],{"class":5377},[5324,18032,9438],{"class":5334},[5324,18034,18035,18038,18040],{"class":5326,"line":5396},[5324,18036,18037],{"class":5334},"    num_df = df.select_dtypes(",[5324,18039,16605],{"class":5370},[5324,18041,16608],{"class":5334},[5324,18043,18044,18046,18049,18051,18054,18056],{"class":5326,"line":5422},[5324,18045,11771],{"class":5330},[5324,18047,18048],{"class":5334}," num_df.shape[",[5324,18050,5312],{"class":5377},[5324,18052,18053],{"class":5334},"] \u003C ",[5324,18055,6334],{"class":5377},[5324,18057,7948],{"class":5334},[5324,18059,18060,18063,18065,18068],{"class":5326,"line":5455},[5324,18061,18062],{"class":5641},"        print",[5324,18064,5645],{"class":5334},[5324,18066,18067],{"class":5519},"\"Недостатньо числових ознак для аналізу кореляції.\"",[5324,18069,5381],{"class":5334},[5324,18071,18072],{"class":5326,"line":5460},[5324,18073,18074],{"class":5330},"        return\n",[5324,18076,18077],{"class":5326,"line":5466},[5324,18078,5361],{"emptyLinePlaceholder":5360},[5324,18080,18081],{"class":5326,"line":5488},[5324,18082,18083],{"class":5334},"    corr = num_df.corr()\n",[5324,18085,18086],{"class":5326,"line":5535},[5324,18087,5361],{"emptyLinePlaceholder":5360},[5324,18089,18090],{"class":5326,"line":5556},[5324,18091,18092],{"class":5392},"    # Збираємо всі унікальні позадіагональні пари\n",[5324,18094,18095],{"class":5326,"line":5575},[5324,18096,18097],{"class":5334},"    pairs = []\n",[5324,18099,18100],{"class":5326,"line":5612},[5324,18101,16618],{"class":5334},[5324,18103,18104,18106,18108,18110,18112,18114,18116],{"class":5326,"line":5627},[5324,18105,11704],{"class":5330},[5324,18107,13664],{"class":5334},[5324,18109,9558],{"class":5330},[5324,18111,13669],{"class":5641},[5324,18113,5645],{"class":5334},[5324,18115,7185],{"class":5641},[5324,18117,16208],{"class":5334},[5324,18119,18120,18122,18124,18126,18128,18130,18132,18134,18136],{"class":5326,"line":5633},[5324,18121,16648],{"class":5330},[5324,18123,13683],{"class":5334},[5324,18125,9558],{"class":5330},[5324,18127,13669],{"class":5641},[5324,18129,13690],{"class":5334},[5324,18131,5312],{"class":5377},[5324,18133,5405],{"class":5334},[5324,18135,7185],{"class":5641},[5324,18137,16208],{"class":5334},[5324,18139,18140],{"class":5326,"line":5638},[5324,18141,18142],{"class":5334},"            pairs.append((cols[i], cols[j], corr.iloc[i, j]))\n",[5324,18144,18145],{"class":5326,"line":5653},[5324,18146,5361],{"emptyLinePlaceholder":5360},[5324,18148,18149,18152,18155,18158,18160,18162,18164,18167,18170,18172,18174,18177,18179,18181],{"class":5326,"line":5691},[5324,18150,18151],{"class":5334},"    pairs_sorted = ",[5324,18153,18154],{"class":5641},"sorted",[5324,18156,18157],{"class":5334},"(pairs, ",[5324,18159,16245],{"class":5370},[5324,18161,5374],{"class":5334},[5324,18163,16250],{"class":5660},[5324,18165,18166],{"class":5370}," x",[5324,18168,18169],{"class":5334},": x[",[5324,18171,6334],{"class":5377},[5324,18173,14956],{"class":5334},[5324,18175,18176],{"class":5370},"reverse",[5324,18178,5374],{"class":5334},[5324,18180,7711],{"class":5660},[5324,18182,5381],{"class":5334},[5324,18184,18185,18188,18190,18193,18195,18198,18200,18203,18205,18208,18210],{"class":5326,"line":5725},[5324,18186,18187],{"class":5334},"    top_pos = [p ",[5324,18189,9552],{"class":5330},[5324,18191,18192],{"class":5334}," p ",[5324,18194,9558],{"class":5330},[5324,18196,18197],{"class":5334}," pairs_sorted ",[5324,18199,13649],{"class":5330},[5324,18201,18202],{"class":5334}," p[",[5324,18204,6334],{"class":5377},[5324,18206,18207],{"class":5334},"] > ",[5324,18209,5434],{"class":5377},[5324,18211,18212],{"class":5334},"][:max_display]\n",[5324,18214,18215,18218,18220,18223,18225,18227,18229,18232,18234,18236,18238,18240,18242,18244,18246,18248,18250,18252,18254,18256],{"class":5326,"line":5743},[5324,18216,18217],{"class":5334},"    top_neg = ",[5324,18219,18154],{"class":5641},[5324,18221,18222],{"class":5334},"([p ",[5324,18224,9552],{"class":5330},[5324,18226,18192],{"class":5334},[5324,18228,9558],{"class":5330},[5324,18230,18231],{"class":5334}," pairs ",[5324,18233,13649],{"class":5330},[5324,18235,18202],{"class":5334},[5324,18237,6334],{"class":5377},[5324,18239,18053],{"class":5334},[5324,18241,5434],{"class":5377},[5324,18243,14956],{"class":5334},[5324,18245,16245],{"class":5370},[5324,18247,5374],{"class":5334},[5324,18249,16250],{"class":5660},[5324,18251,18166],{"class":5370},[5324,18253,18169],{"class":5334},[5324,18255,6334],{"class":5377},[5324,18257,18258],{"class":5334},"])[:max_display]\n",[5324,18260,18261,18264,18266,18268,18270,18272,18274,18276,18279,18281],{"class":5326,"line":6150},[5324,18262,18263],{"class":5334},"    high_collinear = [p ",[5324,18265,9552],{"class":5330},[5324,18267,18192],{"class":5334},[5324,18269,9558],{"class":5330},[5324,18271,18231],{"class":5334},[5324,18273,13649],{"class":5330},[5324,18275,13711],{"class":5641},[5324,18277,18278],{"class":5334},"(p[",[5324,18280,6334],{"class":5377},[5324,18282,18283],{"class":5334},"]) >= threshold]\n",[5324,18285,18286],{"class":5326,"line":7370},[5324,18287,5361],{"emptyLinePlaceholder":5360},[5324,18289,18290,18292,18294,18297,18300,18302],{"class":5326,"line":7375},[5324,18291,17095],{"class":5641},[5324,18293,5645],{"class":5334},[5324,18295,18296],{"class":5519},"\"=\"",[5324,18298,18299],{"class":5334}," * ",[5324,18301,6372],{"class":5377},[5324,18303,5381],{"class":5334},[5324,18305,18306,18308,18310,18313],{"class":5326,"line":7381},[5324,18307,17095],{"class":5641},[5324,18309,5645],{"class":5334},[5324,18311,18312],{"class":5519},"\" 🔎 ЗВІТ МОДУЛЯ CORRELATION EXPLORER\"",[5324,18314,5381],{"class":5334},[5324,18316,18317,18319,18321,18323,18325,18327],{"class":5326,"line":7392},[5324,18318,17095],{"class":5641},[5324,18320,5645],{"class":5334},[5324,18322,18296],{"class":5519},[5324,18324,18299],{"class":5334},[5324,18326,6372],{"class":5377},[5324,18328,5381],{"class":5334},[5324,18330,18331],{"class":5326,"line":7397},[5324,18332,5361],{"emptyLinePlaceholder":5360},[5324,18334,18335,18337,18339,18341,18343,18345,18348,18350,18352,18355,18357,18360],{"class":5326,"line":7415},[5324,18336,17095],{"class":5641},[5324,18338,5645],{"class":5334},[5324,18340,5661],{"class":5660},[5324,18342,5732],{"class":5519},[5324,18344,5735],{"class":5584},[5324,18346,18347],{"class":5519},"📈 ТОП-",[5324,18349,5667],{"class":5660},[5324,18351,7185],{"class":5641},[5324,18353,18354],{"class":5334},"(top_pos)",[5324,18356,13739],{"class":5660},[5324,18358,18359],{"class":5519}," ПОЗИТИВНИХ ЗВ'ЯЗКІВ:\"",[5324,18361,5381],{"class":5334},[5324,18363,18364,18366,18369,18371],{"class":5326,"line":7501},[5324,18365,11704],{"class":5330},[5324,18367,18368],{"class":5334}," a, b, r ",[5324,18370,9558],{"class":5330},[5324,18372,18373],{"class":5334}," top_pos:\n",[5324,18375,18376,18378,18380,18382,18385,18387,18390,18393,18395,18397,18400,18402,18405,18407,18409,18412,18414],{"class":5326,"line":7557},[5324,18377,18062],{"class":5641},[5324,18379,5645],{"class":5334},[5324,18381,5661],{"class":5660},[5324,18383,18384],{"class":5519},"\"  • ",[5324,18386,5667],{"class":5660},[5324,18388,18389],{"class":5334},"a",[5324,18391,18392],{"class":5660},":\u003C20}",[5324,18394,13742],{"class":5519},[5324,18396,5667],{"class":5660},[5324,18398,18399],{"class":5334},"b",[5324,18401,18392],{"class":5660},[5324,18403,18404],{"class":5519}," : r = ",[5324,18406,5667],{"class":5660},[5324,18408,7815],{"class":5334},[5324,18410,18411],{"class":5660},":+.3f}",[5324,18413,5732],{"class":5519},[5324,18415,5381],{"class":5334},[5324,18417,18418],{"class":5326,"line":7607},[5324,18419,5361],{"emptyLinePlaceholder":5360},[5324,18421,18422,18424,18426,18428,18430,18432,18435,18437,18439,18442,18444,18447],{"class":5326,"line":7657},[5324,18423,17095],{"class":5641},[5324,18425,5645],{"class":5334},[5324,18427,5661],{"class":5660},[5324,18429,5732],{"class":5519},[5324,18431,5735],{"class":5584},[5324,18433,18434],{"class":5519},"📉 ТОП-",[5324,18436,5667],{"class":5660},[5324,18438,7185],{"class":5641},[5324,18440,18441],{"class":5334},"(top_neg)",[5324,18443,13739],{"class":5660},[5324,18445,18446],{"class":5519}," НЕГАТИВНИХ ЗВ'ЯЗКІВ:\"",[5324,18448,5381],{"class":5334},[5324,18450,18451,18453,18455,18457],{"class":5326,"line":7686},[5324,18452,11704],{"class":5330},[5324,18454,18368],{"class":5334},[5324,18456,9558],{"class":5330},[5324,18458,18459],{"class":5334}," top_neg:\n",[5324,18461,18462,18464,18466,18468,18470,18472,18474,18476,18478,18480,18482,18484,18486,18488,18490,18492,18494],{"class":5326,"line":7696},[5324,18463,18062],{"class":5641},[5324,18465,5645],{"class":5334},[5324,18467,5661],{"class":5660},[5324,18469,18384],{"class":5519},[5324,18471,5667],{"class":5660},[5324,18473,18389],{"class":5334},[5324,18475,18392],{"class":5660},[5324,18477,13742],{"class":5519},[5324,18479,5667],{"class":5660},[5324,18481,18399],{"class":5334},[5324,18483,18392],{"class":5660},[5324,18485,18404],{"class":5519},[5324,18487,5667],{"class":5660},[5324,18489,7815],{"class":5334},[5324,18491,18411],{"class":5660},[5324,18493,5732],{"class":5519},[5324,18495,5381],{"class":5334},[5324,18497,18498],{"class":5326,"line":7706},[5324,18499,5361],{"emptyLinePlaceholder":5360},[5324,18501,18502,18504,18506,18508,18510,18512,18515,18517,18519,18521,18524],{"class":5326,"line":7733},[5324,18503,17095],{"class":5641},[5324,18505,5645],{"class":5334},[5324,18507,5661],{"class":5660},[5324,18509,5732],{"class":5519},[5324,18511,5735],{"class":5584},[5324,18513,18514],{"class":5519},"⚠ ПОТЕНЦІЙНА МУЛЬТИКОЛІНЕАРНІСТЬ (|r| ≥ ",[5324,18516,5667],{"class":5660},[5324,18518,16587],{"class":5334},[5324,18520,13739],{"class":5660},[5324,18522,18523],{"class":5519},"):\"",[5324,18525,5381],{"class":5334},[5324,18527,18528,18530],{"class":5326,"line":7739},[5324,18529,11771],{"class":5330},[5324,18531,18532],{"class":5334}," high_collinear:\n",[5324,18534,18535,18537,18539,18541],{"class":5326,"line":7745},[5324,18536,16648],{"class":5330},[5324,18538,18368],{"class":5334},[5324,18540,9558],{"class":5330},[5324,18542,18532],{"class":5334},[5324,18544,18545,18547,18549,18551,18554,18556,18558,18560,18562,18564,18566,18568,18571,18573,18575,18578,18580,18583],{"class":5326,"line":9046},[5324,18546,13724],{"class":5641},[5324,18548,5645],{"class":5334},[5324,18550,5661],{"class":5660},[5324,18552,18553],{"class":5519},"\"  [!] Пара (",[5324,18555,5667],{"class":5660},[5324,18557,18389],{"class":5334},[5324,18559,13739],{"class":5660},[5324,18561,5405],{"class":5519},[5324,18563,5667],{"class":5660},[5324,18565,18399],{"class":5334},[5324,18567,13739],{"class":5660},[5324,18569,18570],{"class":5519},") має |r| = ",[5324,18572,5667],{"class":5660},[5324,18574,17469],{"class":5641},[5324,18576,18577],{"class":5334},"(r)",[5324,18579,8847],{"class":5660},[5324,18581,18582],{"class":5519}," → Ризик нестабільності моделі!\"",[5324,18584,5381],{"class":5334},[5324,18586,18587,18589],{"class":5326,"line":9057},[5324,18588,11968],{"class":5330},[5324,18590,7948],{"class":5334},[5324,18592,18593,18595,18597,18600],{"class":5326,"line":9068},[5324,18594,18062],{"class":5641},[5324,18596,5645],{"class":5334},[5324,18598,18599],{"class":5519},"\"  ✓ Критичної мультиколінеарності серед предикторів не виявлено.\"",[5324,18601,5381],{"class":5334},[5324,18603,18604,18606,18608,18610,18612,18614],{"class":5326,"line":9094},[5324,18605,17095],{"class":5641},[5324,18607,5645],{"class":5334},[5324,18609,18296],{"class":5519},[5324,18611,18299],{"class":5334},[5324,18613,6372],{"class":5377},[5324,18615,5381],{"class":5334},[5324,18617,18618],{"class":5326,"line":9100},[5324,18619,5361],{"emptyLinePlaceholder":5360},[5324,18621,18622,18625,18627,18629,18631,18633,18636],{"class":5326,"line":9105},[5324,18623,18624],{"class":5334},"    plt.figure(",[5324,18626,5472],{"class":5370},[5324,18628,5475],{"class":5334},[5324,18630,6436],{"class":5377},[5324,18632,5405],{"class":5334},[5324,18634,18635],{"class":5377},"6.5",[5324,18637,5485],{"class":5334},[5324,18639,18640,18643,18645,18647,18649,18651,18653,18655,18657,18659,18661,18663,18665,18667,18669,18671,18673,18675,18677,18679,18681,18683,18685,18687,18689],{"class":5326,"line":9137},[5324,18641,18642],{"class":5334},"    sns.heatmap(corr, ",[5324,18644,10783],{"class":5370},[5324,18646,5374],{"class":5334},[5324,18648,7711],{"class":5660},[5324,18650,5405],{"class":5334},[5324,18652,10792],{"class":5370},[5324,18654,5374],{"class":5334},[5324,18656,10797],{"class":5519},[5324,18658,5405],{"class":5334},[5324,18660,10802],{"class":5370},[5324,18662,5374],{"class":5334},[5324,18664,10807],{"class":5519},[5324,18666,5405],{"class":5334},[5324,18668,6288],{"class":5370},[5324,18670,5374],{"class":5334},[5324,18672,5434],{"class":5377},[5324,18674,5405],{"class":5334},[5324,18676,10820],{"class":5370},[5324,18678,10823],{"class":5334},[5324,18680,5312],{"class":5377},[5324,18682,5405],{"class":5334},[5324,18684,10830],{"class":5370},[5324,18686,5374],{"class":5334},[5324,18688,5312],{"class":5377},[5324,18690,5381],{"class":5334},[5324,18692,18693,18696,18699,18701,18703,18705,18707],{"class":5326,"line":9156},[5324,18694,18695],{"class":5334},"    plt.title(",[5324,18697,18698],{"class":5519},"'CorrelationExplorer: Heatmap'",[5324,18700,5405],{"class":5334},[5324,18702,5593],{"class":5370},[5324,18704,5374],{"class":5334},[5324,18706,5598],{"class":5519},[5324,18708,5381],{"class":5334},[5324,18710,18711],{"class":5326,"line":9198},[5324,18712,18713],{"class":5334},"    plt.tight_layout()\n",[5324,18715,18716],{"class":5326,"line":9225},[5324,18717,18718],{"class":5334},"    plt.show()\n",[5324,18720,18721],{"class":5326,"line":9251},[5324,18722,5361],{"emptyLinePlaceholder":5360},[5324,18724,18725],{"class":5326,"line":9270},[5324,18726,18727],{"class":5392},"# Демонстрація роботи\n",[5324,18729,18730,18732,18734,18736,18738],{"class":5326,"line":9281},[5324,18731,5367],{"class":5334},[5324,18733,5371],{"class":5370},[5324,18735,5374],{"class":5334},[5324,18737,5378],{"class":5377},[5324,18739,5381],{"class":5334},[5324,18741,18742],{"class":5326,"line":9292},[5324,18743,18744],{"class":5334},"demo_df = pd.DataFrame({\n",[5324,18746,18747,18750,18753,18755,18757,18759,18761,18763],{"class":5326,"line":9318},[5324,18748,18749],{"class":5519},"    'sales'",[5324,18751,18752],{"class":5334},": rng.normal(",[5324,18754,5413],{"class":5377},[5324,18756,5405],{"class":5334},[5324,18758,7075],{"class":5377},[5324,18760,5405],{"class":5334},[5324,18762,7128],{"class":5377},[5324,18764,15442],{"class":5334},[5324,18766,18767,18770,18772,18774,18776,18778,18780,18782],{"class":5326,"line":9324},[5324,18768,18769],{"class":5519},"    'ad_spend'",[5324,18771,18752],{"class":5334},[5324,18773,5509],{"class":5377},[5324,18775,5405],{"class":5334},[5324,18777,5408],{"class":5377},[5324,18779,5405],{"class":5334},[5324,18781,7128],{"class":5377},[5324,18783,15442],{"class":5334},[5324,18785,18786,18789,18792,18794,18796,18798,18800,18802],{"class":5326,"line":9329},[5324,18787,18788],{"class":5519},"    'discount'",[5324,18790,18791],{"class":5334},": rng.uniform(",[5324,18793,5434],{"class":5377},[5324,18795,5405],{"class":5334},[5324,18797,5622],{"class":5377},[5324,18799,5405],{"class":5334},[5324,18801,7128],{"class":5377},[5324,18803,15442],{"class":5334},[5324,18805,18807,18810,18813,18815,18817,18819],{"class":5326,"line":18806},58,[5324,18808,18809],{"class":5519},"    'complaints'",[5324,18811,18812],{"class":5334},": rng.poisson(",[5324,18814,6369],{"class":5377},[5324,18816,5405],{"class":5334},[5324,18818,7128],{"class":5377},[5324,18820,5381],{"class":5334},[5324,18822,18824],{"class":5326,"line":18823},59,[5324,18825,10705],{"class":5334},[5324,18827,18829,18832,18835,18838,18841,18844,18847,18850,18852,18854,18857],{"class":5326,"line":18828},60,[5324,18830,18831],{"class":5334},"demo_df[",[5324,18833,18834],{"class":5519},"'sales'",[5324,18836,18837],{"class":5334},"] += ",[5324,18839,18840],{"class":5377},"1.2",[5324,18842,18843],{"class":5334}," * demo_df[",[5324,18845,18846],{"class":5519},"'ad_spend'",[5324,18848,18849],{"class":5334},"] - ",[5324,18851,6512],{"class":5377},[5324,18853,18843],{"class":5334},[5324,18855,18856],{"class":5519},"'complaints'",[5324,18858,8647],{"class":5334},[5324,18860,18862],{"class":5326,"line":18861},61,[5324,18863,5361],{"emptyLinePlaceholder":5360},[5324,18865,18867],{"class":5326,"line":18866},62,[5324,18868,18869],{"class":5334},"correlation_explorer(demo_df)\n",[15261,18871,18872],{},[5314,18873,18876],{"className":18874,"code":18875,"language":5770},[5768],"============================================================\n 🔎 ЗВІТ МОДУЛЯ CORRELATION EXPLORER\n============================================================\n\n📈 ТОП-3 ПОЗИТИВНИХ ЗВ'ЯЗКІВ:\n  • sales                ↔ ad_spend             : r = +0.575\n  • sales                ↔ discount             : r = +0.076\n  • ad_spend             ↔ discount             : r = +0.027\n\n📉 ТОП-3 НЕГАТИВНИХ ЗВ'ЯЗКІВ:\n  • sales                ↔ complaints           : r = -0.767\n  • ad_spend             ↔ complaints           : r = -0.063\n\n⚠ ПОТЕНЦІЙНА МУЛЬТИКОЛІНЕАРНІСТЬ (|r| ≥ 0.70):\n  [!] Пара (sales, complaints) має |r| = 0.767 → Ризик нестабільності моделі!\n============================================================\n",[5321,18877,18875],{"__ignoreMap":5319},[5278,18879,18880],{},[5759,18881],{"alt":18882,"className":18883,"src":18884},"Теплова карта кореляцій бізнес-метрик у модулі CorrelationExplorer",[5763],"\u002Fimages\u002Fai-python\u002Fstatistics-basics\u002Fcorrelation\u002Ftask-3-1-explorer-heatmap.png",[8177,18886,18889,18895,18923],{"icon":18887,"label":18888},"i-lucide-shuffle","Завдання 3.2: Монте-Карло симуляція абсурдних хибних кореляцій (Spurious Drifts)",[5278,18890,18891,18892,5916],{},"Дослідіть феномен хибної регресії Грейнджера-Ньюболда (",[5232,18893,18894],{},"Granger & Newbold",[5779,18896,18897,18907,18914,18920],{},[5201,18898,18899,18900,18903,18904,5812],{},"Згенеруйте 20 незалежних випадкових блукань (",[5232,18901,18902],{},"Random Walks"," \u002F кумулятивних сум білого шуму) тривалістю по 20 часових відліків: ",[5895,18905],{"tex":18906,":inline":5898},"X_t = X_{t-1} + \\varepsilon_t",[5201,18908,18909,18910,18913],{},"Обчисліть кореляційну матрицю між усіма парами (",[5895,18911],{"tex":18912,":inline":5898},"\\binom{20}{2} = 190"," комбінацій).",[5201,18915,18916,18917,5812],{},"Підрахуйте, скільки пар випадкових некорельованих процесів чисто випадково показали штучну «сильну кореляцію» ",[5895,18918],{"tex":18919,":inline":5898},"|r| > 0.75",[5201,18921,18922],{},"Побудуйте часовий графік для пари із найвищим абсурдним коефіцієнтом.",[8177,18924,18925,19530,19538,19545],{"icon":14909,"label":14910},[5314,18926,18928],{"className":5316,"code":18927,"language":5318,"meta":5319,"style":5319},"import numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\n\nrng = np.random.default_rng(seed=42)\nn_series = 20\nn_steps = 20\n\n# 20 незалежних випадкових блукань (кумулятивна сума шуму)\nwalks = np.cumsum(rng.standard_normal((n_steps, n_series)), axis=0)\ncol_names = [f\"Сезон_{i+1}\" for i in range(n_series)]\ndf_walks = pd.DataFrame(walks, columns=col_names)\n\ncorr_walks = df_walks.corr()\n\n# Пошук хибних високих кореляцій\nspurious_pairs = []\nfor i in range(n_series):\n    for j in range(i + 1, n_series):\n        r_val = corr_walks.iloc[i, j]\n        if abs(r_val) >= 0.75:\n            spurious_pairs.append((col_names[i], col_names[j], r_val))\n\nprint(f\"Перевірено незалежних пар процесів: {n_series * (n_series - 1) \u002F\u002F 2}\")\nprint(f\"Кількість хибних пар з |r| >= 0.75: {len(spurious_pairs)}\")\n\n# Сортування за абсолютним значенням\nspurious_pairs.sort(key=lambda x: abs(x[2]), reverse=True)\nbest_pair = spurious_pairs[0]\nprint(f\"\\nНайбільш абсурдний збіг: {best_pair[0]} ↔ {best_pair[1]} з r = {best_pair[2]:.4f}\")\n\n# Візуалізація двох незалежних трендів\ns1, s2 = best_pair[0], best_pair[1]\nplt.figure(figsize=(10, 5))\nplt.plot(df_walks[s1], 'o-', label=f\"{s1} (Випадковий процес 1)\", linewidth=2, color='#2563eb')\nplt.plot(df_walks[s2], 's--', label=f\"{s2} (Випадковий процес 2)\", linewidth=2, color='#ea580c')\nplt.title(f\"Ілюзія причинності: {s1} ↔ {s2}\\nr = {best_pair[2]:.3f} (Повна незалежність систем)\", fontweight='bold')\nplt.xlabel(\"Часовий крок (t)\")\nplt.ylabel(\"Значення кумулятивного стану\")\nplt.legend()\nplt.grid(True, linestyle=':', alpha=0.6)\nplt.tight_layout()\nplt.show()\n",[5321,18929,18930,18940,18950,18960,18964,18976,18984,18991,18995,19000,19013,19046,19057,19061,19066,19070,19075,19080,19093,19110,19115,19128,19133,19137,19166,19190,19194,19199,19232,19241,19296,19300,19305,19319,19335,19380,19425,19476,19485,19494,19498,19522,19526],{"__ignoreMap":5319},[5324,18931,18932,18934,18936,18938],{"class":5326,"line":5327},[5324,18933,5331],{"class":5330},[5324,18935,5335],{"class":5334},[5324,18937,5338],{"class":5330},[5324,18939,5341],{"class":5334},[5324,18941,18942,18944,18946,18948],{"class":5326,"line":5344},[5324,18943,5331],{"class":5330},[5324,18945,10486],{"class":5334},[5324,18947,5338],{"class":5330},[5324,18949,10491],{"class":5334},[5324,18951,18952,18954,18956,18958],{"class":5326,"line":5357},[5324,18953,5331],{"class":5330},[5324,18955,5349],{"class":5334},[5324,18957,5338],{"class":5330},[5324,18959,5354],{"class":5334},[5324,18961,18962],{"class":5326,"line":5364},[5324,18963,5361],{"emptyLinePlaceholder":5360},[5324,18965,18966,18968,18970,18972,18974],{"class":5326,"line":5384},[5324,18967,5367],{"class":5334},[5324,18969,5371],{"class":5370},[5324,18971,5374],{"class":5334},[5324,18973,5378],{"class":5377},[5324,18975,5381],{"class":5334},[5324,18977,18978,18981],{"class":5326,"line":5389},[5324,18979,18980],{"class":5334},"n_series = ",[5324,18982,18983],{"class":5377},"20\n",[5324,18985,18986,18989],{"class":5326,"line":5396},[5324,18987,18988],{"class":5334},"n_steps = ",[5324,18990,18983],{"class":5377},[5324,18992,18993],{"class":5326,"line":5422},[5324,18994,5361],{"emptyLinePlaceholder":5360},[5324,18996,18997],{"class":5326,"line":5455},[5324,18998,18999],{"class":5392},"# 20 незалежних випадкових блукань (кумулятивна сума шуму)\n",[5324,19001,19002,19005,19007,19009,19011],{"class":5326,"line":5460},[5324,19003,19004],{"class":5334},"walks = np.cumsum(rng.standard_normal((n_steps, n_series)), ",[5324,19006,12727],{"class":5370},[5324,19008,5374],{"class":5334},[5324,19010,5434],{"class":5377},[5324,19012,5381],{"class":5334},[5324,19014,19015,19018,19020,19023,19025,19028,19030,19032,19034,19037,19039,19041,19043],{"class":5326,"line":5466},[5324,19016,19017],{"class":5334},"col_names = [",[5324,19019,5661],{"class":5660},[5324,19021,19022],{"class":5519},"\"Сезон_",[5324,19024,5667],{"class":5660},[5324,19026,19027],{"class":5334},"i+",[5324,19029,5312],{"class":5377},[5324,19031,13739],{"class":5660},[5324,19033,5732],{"class":5519},[5324,19035,19036],{"class":5330}," for",[5324,19038,13664],{"class":5334},[5324,19040,9558],{"class":5330},[5324,19042,13669],{"class":5641},[5324,19044,19045],{"class":5334},"(n_series)]\n",[5324,19047,19048,19051,19054],{"class":5326,"line":5488},[5324,19049,19050],{"class":5334},"df_walks = pd.DataFrame(walks, ",[5324,19052,19053],{"class":5370},"columns",[5324,19055,19056],{"class":5334},"=col_names)\n",[5324,19058,19059],{"class":5326,"line":5535},[5324,19060,5361],{"emptyLinePlaceholder":5360},[5324,19062,19063],{"class":5326,"line":5556},[5324,19064,19065],{"class":5334},"corr_walks = df_walks.corr()\n",[5324,19067,19068],{"class":5326,"line":5575},[5324,19069,5361],{"emptyLinePlaceholder":5360},[5324,19071,19072],{"class":5326,"line":5612},[5324,19073,19074],{"class":5392},"# Пошук хибних високих кореляцій\n",[5324,19076,19077],{"class":5326,"line":5627},[5324,19078,19079],{"class":5334},"spurious_pairs = []\n",[5324,19081,19082,19084,19086,19088,19090],{"class":5326,"line":5633},[5324,19083,9552],{"class":5330},[5324,19085,13664],{"class":5334},[5324,19087,9558],{"class":5330},[5324,19089,13669],{"class":5641},[5324,19091,19092],{"class":5334},"(n_series):\n",[5324,19094,19095,19097,19099,19101,19103,19105,19107],{"class":5326,"line":5638},[5324,19096,11704],{"class":5330},[5324,19098,13683],{"class":5334},[5324,19100,9558],{"class":5330},[5324,19102,13669],{"class":5641},[5324,19104,13690],{"class":5334},[5324,19106,5312],{"class":5377},[5324,19108,19109],{"class":5334},", n_series):\n",[5324,19111,19112],{"class":5326,"line":5653},[5324,19113,19114],{"class":5334},"        r_val = corr_walks.iloc[i, j]\n",[5324,19116,19117,19119,19121,19124,19126],{"class":5326,"line":5691},[5324,19118,13708],{"class":5330},[5324,19120,13711],{"class":5641},[5324,19122,19123],{"class":5334},"(r_val) >= ",[5324,19125,11411],{"class":5377},[5324,19127,7948],{"class":5334},[5324,19129,19130],{"class":5326,"line":5725},[5324,19131,19132],{"class":5334},"            spurious_pairs.append((col_names[i], col_names[j], r_val))\n",[5324,19134,19135],{"class":5326,"line":5743},[5324,19136,5361],{"emptyLinePlaceholder":5360},[5324,19138,19139,19141,19143,19145,19148,19150,19153,19155,19158,19160,19162,19164],{"class":5326,"line":6150},[5324,19140,5642],{"class":5641},[5324,19142,5645],{"class":5334},[5324,19144,5661],{"class":5660},[5324,19146,19147],{"class":5519},"\"Перевірено незалежних пар процесів: ",[5324,19149,5667],{"class":5660},[5324,19151,19152],{"class":5334},"n_series * (n_series - ",[5324,19154,5312],{"class":5377},[5324,19156,19157],{"class":5334},") \u002F\u002F ",[5324,19159,6334],{"class":5377},[5324,19161,13739],{"class":5660},[5324,19163,5732],{"class":5519},[5324,19165,5381],{"class":5334},[5324,19167,19168,19170,19172,19174,19177,19179,19181,19184,19186,19188],{"class":5326,"line":7370},[5324,19169,5642],{"class":5641},[5324,19171,5645],{"class":5334},[5324,19173,5661],{"class":5660},[5324,19175,19176],{"class":5519},"\"Кількість хибних пар з |r| >= 0.75: ",[5324,19178,5667],{"class":5660},[5324,19180,7185],{"class":5641},[5324,19182,19183],{"class":5334},"(spurious_pairs)",[5324,19185,13739],{"class":5660},[5324,19187,5732],{"class":5519},[5324,19189,5381],{"class":5334},[5324,19191,19192],{"class":5326,"line":7375},[5324,19193,5361],{"emptyLinePlaceholder":5360},[5324,19195,19196],{"class":5326,"line":7381},[5324,19197,19198],{"class":5392},"# Сортування за абсолютним значенням\n",[5324,19200,19201,19204,19206,19208,19210,19212,19214,19216,19219,19221,19224,19226,19228,19230],{"class":5326,"line":7392},[5324,19202,19203],{"class":5334},"spurious_pairs.sort(",[5324,19205,16245],{"class":5370},[5324,19207,5374],{"class":5334},[5324,19209,16250],{"class":5660},[5324,19211,18166],{"class":5370},[5324,19213,10438],{"class":5334},[5324,19215,17469],{"class":5641},[5324,19217,19218],{"class":5334},"(x[",[5324,19220,6334],{"class":5377},[5324,19222,19223],{"class":5334},"]), ",[5324,19225,18176],{"class":5370},[5324,19227,5374],{"class":5334},[5324,19229,7711],{"class":5660},[5324,19231,5381],{"class":5334},[5324,19233,19234,19237,19239],{"class":5326,"line":7397},[5324,19235,19236],{"class":5334},"best_pair = spurious_pairs[",[5324,19238,5434],{"class":5377},[5324,19240,8647],{"class":5334},[5324,19242,19243,19245,19247,19249,19251,19253,19256,19258,19261,19263,19265,19267,19269,19271,19273,19275,19277,19279,19282,19284,19286,19288,19290,19292,19294],{"class":5326,"line":7415},[5324,19244,5642],{"class":5641},[5324,19246,5645],{"class":5334},[5324,19248,5661],{"class":5660},[5324,19250,5732],{"class":5519},[5324,19252,5735],{"class":5584},[5324,19254,19255],{"class":5519},"Найбільш абсурдний збіг: ",[5324,19257,5667],{"class":5660},[5324,19259,19260],{"class":5334},"best_pair[",[5324,19262,5434],{"class":5377},[5324,19264,6767],{"class":5334},[5324,19266,13739],{"class":5660},[5324,19268,13742],{"class":5519},[5324,19270,5667],{"class":5660},[5324,19272,19260],{"class":5334},[5324,19274,5312],{"class":5377},[5324,19276,6767],{"class":5334},[5324,19278,13739],{"class":5660},[5324,19280,19281],{"class":5519}," з r = ",[5324,19283,5667],{"class":5660},[5324,19285,19260],{"class":5334},[5324,19287,6334],{"class":5377},[5324,19289,6767],{"class":5334},[5324,19291,8754],{"class":5660},[5324,19293,5732],{"class":5519},[5324,19295,5381],{"class":5334},[5324,19297,19298],{"class":5326,"line":7501},[5324,19299,5361],{"emptyLinePlaceholder":5360},[5324,19301,19302],{"class":5326,"line":7557},[5324,19303,19304],{"class":5392},"# Візуалізація двох незалежних трендів\n",[5324,19306,19307,19310,19312,19315,19317],{"class":5326,"line":7607},[5324,19308,19309],{"class":5334},"s1, s2 = best_pair[",[5324,19311,5434],{"class":5377},[5324,19313,19314],{"class":5334},"], best_pair[",[5324,19316,5312],{"class":5377},[5324,19318,8647],{"class":5334},[5324,19320,19321,19323,19325,19327,19329,19331,19333],{"class":5326,"line":7657},[5324,19322,5469],{"class":5334},[5324,19324,5472],{"class":5370},[5324,19326,5475],{"class":5334},[5324,19328,5408],{"class":5377},[5324,19330,5405],{"class":5334},[5324,19332,5439],{"class":5377},[5324,19334,5485],{"class":5334},[5324,19336,19337,19340,19342,19344,19346,19348,19350,19352,19354,19357,19359,19362,19364,19366,19368,19370,19372,19374,19376,19378],{"class":5326,"line":7686},[5324,19338,19339],{"class":5334},"plt.plot(df_walks[s1], ",[5324,19341,12641],{"class":5519},[5324,19343,5405],{"class":5334},[5324,19345,7441],{"class":5370},[5324,19347,5374],{"class":5334},[5324,19349,5661],{"class":5660},[5324,19351,5732],{"class":5519},[5324,19353,5667],{"class":5660},[5324,19355,19356],{"class":5334},"s1",[5324,19358,13739],{"class":5660},[5324,19360,19361],{"class":5519}," (Випадковий процес 1)\"",[5324,19363,5405],{"class":5334},[5324,19365,9714],{"class":5370},[5324,19367,5374],{"class":5334},[5324,19369,6334],{"class":5377},[5324,19371,5405],{"class":5334},[5324,19373,7421],{"class":5370},[5324,19375,5374],{"class":5334},[5324,19377,7511],{"class":5519},[5324,19379,5381],{"class":5334},[5324,19381,19382,19385,19387,19389,19391,19393,19395,19397,19399,19402,19404,19407,19409,19411,19413,19415,19417,19419,19421,19423],{"class":5326,"line":7696},[5324,19383,19384],{"class":5334},"plt.plot(df_walks[s2], ",[5324,19386,12760],{"class":5519},[5324,19388,5405],{"class":5334},[5324,19390,7441],{"class":5370},[5324,19392,5374],{"class":5334},[5324,19394,5661],{"class":5660},[5324,19396,5732],{"class":5519},[5324,19398,5667],{"class":5660},[5324,19400,19401],{"class":5334},"s2",[5324,19403,13739],{"class":5660},[5324,19405,19406],{"class":5519}," (Випадковий процес 2)\"",[5324,19408,5405],{"class":5334},[5324,19410,9714],{"class":5370},[5324,19412,5374],{"class":5334},[5324,19414,6334],{"class":5377},[5324,19416,5405],{"class":5334},[5324,19418,7421],{"class":5370},[5324,19420,5374],{"class":5334},[5324,19422,8993],{"class":5519},[5324,19424,5381],{"class":5334},[5324,19426,19427,19429,19431,19434,19436,19438,19440,19442,19444,19446,19448,19450,19453,19455,19457,19459,19461,19463,19466,19468,19470,19472,19474],{"class":5326,"line":7706},[5324,19428,5578],{"class":5334},[5324,19430,5661],{"class":5660},[5324,19432,19433],{"class":5519},"\"Ілюзія причинності: ",[5324,19435,5667],{"class":5660},[5324,19437,19356],{"class":5334},[5324,19439,13739],{"class":5660},[5324,19441,13742],{"class":5519},[5324,19443,5667],{"class":5660},[5324,19445,19401],{"class":5334},[5324,19447,13739],{"class":5660},[5324,19449,5735],{"class":5584},[5324,19451,19452],{"class":5519},"r = ",[5324,19454,5667],{"class":5660},[5324,19456,19260],{"class":5334},[5324,19458,6334],{"class":5377},[5324,19460,6767],{"class":5334},[5324,19462,8847],{"class":5660},[5324,19464,19465],{"class":5519}," (Повна незалежність систем)\"",[5324,19467,5405],{"class":5334},[5324,19469,5593],{"class":5370},[5324,19471,5374],{"class":5334},[5324,19473,5598],{"class":5519},[5324,19475,5381],{"class":5334},[5324,19477,19478,19480,19483],{"class":5326,"line":7733},[5324,19479,5538],{"class":5334},[5324,19481,19482],{"class":5519},"\"Часовий крок (t)\"",[5324,19484,5381],{"class":5334},[5324,19486,19487,19489,19492],{"class":5326,"line":7739},[5324,19488,5559],{"class":5334},[5324,19490,19491],{"class":5519},"\"Значення кумулятивного стану\"",[5324,19493,5381],{"class":5334},[5324,19495,19496],{"class":5326,"line":7745},[5324,19497,7736],{"class":5334},[5324,19499,19500,19502,19504,19506,19508,19510,19512,19514,19516,19518,19520],{"class":5326,"line":9046},[5324,19501,5615],{"class":5334},[5324,19503,7711],{"class":5660},[5324,19505,5405],{"class":5334},[5324,19507,7431],{"class":5370},[5324,19509,5374],{"class":5334},[5324,19511,7720],{"class":5519},[5324,19513,5405],{"class":5334},[5324,19515,5494],{"class":5370},[5324,19517,5374],{"class":5334},[5324,19519,5499],{"class":5377},[5324,19521,5381],{"class":5334},[5324,19523,19524],{"class":5326,"line":9057},[5324,19525,7742],{"class":5334},[5324,19527,19528],{"class":5326,"line":9068},[5324,19529,5630],{"class":5334},[15261,19531,19532],{},[5314,19533,19536],{"className":19534,"code":19535,"language":5770},[5768],"Перевірено незалежних пар процесів: 190\nКількість хибних пар з |r| >= 0.75: 7\n\nНайбільш абсурдний збіг: Сезон_12 ↔ Сезон_15 з r = 0.9320\n",[5321,19537,19535],{"__ignoreMap":5319},[5278,19539,19540],{},[5759,19541],{"alt":19542,"className":19543,"src":19544},"Хибний дрейф кореляції двох незалежних випадкових блукань (Spurious Drift)",[5763],"\u002Fimages\u002Fai-python\u002Fstatistics-basics\u002Fcorrelation\u002Ftask-3-2-spurious-walks.png",[5278,19546,19547,19550,19551,10438,19554,19557],{},[5217,19548,19549],{},"Головний інженерний урок:","\nНестаціонарні часові ряди (що мають тренди або пам'ять блукання) не можна аналізувати звичайним коефіцієнтом Пірсона. Перед розрахунком кореляцій у динамічних системах часові ряди зобов'язані пройти диференціювання першого порядку (",[5232,19552,19553],{},"перші різниці",[5895,19555],{"tex":19556,":inline":5898},"\\Delta x_t = x_t - x_{t-1}","), щоб усунути спільний псевдотренд!",[8177,19559,19561,19567,19624],{"icon":2865,"label":19560},"Завдання 3.3: Повний конвеєр кореляційного аналізу реалістичного датасету нерухомості",[5278,19562,19563,19564,5916],{},"Побудуйте повний пайплайн препроцесингу та відбору ознак для задачі прогнозування ціни житла (",[5232,19565,19566],{},"House Price Prediction",[5779,19568,19569,19610,19615,19621],{},[5201,19570,19571,19572],{},"Згенеруйте датасет на 250 об'єктів з ознаками:\n",[5198,19573,19574,19580,19586,19592,19598,19604],{},[5201,19575,19576,19579],{},[5321,19577,19578],{},"sqm"," (житлова площа в м²)",[5201,19581,19582,19585],{},[5321,19583,19584],{},"sqft"," (площа у футах, точна копія з шумом)",[5201,19587,19588,19591],{},[5321,19589,19590],{},"rooms"," (кількість кімнат)",[5201,19593,19594,19597],{},[5321,19595,19596],{},"floor"," (поверх)",[5201,19599,19600,19603],{},[5321,19601,19602],{},"dist_subway"," (відстань до метро)",[5201,19605,19606,19609],{},[5321,19607,19608],{},"price"," (цільова змінна)",[5201,19611,19612,19613,5812],{},"Обчисліть кореляції всіх ознак із таргетом ",[5321,19614,19608],{},[5201,19616,19617,19618,6025],{},"Виявіть та програмно вилучіть надлишкові колінеарні предиктори (",[5895,19619],{"tex":19620,":inline":5898},"|r| > 0.85",[5201,19622,19623],{},"Сформуйте фінальний скорочений список ознак, готовий до передачі в лінійну модель.",[8177,19625,19626,20187],{"icon":14909,"label":14910},[5314,19627,19629],{"className":5316,"code":19628,"language":5318,"meta":5319,"style":5319},"import numpy as np\nimport pandas as pd\n\nrng = np.random.default_rng(seed=42)\nn = 250\n\nsqm = rng.uniform(30, 180, n)\nsqft = sqm * 10.764 + rng.normal(0, 0.05, n)  # Майже ідеальна колінеарність\nrooms = np.clip((sqm \u002F 35).astype(int) + rng.integers(0, 2, n), 1, 6)\nfloor = rng.integers(1, 25, n)\ndist_subway = rng.uniform(0.2, 5.0, n)\n\n# Цільова змінна\nprice = (\n    sqm * 1500\n    + rooms * 5000\n    - dist_subway * 8000\n    + floor * 400\n    + rng.normal(0, 15000, n)\n)\n\ndata = pd.DataFrame({\n    'sqm': sqm,\n    'sqft': sqft,\n    'rooms': rooms,\n    'floor': floor,\n    'dist_subway': dist_subway,\n    'price': price\n})\n\n# 1. Оцінка кореляції з цільовою змінною\ntarget_corr = data.corr()['price'].drop('price').sort_values(ascending=False)\nprint(\"--- 1. Кореляція ознак із ціною (Target) ---\")\nprint(target_corr.round(3))\n\n# 2. Фільтрація мультиколінеарних ознак\nfeatures = [col for col in data.columns if col != 'price']\ncorr_feats = data[features].corr()\n\nto_drop = set()\nfor i in range(len(features)):\n    for j in range(i + 1, len(features)):\n        f1, f2 = features[i], features[j]\n        if abs(corr_feats.loc[f1, f2]) > 0.85:\n            # Залишаємо ознаку, яка має вищу кореляцію з таргетом\n            drop_col = f2 if abs(target_corr[f1]) >= abs(target_corr[f2]) else f1\n            to_drop.add(drop_col)\n\nselected_features = [f for f in features if f not in to_drop]\n\nprint(\"\\n--- 2. Результат відбору ознак ---\")\nprint(f\"Вилучені ознаки через колінеарність: {list(to_drop)}\")\nprint(f\"Фінальний безпечний набір ознак для ML: {selected_features}\")\n",[5321,19630,19631,19641,19651,19655,19667,19674,19678,19692,19713,19745,19758,19773,19777,19782,19787,19795,19803,19811,19819,19833,19837,19841,19845,19853,19861,19867,19875,19883,19890,19894,19898,19903,19929,19940,19951,19955,19960,19981,19986,19990,20001,20017,20037,20042,20056,20061,20084,20089,20093,20121,20125,20140,20165],{"__ignoreMap":5319},[5324,19632,19633,19635,19637,19639],{"class":5326,"line":5327},[5324,19634,5331],{"class":5330},[5324,19636,5335],{"class":5334},[5324,19638,5338],{"class":5330},[5324,19640,5341],{"class":5334},[5324,19642,19643,19645,19647,19649],{"class":5326,"line":5344},[5324,19644,5331],{"class":5330},[5324,19646,10486],{"class":5334},[5324,19648,5338],{"class":5330},[5324,19650,10491],{"class":5334},[5324,19652,19653],{"class":5326,"line":5357},[5324,19654,5361],{"emptyLinePlaceholder":5360},[5324,19656,19657,19659,19661,19663,19665],{"class":5326,"line":5364},[5324,19658,5367],{"class":5334},[5324,19660,5371],{"class":5370},[5324,19662,5374],{"class":5334},[5324,19664,5378],{"class":5377},[5324,19666,5381],{"class":5334},[5324,19668,19669,19671],{"class":5326,"line":5384},[5324,19670,9407],{"class":5334},[5324,19672,19673],{"class":5377},"250\n",[5324,19675,19676],{"class":5326,"line":5389},[5324,19677,5361],{"emptyLinePlaceholder":5360},[5324,19679,19680,19683,19685,19687,19690],{"class":5326,"line":5396},[5324,19681,19682],{"class":5334},"sqm = rng.uniform(",[5324,19684,6512],{"class":5377},[5324,19686,5405],{"class":5334},[5324,19688,19689],{"class":5377},"180",[5324,19691,10559],{"class":5334},[5324,19693,19694,19697,19699,19701,19703,19705,19708,19710],{"class":5326,"line":5422},[5324,19695,19696],{"class":5334},"sqft = sqm * ",[5324,19698,13314],{"class":5377},[5324,19700,10570],{"class":5334},[5324,19702,5434],{"class":5377},[5324,19704,5405],{"class":5334},[5324,19706,19707],{"class":5377},"0.05",[5324,19709,10580],{"class":5334},[5324,19711,19712],{"class":5392},"# Майже ідеальна колінеарність\n",[5324,19714,19715,19718,19720,19723,19725,19728,19730,19732,19734,19737,19739,19741,19743],{"class":5326,"line":5455},[5324,19716,19717],{"class":5334},"rooms = np.clip((sqm \u002F ",[5324,19719,7109],{"class":5377},[5324,19721,19722],{"class":5334},").astype(",[5324,19724,18014],{"class":10013},[5324,19726,19727],{"class":5334},") + rng.integers(",[5324,19729,5434],{"class":5377},[5324,19731,5405],{"class":5334},[5324,19733,6334],{"class":5377},[5324,19735,19736],{"class":5334},", n), ",[5324,19738,5312],{"class":5377},[5324,19740,5405],{"class":5334},[5324,19742,5482],{"class":5377},[5324,19744,5381],{"class":5334},[5324,19746,19747,19750,19752,19754,19756],{"class":5326,"line":5460},[5324,19748,19749],{"class":5334},"floor = rng.integers(",[5324,19751,5312],{"class":5377},[5324,19753,5405],{"class":5334},[5324,19755,7090],{"class":5377},[5324,19757,10559],{"class":5334},[5324,19759,19760,19763,19766,19768,19771],{"class":5326,"line":5466},[5324,19761,19762],{"class":5334},"dist_subway = rng.uniform(",[5324,19764,19765],{"class":5377},"0.2",[5324,19767,5405],{"class":5334},[5324,19769,19770],{"class":5377},"5.0",[5324,19772,10559],{"class":5334},[5324,19774,19775],{"class":5326,"line":5488},[5324,19776,5361],{"emptyLinePlaceholder":5360},[5324,19778,19779],{"class":5326,"line":5535},[5324,19780,19781],{"class":5392},"# Цільова змінна\n",[5324,19783,19784],{"class":5326,"line":5556},[5324,19785,19786],{"class":5334},"price = (\n",[5324,19788,19789,19792],{"class":5326,"line":5575},[5324,19790,19791],{"class":5334},"    sqm * ",[5324,19793,19794],{"class":5377},"1500\n",[5324,19796,19797,19800],{"class":5326,"line":5612},[5324,19798,19799],{"class":5334},"    + rooms * ",[5324,19801,19802],{"class":5377},"5000\n",[5324,19804,19805,19808],{"class":5326,"line":5627},[5324,19806,19807],{"class":5334},"    - dist_subway * ",[5324,19809,19810],{"class":5377},"8000\n",[5324,19812,19813,19816],{"class":5326,"line":5633},[5324,19814,19815],{"class":5334},"    + floor * ",[5324,19817,19818],{"class":5377},"400\n",[5324,19820,19821,19824,19826,19828,19831],{"class":5326,"line":5638},[5324,19822,19823],{"class":5334},"    + rng.normal(",[5324,19825,5434],{"class":5377},[5324,19827,5405],{"class":5334},[5324,19829,19830],{"class":5377},"15000",[5324,19832,10559],{"class":5334},[5324,19834,19835],{"class":5326,"line":5653},[5324,19836,5381],{"class":5334},[5324,19838,19839],{"class":5326,"line":5691},[5324,19840,5361],{"emptyLinePlaceholder":5360},[5324,19842,19843],{"class":5326,"line":5725},[5324,19844,10660],{"class":5334},[5324,19846,19847,19850],{"class":5326,"line":5743},[5324,19848,19849],{"class":5519},"    'sqm'",[5324,19851,19852],{"class":5334},": sqm,\n",[5324,19854,19855,19858],{"class":5326,"line":6150},[5324,19856,19857],{"class":5519},"    'sqft'",[5324,19859,19860],{"class":5334},": sqft,\n",[5324,19862,19863,19865],{"class":5326,"line":7370},[5324,19864,16966],{"class":5519},[5324,19866,13412],{"class":5334},[5324,19868,19869,19872],{"class":5326,"line":7375},[5324,19870,19871],{"class":5519},"    'floor'",[5324,19873,19874],{"class":5334},": floor,\n",[5324,19876,19877,19880],{"class":5326,"line":7381},[5324,19878,19879],{"class":5519},"    'dist_subway'",[5324,19881,19882],{"class":5334},": dist_subway,\n",[5324,19884,19885,19888],{"class":5326,"line":7392},[5324,19886,19887],{"class":5519},"    'price'",[5324,19889,13434],{"class":5334},[5324,19891,19892],{"class":5326,"line":7397},[5324,19893,10705],{"class":5334},[5324,19895,19896],{"class":5326,"line":7415},[5324,19897,5361],{"emptyLinePlaceholder":5360},[5324,19899,19900],{"class":5326,"line":7501},[5324,19901,19902],{"class":5392},"# 1. Оцінка кореляції з цільовою змінною\n",[5324,19904,19905,19908,19911,19914,19916,19919,19922,19924,19927],{"class":5326,"line":7557},[5324,19906,19907],{"class":5334},"target_corr = data.corr()[",[5324,19909,19910],{"class":5519},"'price'",[5324,19912,19913],{"class":5334},"].drop(",[5324,19915,19910],{"class":5519},[5324,19917,19918],{"class":5334},").sort_values(",[5324,19920,19921],{"class":5370},"ascending",[5324,19923,5374],{"class":5334},[5324,19925,19926],{"class":5660},"False",[5324,19928,5381],{"class":5334},[5324,19930,19931,19933,19935,19938],{"class":5326,"line":7607},[5324,19932,5642],{"class":5641},[5324,19934,5645],{"class":5334},[5324,19936,19937],{"class":5519},"\"--- 1. Кореляція ознак із ціною (Target) ---\"",[5324,19939,5381],{"class":5334},[5324,19941,19942,19944,19947,19949],{"class":5326,"line":7657},[5324,19943,5642],{"class":5641},[5324,19945,19946],{"class":5334},"(target_corr.round(",[5324,19948,10595],{"class":5377},[5324,19950,5485],{"class":5334},[5324,19952,19953],{"class":5326,"line":7686},[5324,19954,5361],{"emptyLinePlaceholder":5360},[5324,19956,19957],{"class":5326,"line":7696},[5324,19958,19959],{"class":5392},"# 2. Фільтрація мультиколінеарних ознак\n",[5324,19961,19962,19964,19966,19968,19970,19973,19975,19977,19979],{"class":5326,"line":7706},[5324,19963,13636],{"class":5334},[5324,19965,9552],{"class":5330},[5324,19967,13641],{"class":5334},[5324,19969,9558],{"class":5330},[5324,19971,19972],{"class":5334}," data.columns ",[5324,19974,13649],{"class":5330},[5324,19976,13652],{"class":5334},[5324,19978,19910],{"class":5519},[5324,19980,8647],{"class":5334},[5324,19982,19983],{"class":5326,"line":7733},[5324,19984,19985],{"class":5334},"corr_feats = data[features].corr()\n",[5324,19987,19988],{"class":5326,"line":7739},[5324,19989,5361],{"emptyLinePlaceholder":5360},[5324,19991,19992,19995,19998],{"class":5326,"line":7745},[5324,19993,19994],{"class":5334},"to_drop = ",[5324,19996,19997],{"class":10013},"set",[5324,19999,20000],{"class":5334},"()\n",[5324,20002,20003,20005,20007,20009,20011,20013,20015],{"class":5326,"line":9046},[5324,20004,9552],{"class":5330},[5324,20006,13664],{"class":5334},[5324,20008,9558],{"class":5330},[5324,20010,13669],{"class":5641},[5324,20012,5645],{"class":5334},[5324,20014,7185],{"class":5641},[5324,20016,13676],{"class":5334},[5324,20018,20019,20021,20023,20025,20027,20029,20031,20033,20035],{"class":5326,"line":9057},[5324,20020,11704],{"class":5330},[5324,20022,13683],{"class":5334},[5324,20024,9558],{"class":5330},[5324,20026,13669],{"class":5641},[5324,20028,13690],{"class":5334},[5324,20030,5312],{"class":5377},[5324,20032,5405],{"class":5334},[5324,20034,7185],{"class":5641},[5324,20036,13676],{"class":5334},[5324,20038,20039],{"class":5326,"line":9068},[5324,20040,20041],{"class":5334},"        f1, f2 = features[i], features[j]\n",[5324,20043,20044,20046,20048,20051,20054],{"class":5326,"line":9094},[5324,20045,13708],{"class":5330},[5324,20047,13711],{"class":5641},[5324,20049,20050],{"class":5334},"(corr_feats.loc[f1, f2]) > ",[5324,20052,20053],{"class":5377},"0.85",[5324,20055,7948],{"class":5334},[5324,20057,20058],{"class":5326,"line":9100},[5324,20059,20060],{"class":5392},"            # Залишаємо ознаку, яка має вищу кореляцію з таргетом\n",[5324,20062,20063,20066,20068,20070,20073,20075,20078,20081],{"class":5326,"line":9105},[5324,20064,20065],{"class":5334},"            drop_col = f2 ",[5324,20067,13649],{"class":5330},[5324,20069,13711],{"class":5641},[5324,20071,20072],{"class":5334},"(target_corr[f1]) >= ",[5324,20074,17469],{"class":5641},[5324,20076,20077],{"class":5334},"(target_corr[f2]) ",[5324,20079,20080],{"class":5330},"else",[5324,20082,20083],{"class":5334}," f1\n",[5324,20085,20086],{"class":5326,"line":9137},[5324,20087,20088],{"class":5334},"            to_drop.add(drop_col)\n",[5324,20090,20091],{"class":5326,"line":9156},[5324,20092,5361],{"emptyLinePlaceholder":5360},[5324,20094,20095,20098,20100,20103,20105,20108,20110,20112,20115,20118],{"class":5326,"line":9198},[5324,20096,20097],{"class":5334},"selected_features = [f ",[5324,20099,9552],{"class":5330},[5324,20101,20102],{"class":5334}," f ",[5324,20104,9558],{"class":5330},[5324,20106,20107],{"class":5334}," features ",[5324,20109,13649],{"class":5330},[5324,20111,20102],{"class":5334},[5324,20113,20114],{"class":5660},"not",[5324,20116,20117],{"class":5660}," in",[5324,20119,20120],{"class":5334}," to_drop]\n",[5324,20122,20123],{"class":5326,"line":9225},[5324,20124,5361],{"emptyLinePlaceholder":5360},[5324,20126,20127,20129,20131,20133,20135,20138],{"class":5326,"line":9251},[5324,20128,5642],{"class":5641},[5324,20130,5645],{"class":5334},[5324,20132,5732],{"class":5519},[5324,20134,5735],{"class":5584},[5324,20136,20137],{"class":5519},"--- 2. Результат відбору ознак ---\"",[5324,20139,5381],{"class":5334},[5324,20141,20142,20144,20146,20148,20151,20153,20156,20159,20161,20163],{"class":5326,"line":9270},[5324,20143,5642],{"class":5641},[5324,20145,5645],{"class":5334},[5324,20147,5661],{"class":5660},[5324,20149,20150],{"class":5519},"\"Вилучені ознаки через колінеарність: ",[5324,20152,5667],{"class":5660},[5324,20154,20155],{"class":10013},"list",[5324,20157,20158],{"class":5334},"(to_drop)",[5324,20160,13739],{"class":5660},[5324,20162,5732],{"class":5519},[5324,20164,5381],{"class":5334},[5324,20166,20167,20169,20171,20173,20176,20178,20181,20183,20185],{"class":5326,"line":9281},[5324,20168,5642],{"class":5641},[5324,20170,5645],{"class":5334},[5324,20172,5661],{"class":5660},[5324,20174,20175],{"class":5519},"\"Фінальний безпечний набір ознак для ML: ",[5324,20177,5667],{"class":5660},[5324,20179,20180],{"class":5334},"selected_features",[5324,20182,13739],{"class":5660},[5324,20184,5732],{"class":5519},[5324,20186,5381],{"class":5334},[15261,20188,20189],{},[5314,20190,20193],{"className":20191,"code":20192,"language":5770},[5768],"--- 1. Кореляція ознак із ціною (Target) ---\nsqft            0.963\nsqm             0.963\nrooms           0.824\nfloor           0.076\ndist_subway    -0.279\nName: price, dtype: float64\n\n--- 2. Результат відбору ознак ---\nВилучені ознаки через колінеарність: ['sqft']\nФінальний безпечний набір ознак для ML: ['sqm', 'rooms', 'floor', 'dist_subway']\n",[5321,20194,20192],{"__ignoreMap":5319},[5270,20196],{},[5273,20198,20200],{"id":20199},"часті-запитання-студентів-faq","Часті запитання студентів (FAQ)",[8174,20202,20203,20283,20333],{},[8177,20204,20207,20213,20226,20255,20260],{"icon":20205,"label":20206},"i-lucide-help-circle","Чому коефіцієнт Пірсона дорівнює 0 для детермінованих залежностей на зразок y = x²?",[5278,20208,20209,20210,5812],{},"Це одна з найпідступніших пасток статистичного аналізу: ",[5217,20211,20212],{},"коефіцієнт Пірсона вимірює виключно лінійну залежність",[5278,20214,20215,20216,20218,20219,20222,20223,5812],{},"Розгляньмо класичний приклад: нехай змінна ",[5895,20217],{"tex":6166,":inline":5898}," приймає строго симетричні значення ",[5895,20220],{"tex":20221,":inline":5898},"\\{-3, -2, -1, 0, 1, 2, 3\\}",", а ",[5895,20224],{"tex":20225,":inline":5898},"Y = X^2 = \\{9, 4, 1, 0, 1, 4, 9\\}",[5198,20227,20228,20236],{},[5201,20229,20230,20231,20233,20234,6025],{},"Між ними існує абсолютно детермінований, 100% передбачуваний функціональний зв'язок (знаючи ",[5895,20232],{"tex":6166,":inline":5898},", ми безпомилково обчислюємо ",[5895,20235],{"tex":6173,":inline":5898},[5201,20237,20238,20239,5971,20242,20244,20245,20247,20248,20251,20252],{},"Проте при розрахунку коваріації ліва гілка параболи (де ",[5895,20240],{"tex":20241,":inline":5898},"X \u003C 0",[5895,20243],{"tex":6173,":inline":5898}," спадає зі зростанням ",[5895,20246],{"tex":6166,":inline":5898},") дає від'ємні добутки центрованих відхилень. Права гілка (де ",[5895,20249],{"tex":20250,":inline":5898},"X > 0"," і обидві змінні зростають) дає точно такі самі за модулем додатні добутки. У сумі вони взаємно анігілюють:\n",[5895,20253],{"tex":20254},"\\text{Cov}(X, Y) = 0 \\implies r = 0",[5278,20256,20257],{},[5217,20258,20259],{},"Висновки для інженера:",[5779,20261,20262,20276],{},[5201,20263,20264,20265,20268,20269,20272,20273,20275],{},"Ніколи не довіряйте сухим цифрам матриці кореляції без побудови діаграм розсіювання (",[5232,20266,20267],{},"scatter plots","). Знаменитий ",[5217,20270,20271],{},"квартет Анскомба (Anscombe's quartet)"," демонструє 4 набори даних з ідентичним ",[5895,20274],{"tex":10199,":inline":5898},", але кардинально різною структурою (лінійна хмара, ідеальна парабола, одиничний викид).",[5201,20277,20278,20279,20282],{},"Для нелінійних зв'язків застосовуйте рангову кореляцію Спірмена, критерій взаємної інформації (",[5232,20280,20281],{},"Mutual Information",") або поліноміальне проектування простору ознак.",[8177,20284,20287,20295],{"icon":20285,"label":20286},"i-lucide-arrow-right-left","Коли слід обирати рангову кореляцію Спірмена замість Пірсона?",[5278,20288,20289,20290,6002,20292,20294],{},"Ранговий коефіцієнт кореляції Спірмена (",[5895,20291],{"tex":13947,":inline":5898},[5895,20293],{"tex":13950,":inline":5898},") є непараметричним аналогом Пірсона, що розраховується не на сирих числових значеннях, а на їхніх порядкових номерах (рангах):",[5779,20296,20297,20314,20327],{},[5201,20298,20299,20302,20303,20306,20307,20310,20311,20313],{},[5217,20300,20301],{},"Монотонні, але нелінійні залежності",": якщо зв'язок має експоненційний чи логарифмічний характер (",[5895,20304],{"tex":20305,":inline":5898},"Y = e^X","), Пірсон поверне занижене значення (",[5895,20308],{"tex":20309,":inline":5898},"r \\approx 0.85","), тоді як Спірмен поверне ідеальну одиницю (",[5895,20312],{"tex":14022,":inline":5898},"), оскільки монотонність порядку зберігається бездоганно.",[5201,20315,20316,20319,20320,6640,20323,20326],{},[5217,20317,20318],{},"Наявність грубих викидів",": один екстремальний викид у вибірці здатен обвалити коефіцієнт Пірсона з ",[5895,20321],{"tex":20322,":inline":5898},"+0.90",[5895,20324],{"tex":20325,":inline":5898},"-0.20",". Спірмен замінює значення викиду на його ранг у відсортованому списку (наприклад, 100-те місце зі 100), тому зберігає стабільність.",[5201,20328,20329,20332],{},[5217,20330,20331],{},"Ординальні (порядкові) шкали",": користувацькі оцінки в App Store (від 1 до 5 зірок), грейди інженерів (Junior, Middle, Senior, Lead).",[8177,20334,20336,20339],{"icon":16513,"label":20335},"Чи обов'язково вилучати ознаку, якщо її кореляція з іншою перевищує 0.85?",[5278,20337,20338],{},"Це залежить від класу алгоритму машинного навчання:",[5779,20340,20341,20357],{},[5201,20342,20343,7948,20346],{},[5217,20344,20345],{},"Для лінійних моделей (Linear \u002F Logistic Regression) та нейромереж",[5198,20347,20348],{},[5201,20349,20350,20351,20353,20354,20356],{},"Мультиколінеарність критична. Коли дві ознаки мають ",[5895,20352],{"tex":19620,":inline":5898},", градієнтні спуски стають нестійкими, а матриця ваг наближається до виродження. Тут обов'язково потрібно або видалити одну з ознак, або застосувати ",[5895,20355],{"tex":7924,":inline":5898},"-регуляризацію (Ridge Regression), або провести PCA.",[5201,20358,20359,7948,20362],{},[5217,20360,20361],{},"Для ансамблів дерев рішень (Random Forest, XGBoost, LightGBM, CatBoost)",[5198,20363,20364],{},[5201,20365,20366,20367,20370,20371,6025],{},"Дерева рішень вибирають найкращий спліт (",[5232,20368,20369],{},"split",") жадібно, розглядаючи по одній ознаці за раз. Якщо дві ознаки мають дублюючий сигнал, алгоритм використає одну з них для конкретної вершини дерева, проігнорувавши іншу. На фінальну прогнозну якість моделі (ROC-AUC, RMSE) мультиколінеарність у бустингу майже не впливає, проте вона може розмивати аналіз важливості ознак (",[5232,20372,20373],{},"Feature Importance",[5270,20375],{},[5273,20377,20379],{"id":20378},"резюме-ключові-takeaways","Резюме: ключові takeaways",[5190,20381,20382,20390,20397,20401,20405,20409],{},[5193,20383,20385,20386,6640,20388,5812],{"icon":6906,"title":20384},"Коваріація vs Кореляція","Коваріація показує напрямок спільної зміни, але є масштабозалежною. Кореляція — нормалізований безрозмірний показник від ",[5895,20387],{"tex":6639,":inline":5898},[5895,20389],{"tex":6643,":inline":5898},[5193,20391,20393,20394,20396],{"icon":10194,"title":20392},"Кореляція Пірсона (r)","Вимірює виключно ",[5217,20395,13934],{}," зв'язок між нормальними величинами. Еквівалентна косинусу кута між центрованими векторами ознак у багатовимірному просторі.",[5193,20398,20400],{"icon":20399,"title":5258},"i-lucide-grid","Симетрична таблиця парних зв'язків. Головна діагональ завжди дорівнює одиниці. Heatmap візуалізація — найшвидший спосіб знайти приховані патерни.",[5193,20402,20404],{"icon":10215,"title":20403},"Кореляція ≠ Причинність","Фундаментальне правило аналізу: кореляція доводить спільну мінливість, але не механізм впливу. Завжди перевіряйте наявність третіх прихованих факторів (Confounders).",[5193,20406,20408],{"icon":20407,"title":13092},"i-lucide-link","Сильний зв'язок між предикторами спричиняє нестабільність матриць у лінійних моделях. Контролюється через показник VIF та видалення дублікатів.",[5193,20410,20413],{"icon":20411,"title":20412},"i-lucide-bar-chart-2","Рангові міри (Спірмен, Кендалл)","Працюють із монотонними нелінійними залежностями та ординальними даними, будучи повністю захищеними від впливу екстремальних викидів.",[5270,20415],{},[5273,20417,20419],{"id":20418},"що-далі","Що далі?",[5278,20421,20422],{},"Ви опанували фундаментальні інструменти дослідження взаємозв'язків між змінними. Тепер ви вмієте:",[5198,20424,20425,20428,20431,20434],{},[5201,20426,20427],{},"Професійно інтерпретувати коваріацію та коефіцієнт Пірсона;",[5201,20429,20430],{},"Будувати та читати теплові карти кореляційних матриць;",[5201,20432,20433],{},"Уникати пасток хибної причинності в телеметрії та бізнес-аналітиці;",[5201,20435,20436],{},"Підбирати правильну міру зв'язку (Пірсон, Спірмен чи Кендалл) під тип даних.",[5278,20438,20439,20440,20443],{},"Наступний крок — ",[5217,20441,20442],{},"виявлення та обробка аномалій і викидів (Outliers)",", які здатні спотворювати статистичні тести, зміщувати кореляції та руйнувати навчання ML-моделей.",[8125,20445,20446,20447,20450],{},"💡 ",[5217,20448,20449],{},"Порада для закріплення навичок:"," Завантажте реальний датасет (наприклад, змагання Kaggle з прогнозу цін або кредитного скорингу). Побудуйте кореляційну матрицю ознак. Для кожної сильної кореляції поставте критичне запитання: «Чи це реальний причинний зв'язок, чи прояв неврахованого спільного фактора?». Це критичне мислення вирізняє провідного дата-саєнтиста!",[20452,20453,20454],"style",{},"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 .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 .s8Opu, html code.shiki .s8Opu{--shiki-light:#795E26;--shiki-default:#DCDCAA;--shiki-dark:#DCDCAA}html pre.shiki code .su1O8, html code.shiki .su1O8{--shiki-light:#0000FF;--shiki-default:#569CD6;--shiki-dark:#569CD6}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);}html pre.shiki code .sN1BT, html code.shiki .sN1BT{--shiki-light:#267F99;--shiki-default:#4EC9B0;--shiki-dark:#4EC9B0}",{"title":5319,"searchDepth":5344,"depth":5344,"links":20456},[20457,20458,20466,20474,20478,20484,20490,20496,20501,20502,20503],{"id":5275,"depth":5344,"text":5276},{"id":5823,"depth":5344,"text":5824,"children":20459},[20460,20461,20462,20463,20464,20465],{"id":5889,"depth":5357,"text":5890},{"id":5922,"depth":5357,"text":5923},{"id":6156,"depth":5357,"text":6157},{"id":6780,"depth":5357,"text":6781},{"id":6897,"depth":5357,"text":6898},{"id":7031,"depth":5357,"text":7032},{"id":7806,"depth":5344,"text":7807,"children":20467},[20468,20469,20470,20471,20472,20473],{"id":7829,"depth":5357,"text":7830},{"id":7989,"depth":5357,"text":7990},{"id":8165,"depth":5357,"text":8166},{"id":8503,"depth":5357,"text":8504},{"id":9349,"depth":5357,"text":9350},{"id":10138,"depth":5357,"text":10139},{"id":10270,"depth":5344,"text":10271,"children":20475},[20476,20477],{"id":10304,"depth":5357,"text":10305},{"id":10452,"depth":5357,"text":10453},{"id":11036,"depth":5344,"text":11037,"children":20479},[20480,20481,20482,20483],{"id":11093,"depth":5357,"text":11094},{"id":11296,"depth":5357,"text":11297},{"id":12291,"depth":5357,"text":12292},{"id":12426,"depth":5357,"text":12427},{"id":13086,"depth":5344,"text":13087,"children":20485},[20486,20487,20488,20489],{"id":13099,"depth":5357,"text":13100},{"id":13205,"depth":5357,"text":13206},{"id":13797,"depth":5357,"text":13798},{"id":13847,"depth":5357,"text":13848},{"id":13927,"depth":5344,"text":13928,"children":20491},[20492,20493,20494,20495],{"id":13938,"depth":5357,"text":13939},{"id":14562,"depth":5357,"text":14563},{"id":14653,"depth":5357,"text":14654},{"id":14777,"depth":5357,"text":14778},{"id":14847,"depth":5344,"text":14848,"children":20497},[20498,20499,20500],{"id":14851,"depth":5357,"text":14852},{"id":15941,"depth":5357,"text":15942},{"id":17912,"depth":5357,"text":17913},{"id":20199,"depth":5344,"text":20200},{"id":20378,"depth":5344,"text":20379},{"id":20418,"depth":5344,"text":20419},"Коваріація, коефіцієнт кореляції Пірсона, матриці кореляції, візуалізація та критичне розуміння зв'язків між змінними","md",null,{},{"title":3743,"description":20504},"69-qQuT1frhqEIxhMzf2gCi5QqZSe5rnUrERtICjxK4",[20511,20513],{"title":3739,"path":3740,"stem":3741,"description":20512,"children":-1},"Рівномірний, нормальний (Гауса) та розподіл Пуассона — три фундаментальні розподіли, їхні властивості, застосування та генерація даних у NumPy",{"title":3747,"path":3748,"stem":3749,"description":20514,"children":-1},"Методи виявлення викидів (IQR, Z-score), візуалізація через box plots, стратегії обробки та вплив на ML-моделі",1792054960884]