{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "e3f9c6c1", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Python executable: c:\\Users\\User\\miniconda3\\envs\\nvidia_project\\python.exe\n", "Python version: 3.11.15 | packaged by Anaconda, Inc. | (main, Mar 11 2026, 17:12:15) [MSC v.1942 64 bit (AMD64)]\n" ] } ], "source": [ "import sys\n", "print(\"Python executable:\", sys.executable)\n", "print(\"Python version:\", sys.version)\n" ] }, { "cell_type": "code", "execution_count": 2, "id": "27a78b7b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CUDA available: True\n", "GPU name: NVIDIA GeForce RTX 2080 Super with Max-Q Design\n" ] } ], "source": [ "import torch\n", "print(\"CUDA available:\", torch.cuda.is_available())\n", "print(\"GPU name:\", torch.cuda.get_device_name(0) if torch.cuda.is_available() else \"No GPU found\")" ] }, { "cell_type": "code", "execution_count": 3, "id": "1622e045", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "⏳ Installing dependencies...\n", "✅ Dependencies installed.\n" ] } ], "source": [ "# 1️⃣ INSTALL DEPENDENCIES\n", "print(\"⏳ Installing dependencies...\")\n", "# %pip install -qU langchain-groq langchain-huggingface langchain-chroma langgraph langchain-community sentence-transformers unstructured chromadb gradio\n", "\n", "import chromadb\n", "print(\"✅ Dependencies installed.\")" ] }, { "cell_type": "code", "execution_count": 4, "id": "f5a2c498", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "c:\\Users\\User\\miniconda3\\envs\\nvidia_project\\Lib\\site-packages\\tqdm\\auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", " from .autonotebook import tqdm as notebook_tqdm\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "? Project folder: c:\\Users\\User\\ML_Coding_Projects\\15_Nvidia_AI_Assistant\n", "? Report folder: c:\\Users\\User\\ML_Coding_Projects\\15_Nvidia_AI_Assistant\\Nvidia_Annual_Reports_2014-2025\n", "? Switched to OpenAI GPT-5.4 (excellent tool calling)\n", "? Environment Ready.\n" ] } ], "source": [ "# 2?? CONFIGURATION\n", "\n", "from pathlib import Path\n", "from dotenv import load_dotenv\n", "import os\n", "\n", "# Keep paths tied to the current project folder so moving/copying the project does not break retrieval.\n", "PROJECT_DIR = Path.cwd()\n", "SOURCE_DATA_DIR = str(PROJECT_DIR / \"Nvidia_Annual_Reports_2014-2025\")\n", "DRIVE_DB_PATH = str(PROJECT_DIR / \"chroma_db_v2\")\n", "EMBEDDING_MODEL = \"all-mpnet-base-v2\"\n", "\n", "load_dotenv(PROJECT_DIR / \".env\")\n", "\n", "OPENAI_API_KEY = os.getenv(\"OPENAI_API_KEY\")\n", "if not OPENAI_API_KEY:\n", " raise ValueError(\"Set the OPENAI_API_KEY environment variable before running this notebook.\")\n", "\n", "from langchain_openai import ChatOpenAI # type: ignore\n", "\n", "# Recommended model for this project (tool calling + reasoning)\n", "llm = ChatOpenAI(\n", " model=\"gpt-5.4\", # Best balance for agents (or \"gpt-5.4-mini\" for cheaper/faster)\n", " temperature=0.3,\n", " max_tokens=1024, # type: ignore\n", ")\n", "\n", "print(f\"? Project folder: {PROJECT_DIR}\")\n", "print(f\"? Report folder: {SOURCE_DATA_DIR}\")\n", "print(\"? Switched to OpenAI GPT-5.4 (excellent tool calling)\")\n", "print(\"? Environment Ready.\")\n" ] }, { "cell_type": "code", "execution_count": 5, "id": "aad06483", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Loading weights: 100%|██████████| 199/199 [00:00<00:00, 4789.61it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "? Loading existing collection: collection is current with years [2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025]\n", "2016 chunks available: 3 sample rows returned\n", " - NVIDIA-2016-Annual-Report.pdf, page 1\n", " - NVIDIA-2016-Annual-Report.pdf, page 2\n", " - NVIDIA-2016-Annual-Report.pdf, page 3\n", "Raw Context Preview:\n", "27\n", "ITEM 6. SELECTED FINANCIAL DATA \n", "The following selected financial data should be read in conjunction with our financial statements and the notes thereto, \n", "and with Item 7, “Management’s Discussion and Analysis of Financial Condition and Results of Operations.” The \n", "Consolidated Statements of Operations data for the fiscal years ended January 31, 2016, January 25, 2015 and January 26, \n", "2014 and the Consolidated Balance Sheets data as of January 31, 2016 and January 25, 2015 have been derived from and \n", "should be read in conjunction with our audited consolidated financial statements and the notes thereto included in Part IV , \n", "Item 15 in this Annual Report on Form 10-K. We operate on a 52- or a 53-week year, ending on the last Sunday in January. \n", "Fiscal year 2016 was a 53-week year, and fiscal years 2015 and 2014 were 52-week years.\n", " Year Ended\n", "January 31,\n", "2016 (A)\n", "January 25,\n", "2015 \n", "January 26,\n", "2014 \n", "January 27,\n", "2013\n", "January 29,\n", "2012\n", " (In millions, except per share data)\n", "Consolidated Statement of Operations \n", "Data: \n", "Revenue ....................................................... $ 5,010 $ 4,682 $ 4,130 $ 4,280 $ 3,998\n", "Income from operations............................... $ 747 $ 759 $ 496 $ 648 $ 648\n", "Net income................................................... $ 614 $ 631 $ 440 $ 563 $ 581\n", "Net income per share:..................................\n", "Basic ..................................................... $ 1.13 $ 1.14 $ 0.75 $ 0.91 $ 0.96\n", "Diluted.............................\n", "\n", "================================================================================\n", "FINAL EXTRACTION:\n", "Gross profit = $2,811 million\n", "================================================================================\n" ] } ], "source": [ "# ========================\n", "# REBUILDABLE KNOWLEDGE BASE - Large Chunks + Correct Year Metadata\n", "# ========================\n", "\n", "from pathlib import Path\n", "from langchain_community.document_loaders import DirectoryLoader, PyPDFLoader\n", "from langchain_chroma import Chroma\n", "from langchain_huggingface import HuggingFaceEmbeddings\n", "from langchain_text_splitters import RecursiveCharacterTextSplitter\n", "from chromadb.config import Settings\n", "import chromadb\n", "import os\n", "import re\n", "import torch\n", "\n", "# Config is defined in Cell-4, but keep a fallback for rerunning this cell by itself.\n", "PROJECT_DIR = Path.cwd()\n", "SOURCE_DATA_DIR = str(PROJECT_DIR / \"Nvidia_Annual_Reports_2014-2025\")\n", "DRIVE_DB_PATH = str(PROJECT_DIR / \"chroma_db_v2\")\n", "EMBEDDING_MODEL = \"all-mpnet-base-v2\"\n", "COLLECTION_NAME = \"nvidia_annual_reports_2014_2025\"\n", "\n", "source_dir = Path(SOURCE_DATA_DIR)\n", "if not source_dir.exists():\n", " raise FileNotFoundError(f\"Report folder not found: {source_dir}\")\n", "\n", "device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n", "embeddings = HuggingFaceEmbeddings(model_name=EMBEDDING_MODEL, model_kwargs={\"device\": device})\n", "persistent_client = chromadb.PersistentClient(path=DRIVE_DB_PATH, settings=Settings(allow_reset=True))\n", "\n", "def extract_report_year(source_path: str):\n", " \"\"\"Extract the report year from the filename, not from parent folders like 2014-2025.\"\"\"\n", " filename = Path(source_path).name\n", " match = re.search(r\"NVIDIA-(\\d{4})-Annual-Report\\.pdf$\", filename, flags=re.IGNORECASE)\n", " if match:\n", " return int(match.group(1))\n", " fallback = re.search(r\"(?:19|20)\\d{2}\", filename)\n", " return int(fallback.group(0)) if fallback else None\n", "\n", "def expected_report_years():\n", " return sorted(\n", " year for year in (extract_report_year(str(path)) for path in source_dir.glob(\"*.pdf\"))\n", " if year is not None\n", " )\n", "\n", "def collection_needs_rebuild(collection_name: str):\n", " existing = [c.name for c in persistent_client.list_collections()]\n", " if collection_name not in existing:\n", " return True, \"collection does not exist\"\n", "\n", " collection = persistent_client.get_collection(collection_name)\n", " if collection.count() == 0:\n", " return True, \"collection is empty\"\n", "\n", " data = collection.get(include=[\"metadatas\"])\n", " metadatas = data.get(\"metadatas\", [])\n", " indexed_years = sorted({m.get(\"year\") for m in metadatas if m.get(\"year\") is not None}) # type: ignore\n", " expected_years = expected_report_years()\n", "\n", " current_root = str(source_dir.resolve()).lower()\n", " indexed_sources = [str(m.get(\"source\", \"\")) for m in metadatas] # type: ignore\n", " sources_match_current_folder = any(src.lower().startswith(current_root) for src in indexed_sources)\n", "\n", " if indexed_years != expected_years:\n", " return True, f\"indexed years {indexed_years} do not match PDFs {expected_years}\"\n", " if not sources_match_current_folder:\n", " return True, \"collection points to an old project folder\"\n", "\n", " return False, f\"collection is current with years {indexed_years}\"\n", "\n", "def build_or_load(force_rebuild: bool = False):\n", " needs_rebuild, reason = collection_needs_rebuild(COLLECTION_NAME)\n", "\n", " if force_rebuild or needs_rebuild:\n", " if COLLECTION_NAME in [c.name for c in persistent_client.list_collections()]:\n", " print(f\"?? Rebuilding Chroma collection: {reason}\")\n", " persistent_client.delete_collection(COLLECTION_NAME)\n", " else:\n", " print(f\"??? Building Chroma collection: {reason}\")\n", "\n", " loader = DirectoryLoader(str(source_dir), glob=\"*.pdf\", loader_cls=PyPDFLoader, show_progress=True) # type: ignore\n", " docs = loader.load()\n", "\n", " for doc in docs:\n", " year = extract_report_year(doc.metadata.get(\"source\", \"\"))\n", " if year is not None:\n", " doc.metadata[\"year\"] = year\n", " doc.metadata[\"source_type\"] = \"annual_report\"\n", " doc.metadata[\"source_folder\"] = str(source_dir.resolve())\n", "\n", " splitter = RecursiveCharacterTextSplitter(chunk_size=2500, chunk_overlap=600)\n", " split_docs = splitter.split_documents(docs)\n", "\n", " vectorstore = Chroma.from_documents(\n", " documents=split_docs,\n", " embedding=embeddings,\n", " client=persistent_client,\n", " collection_name=COLLECTION_NAME,\n", " )\n", " print(f\"?? Built {vectorstore._collection.count()} chunks from {len(expected_report_years())} annual reports\")\n", " return vectorstore\n", "\n", " print(f\"? Loading existing collection: {reason}\")\n", " return Chroma(client=persistent_client, collection_name=COLLECTION_NAME, embedding_function=embeddings)\n", "\n", "vectorstore = build_or_load()\n", "\n", "# ========================\n", "# QUICK VALIDATION TEST\n", "# ========================\n", "validation = vectorstore._collection.get(where={\"year\": 2016}, limit=3, include=[\"metadatas\", \"documents\"])\n", "print(f\"2016 chunks available: {len(validation.get('ids', []))} sample rows returned\")\n", "for metadata in validation.get(\"metadatas\", []): # type: ignore\n", " print(f\" - {Path(metadata.get('source', '')).name}, page {metadata.get('page_label', metadata.get('page'))}\") # type: ignore\n", "\n", "retriever = vectorstore.as_retriever(\n", " search_type=\"similarity\",\n", " search_kwargs={\"k\": 10, \"filter\": {\"year\": 2016}}\n", ")\n", "\n", "docs = retriever.invoke(\"gross profit fiscal year 2016 Consolidated Statements of Income revenue cost of revenue amount in millions\")\n", "context = \"\\n\\n\".join([doc.page_content for doc in docs])\n", "\n", "print(\"Raw Context Preview:\")\n", "print(context[:1500] + \"...\")\n", "\n", "from langchain_core.prompts import ChatPromptTemplate\n", "prompt = ChatPromptTemplate.from_template(\"\"\"\n", "You are an expert financial analyst. Extract the exact Gross Profit number for fiscal year 2016 from the context.\n", "Look carefully for any table row containing \"Gross profit\" or \"gross profit\".\n", "Answer in this format only: Gross profit = $X,XXX million\n", "\n", "Context:\n", "{context}\n", "\"\"\")\n", "\n", "result = (prompt | llm).invoke({\"context\": context})\n", "print(\"\\n\" + \"=\"*80)\n", "print(\"FINAL EXTRACTION:\")\n", "print(result.content)\n", "print(\"=\"*80)\n" ] }, { "cell_type": "code", "execution_count": 6, "id": "016e63e1", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "?? Testing 2017 Financial Status...\n", "\n", "? Final Answer:\n", "For fiscal year 2017, NVIDIA’s overall financial status was strong.\n", "\n", "- Revenue: $6.91 billion\n", "- Net income: $1.666 billion\n", "- Income from operations: $1.934 billion\n", "- Gross profit: $4.063 billion\n", "- Cash, cash equivalents, and marketable securities: $6.80 billion as of January 29, 2017\n", "- Total assets: $9.841 billion as of January 29, 2017\n", "\n", "The filing also states that net income and diluted EPS increased significantly year over year, driven by strong revenue growth, improved gross and operating margins, and a lower effective tax rate.\n", "Sources: ['NVIDIA-2017-Annual-Report.pdf p.1', 'NVIDIA-2017-Annual-Report.pdf p.10', 'NVIDIA-2017-Annual-Report.pdf p.101', 'NVIDIA-2017-Annual-Report.pdf p.106', 'NVIDIA-2017-Annual-Report.pdf p.127', 'NVIDIA-2017-Annual-Report.pdf p.129', 'NVIDIA-2017-Annual-Report.pdf p.131', 'NVIDIA-2017-Annual-Report.pdf p.133', 'NVIDIA-2017-Annual-Report.pdf p.163', 'NVIDIA-2017-Annual-Report.pdf p.17', 'NVIDIA-2017-Annual-Report.pdf p.79', 'NVIDIA-2017-Annual-Report.pdf p.9']\n", "\n", "================================================================================\n", "Gross Profit 2016 Test:\n", "NVIDIA's gross profit in fiscal year 2016 was **$2,811 million**.\n", "Sources: ['NVIDIA-2016-Annual-Report.pdf p.169', 'NVIDIA-2016-Annual-Report.pdf p.176', 'NVIDIA-2016-Annual-Report.pdf p.191', 'NVIDIA-2016-Annual-Report.pdf p.195', 'NVIDIA-2016-Annual-Report.pdf p.197', 'NVIDIA-2016-Annual-Report.pdf p.200', 'NVIDIA-2016-Annual-Report.pdf p.209', 'NVIDIA-2016-Annual-Report.pdf p.211', 'NVIDIA-2016-Annual-Report.pdf p.224', 'NVIDIA-2016-Annual-Report.pdf p.229', 'NVIDIA-2016-Annual-Report.pdf p.231', 'NVIDIA-2016-Annual-Report.pdf p.233']\n" ] } ], "source": [ "# ========================\n", "# FIXED RETRIEVAL CHAIN (Correct Metadata + Fallback Retrieval)\n", "# ========================\n", "\n", "from pathlib import Path\n", "from langchain_core.prompts import ChatPromptTemplate\n", "import re\n", "\n", "KNOWN_REPORT_YEARS = set(expected_report_years())\n", "\n", "def detect_year(query: str):\n", " \"\"\"Detect 2014-2025 style years and FY16/FY2016 style fiscal-year references.\"\"\"\n", " full_year = re.search(r\"\\b((?:19|20)\\d{2})\\b\", query)\n", " if full_year:\n", " return int(full_year.group(1))\n", "\n", " short_fy = re.search(r\"\\bFY\\s*'?([0-9]{2})\\b\", query, flags=re.IGNORECASE)\n", " if short_fy:\n", " year = 2000 + int(short_fy.group(1))\n", " return year if year in KNOWN_REPORT_YEARS else None\n", "\n", " return None\n", "\n", "def build_filter(year):\n", " if year:\n", " return {\"$and\": [{\"source_type\": \"annual_report\"}, {\"year\": year}]}\n", " return {\"source_type\": \"annual_report\"}\n", "\n", "def retrieve_docs(query: str, year=None, k: int = 12):\n", " filter_dict = build_filter(year)\n", "\n", " # Similarity search is less brittle than similarity_score_threshold for scanned/table-heavy PDFs.\n", " retriever = vectorstore.as_retriever(\n", " search_type=\"similarity\",\n", " search_kwargs={\"k\": k, \"filter\": filter_dict}\n", " )\n", " docs = retriever.invoke(query)\n", "\n", " if docs:\n", " return docs\n", "\n", " # Last-resort fallback: keep the answer honest, but allow retrieval without the year filter.\n", " fallback = vectorstore.as_retriever(search_type=\"similarity\", search_kwargs={\"k\": k})\n", " return fallback.invoke(query)\n", "\n", "def run_retrieval_chain(query: str):\n", " \"\"\"Reliable annual-report RAG chain with year metadata and empty-context protection.\"\"\"\n", " try:\n", " year = detect_year(query)\n", " expanded_query = query\n", " if \"gross profit\" in query.lower():\n", " expanded_query += \" Consolidated Statements of Income revenue cost of revenue amount in millions\"\n", "\n", " docs = retrieve_docs(expanded_query, year=year)\n", " if not docs:\n", " return {\"answer\": \"I could not retrieve relevant annual-report context for this question.\"}\n", "\n", " context = \"\\n\\n\".join([doc.page_content for doc in docs])\n", " sources = sorted({\n", " f\"{Path(doc.metadata.get('source', '')).name} p.{doc.metadata.get('page_label', doc.metadata.get('page'))}\"\n", " for doc in docs\n", " })\n", "\n", " prompt = ChatPromptTemplate.from_template(\"\"\"\n", " You are NVIDIA's expert financial analyst.\n", " Use only the context below. Answer accurately with exact numbers when available.\n", " If the context does not contain the answer, say you cannot answer from the retrieved documents.\n", "\n", " Context:\n", " {context}\n", "\n", " Question: {query}\n", "\n", " Answer:\n", " \"\"\")\n", "\n", " result = (prompt | llm).invoke({\"context\": context, \"query\": query})\n", " return {\"answer\": result.content, \"sources\": sources}\n", "\n", " except Exception as e:\n", " return {\"answer\": f\"Error: {str(e)}\"}\n", "\n", "# ========================\n", "# TEST\n", "# ========================\n", "print(\"?? Testing 2017 Financial Status...\\n\")\n", "response = run_retrieval_chain(\"What is Nvidia's overall financial status and revenue for financial year 2017?\")\n", "print(f\"? Final Answer:\\n{response['answer']}\")\n", "print(\"Sources:\", response.get(\"sources\", []))\n", "\n", "print(\"\\n\" + \"=\"*80)\n", "response2 = run_retrieval_chain(\"What was Nvidia's gross profit in 2016?\")\n", "print(f\"Gross Profit 2016 Test:\\n{response2['answer']}\")\n", "print(\"Sources:\", response2.get(\"sources\", []))\n" ] }, { "cell_type": "code", "execution_count": 7, "id": "596b3f5b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "📥 Downloading NVDA data from 2014-01-01 to None...\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[*********************100%***********************] 1 of 1 completed" ] }, { "name": "stdout", "output_type": "stream", "text": [ "✅ Download complete! Shape: (3116, 6)\n", "Price Date Open High Low Close Volume\n", "Ticker NVDA NVDA NVDA NVDA NVDA\n", "0 2014-01-02 0.375258 0.376672 0.370544 0.373844 260092000\n", "1 2014-01-03 0.374551 0.375258 0.368187 0.369365 259332000\n", "2 2014-01-06 0.373137 0.377144 0.369601 0.374315 409492000\n", "3 2014-01-07 0.378087 0.381858 0.375494 0.380444 333288000\n", "4 2014-01-08 0.381858 0.387515 0.380444 0.385629 308192000\n", "Price Date Open High Low Close Volume\n", "Ticker NVDA NVDA NVDA NVDA NVDA\n", "3111 2026-05-18 229.869995 230.000000 218.369995 222.320007 146280900\n", "3112 2026-05-19 219.619995 224.479996 217.910004 220.610001 140948200\n", "3113 2026-05-20 223.179993 226.130005 220.500000 223.470001 184201600\n", "3114 2026-05-21 222.289993 227.399994 217.929993 219.509995 203381800\n", "3115 2026-05-22 220.899994 221.009995 214.800003 215.330002 168346300\n", "💾 Saved to: nvda_2014_to_2026.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "# ========================\n", "# DOWNLOAD NVIDIA HISTORICAL DATA (2014–2025)\n", "# ========================\n", "\n", "import yfinance as yf\n", "import pandas as pd\n", "from datetime import datetime\n", "\n", "# Define ticker and date range\n", "ticker = \"NVDA\"\n", "start_date = \"2014-01-01\"\n", "end_date = None # or leave as None for latest data\n", "\n", "print(f\"📥 Downloading {ticker} data from {start_date} to {end_date}...\")\n", "\n", "# Download data\n", "df = yf.download(\n", " tickers=ticker,\n", " start=start_date,\n", " end=end_date,\n", " interval=\"1d\", # daily\n", " auto_adjust=True, # adjust for splits & dividends\n", " progress=True\n", ")\n", "\n", "# Basic cleaning & feature engineering (great for your ML model)\n", "df = df.reset_index() # type: ignore\n", "df = df[['Date', 'Open', 'High', 'Low', 'Close', 'Volume']]\n", "df['Date'] = pd.to_datetime(df['Date'])\n", "\n", "# Add useful columns for time-series / Prophet / LSTM\n", "# df['Year'] = df['Date'].dt.year\n", "# df['Month'] = df['Date'].dt.month\n", "# df['DayOfWeek'] = df['Date'].dt.dayofweek\n", "# df['Return'] = df['Close'].pct_change()\n", "# df['MA7'] = df['Close'].rolling(window=7).mean() # 7-day moving average\n", "# df['MA30'] = df['Close'].rolling(window=30).mean()\n", "\n", "print(f\"✅ Download complete! Shape: {df.shape}\")\n", "print(df.head())\n", "print(df.tail())\n", "\n", "# Save to CSV (perfect for your notebook & app.py)\n", "output_file = f\"nvda_{start_date[:4]}_to_{datetime.now().strftime('%Y')}.csv\"\n", "df.to_csv(output_file, index=False)\n", "print(f\"💾 Saved to: {output_file}\")" ] }, { "cell_type": "code", "execution_count": 8, "id": "d4bd31fc", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training Prophet + residual ML ensemble with expanded hyperparameter tuning...\n", "Cleaned dataset: 3087 trading days | Latest close: $215.33\n", "\n", "Stage 1: broad holdout tuning across 120 Prophet candidates...\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:56:30 - cmdstanpy - INFO - Chain [1] start processing\n", "12:56:32 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.05, 'seasonality_prior_scale': 0.01, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'additive'} MAPE=2.50% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:56:33 - cmdstanpy - INFO - Chain [1] start processing\n", "12:56:34 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.05, 'seasonality_prior_scale': 0.01, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'multiplicative'} MAPE=2.68% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:56:35 - cmdstanpy - INFO - Chain [1] start processing\n", "12:56:37 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.05, 'seasonality_prior_scale': 0.01, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'additive'} MAPE=2.49% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:56:38 - cmdstanpy - INFO - Chain [1] start processing\n", "12:56:40 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.05, 'seasonality_prior_scale': 0.01, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'multiplicative'} MAPE=2.68% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:56:40 - cmdstanpy - INFO - Chain [1] start processing\n", "12:56:42 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.05, 'seasonality_prior_scale': 0.01, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'additive'} MAPE=2.49% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:56:43 - cmdstanpy - INFO - Chain [1] start processing\n", "12:56:46 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.05, 'seasonality_prior_scale': 0.01, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'multiplicative'} MAPE=2.68% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:56:47 - cmdstanpy - INFO - Chain [1] start processing\n", "12:56:50 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.05, 'seasonality_prior_scale': 0.1, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'additive'} MAPE=2.50% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:56:51 - cmdstanpy - INFO - Chain [1] start processing\n", "12:56:55 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.05, 'seasonality_prior_scale': 0.1, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'multiplicative'} MAPE=2.69% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:56:55 - cmdstanpy - INFO - Chain [1] start processing\n", "12:56:58 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.05, 'seasonality_prior_scale': 0.1, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'additive'} MAPE=2.49% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:56:59 - cmdstanpy - INFO - Chain [1] start processing\n", "12:57:04 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.05, 'seasonality_prior_scale': 0.1, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'multiplicative'} MAPE=2.52% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:57:04 - cmdstanpy - INFO - Chain [1] start processing\n", "12:57:06 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.05, 'seasonality_prior_scale': 0.1, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'additive'} MAPE=2.49% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:57:07 - cmdstanpy - INFO - Chain [1] start processing\n", "12:57:11 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.05, 'seasonality_prior_scale': 0.1, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'multiplicative'} MAPE=2.52% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:57:11 - cmdstanpy - INFO - Chain [1] start processing\n", "12:57:14 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.05, 'seasonality_prior_scale': 1.0, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'additive'} MAPE=2.50% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:57:14 - cmdstanpy - INFO - Chain [1] start processing\n", "12:57:16 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.05, 'seasonality_prior_scale': 1.0, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'multiplicative'} MAPE=2.67% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:57:16 - cmdstanpy - INFO - Chain [1] start processing\n", "12:57:18 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.05, 'seasonality_prior_scale': 1.0, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'additive'} MAPE=2.49% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:57:19 - cmdstanpy - INFO - Chain [1] start processing\n", "12:57:25 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.05, 'seasonality_prior_scale': 1.0, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'multiplicative'} MAPE=2.53% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:57:25 - cmdstanpy - INFO - Chain [1] start processing\n", "12:57:28 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.05, 'seasonality_prior_scale': 1.0, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'additive'} MAPE=2.49% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:57:29 - cmdstanpy - INFO - Chain [1] start processing\n", "12:57:31 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.05, 'seasonality_prior_scale': 1.0, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'multiplicative'} MAPE=2.68% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:57:32 - cmdstanpy - INFO - Chain [1] start processing\n", "12:57:34 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.05, 'seasonality_prior_scale': 10.0, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'additive'} MAPE=2.50% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:57:35 - cmdstanpy - INFO - Chain [1] start processing\n", "12:57:40 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.05, 'seasonality_prior_scale': 10.0, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'multiplicative'} MAPE=2.61% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:57:40 - cmdstanpy - INFO - Chain [1] start processing\n", "12:57:43 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.05, 'seasonality_prior_scale': 10.0, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'additive'} MAPE=2.49% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:57:43 - cmdstanpy - INFO - Chain [1] start processing\n", "12:57:49 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.05, 'seasonality_prior_scale': 10.0, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'multiplicative'} MAPE=2.53% DirAcc=79.3%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:57:50 - cmdstanpy - INFO - Chain [1] start processing\n", "12:57:53 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.05, 'seasonality_prior_scale': 10.0, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'additive'} MAPE=2.49% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:57:53 - cmdstanpy - INFO - Chain [1] start processing\n", "12:57:59 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.05, 'seasonality_prior_scale': 10.0, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'multiplicative'} MAPE=2.54% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:57:59 - cmdstanpy - INFO - Chain [1] start processing\n", "12:58:01 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.1, 'seasonality_prior_scale': 0.01, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'additive'} MAPE=2.49% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:58:02 - cmdstanpy - INFO - Chain [1] start processing\n", "12:58:03 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.1, 'seasonality_prior_scale': 0.01, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'multiplicative'} MAPE=2.62% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:58:04 - cmdstanpy - INFO - Chain [1] start processing\n", "12:58:06 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.1, 'seasonality_prior_scale': 0.01, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'additive'} MAPE=2.48% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:58:06 - cmdstanpy - INFO - Chain [1] start processing\n", "12:58:09 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.1, 'seasonality_prior_scale': 0.01, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'multiplicative'} MAPE=2.67% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:58:10 - cmdstanpy - INFO - Chain [1] start processing\n", "12:58:11 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.1, 'seasonality_prior_scale': 0.01, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'additive'} MAPE=2.48% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:58:12 - cmdstanpy - INFO - Chain [1] start processing\n", "12:58:13 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.1, 'seasonality_prior_scale': 0.01, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'multiplicative'} MAPE=2.65% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:58:14 - cmdstanpy - INFO - Chain [1] start processing\n", "12:58:15 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.1, 'seasonality_prior_scale': 0.1, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'additive'} MAPE=2.49% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:58:16 - cmdstanpy - INFO - Chain [1] start processing\n", "12:58:18 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.1, 'seasonality_prior_scale': 0.1, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'multiplicative'} MAPE=2.66% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:58:19 - cmdstanpy - INFO - Chain [1] start processing\n", "12:58:21 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.1, 'seasonality_prior_scale': 0.1, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'additive'} MAPE=2.48% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:58:21 - cmdstanpy - INFO - Chain [1] start processing\n", "12:58:22 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.1, 'seasonality_prior_scale': 0.1, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'multiplicative'} MAPE=2.67% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:58:23 - cmdstanpy - INFO - Chain [1] start processing\n", "12:58:25 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.1, 'seasonality_prior_scale': 0.1, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'additive'} MAPE=2.48% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:58:25 - cmdstanpy - INFO - Chain [1] start processing\n", "12:58:27 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.1, 'seasonality_prior_scale': 0.1, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'multiplicative'} MAPE=2.66% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:58:28 - cmdstanpy - INFO - Chain [1] start processing\n", "12:58:29 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.1, 'seasonality_prior_scale': 1.0, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'additive'} MAPE=2.49% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:58:29 - cmdstanpy - INFO - Chain [1] start processing\n", "12:58:31 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.1, 'seasonality_prior_scale': 1.0, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'multiplicative'} MAPE=2.67% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:58:32 - cmdstanpy - INFO - Chain [1] start processing\n", "12:58:33 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.1, 'seasonality_prior_scale': 1.0, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'additive'} MAPE=2.48% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:58:34 - cmdstanpy - INFO - Chain [1] start processing\n", "12:58:35 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.1, 'seasonality_prior_scale': 1.0, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'multiplicative'} MAPE=2.66% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:58:35 - cmdstanpy - INFO - Chain [1] start processing\n", "12:58:37 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.1, 'seasonality_prior_scale': 1.0, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'additive'} MAPE=2.48% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:58:37 - cmdstanpy - INFO - Chain [1] start processing\n", "12:58:39 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.1, 'seasonality_prior_scale': 1.0, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'multiplicative'} MAPE=2.67% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:58:39 - cmdstanpy - INFO - Chain [1] start processing\n", "12:58:41 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.1, 'seasonality_prior_scale': 10.0, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'additive'} MAPE=2.48% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:58:41 - cmdstanpy - INFO - Chain [1] start processing\n", "12:58:43 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.1, 'seasonality_prior_scale': 10.0, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'multiplicative'} MAPE=2.67% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:58:43 - cmdstanpy - INFO - Chain [1] start processing\n", "12:58:44 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.1, 'seasonality_prior_scale': 10.0, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'additive'} MAPE=2.48% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:58:45 - cmdstanpy - INFO - Chain [1] start processing\n", "12:58:46 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.1, 'seasonality_prior_scale': 10.0, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'multiplicative'} MAPE=2.67% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:58:47 - cmdstanpy - INFO - Chain [1] start processing\n", "12:58:48 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.1, 'seasonality_prior_scale': 10.0, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'additive'} MAPE=2.48% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:58:48 - cmdstanpy - INFO - Chain [1] start processing\n", "12:58:50 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.1, 'seasonality_prior_scale': 10.0, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'multiplicative'} MAPE=2.66% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:58:50 - cmdstanpy - INFO - Chain [1] start processing\n", "12:58:52 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.5, 'seasonality_prior_scale': 0.01, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'additive'} MAPE=2.48% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:58:52 - cmdstanpy - INFO - Chain [1] start processing\n", "12:58:54 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.5, 'seasonality_prior_scale': 0.01, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'multiplicative'} MAPE=2.66% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:58:55 - cmdstanpy - INFO - Chain [1] start processing\n", "12:58:57 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.5, 'seasonality_prior_scale': 0.01, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'additive'} MAPE=2.47% DirAcc=79.3%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:58:57 - cmdstanpy - INFO - Chain [1] start processing\n", "12:58:59 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.5, 'seasonality_prior_scale': 0.01, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'multiplicative'} MAPE=2.63% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:58:59 - cmdstanpy - INFO - Chain [1] start processing\n", "12:59:01 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.5, 'seasonality_prior_scale': 0.01, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'additive'} MAPE=2.47% DirAcc=79.3%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:59:01 - cmdstanpy - INFO - Chain [1] start processing\n", "12:59:03 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.5, 'seasonality_prior_scale': 0.01, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'multiplicative'} MAPE=2.66% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:59:03 - cmdstanpy - INFO - Chain [1] start processing\n", "12:59:05 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.5, 'seasonality_prior_scale': 0.1, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'additive'} MAPE=2.48% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:59:06 - cmdstanpy - INFO - Chain [1] start processing\n", "12:59:07 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.5, 'seasonality_prior_scale': 0.1, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'multiplicative'} MAPE=2.64% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:59:07 - cmdstanpy - INFO - Chain [1] start processing\n", "12:59:09 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.5, 'seasonality_prior_scale': 0.1, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'additive'} MAPE=2.47% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:59:09 - cmdstanpy - INFO - Chain [1] start processing\n", "12:59:11 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.5, 'seasonality_prior_scale': 0.1, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'multiplicative'} MAPE=2.64% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:59:11 - cmdstanpy - INFO - Chain [1] start processing\n", "12:59:13 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.5, 'seasonality_prior_scale': 0.1, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'additive'} MAPE=2.46% DirAcc=79.3%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:59:13 - cmdstanpy - INFO - Chain [1] start processing\n", "12:59:15 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.5, 'seasonality_prior_scale': 0.1, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'multiplicative'} MAPE=2.64% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:59:15 - cmdstanpy - INFO - Chain [1] start processing\n", "12:59:17 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.5, 'seasonality_prior_scale': 1.0, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'additive'} MAPE=2.47% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:59:18 - cmdstanpy - INFO - Chain [1] start processing\n", "12:59:19 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.5, 'seasonality_prior_scale': 1.0, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'multiplicative'} MAPE=2.66% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:59:20 - cmdstanpy - INFO - Chain [1] start processing\n", "12:59:21 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.5, 'seasonality_prior_scale': 1.0, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'additive'} MAPE=2.47% DirAcc=79.3%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:59:22 - cmdstanpy - INFO - Chain [1] start processing\n", "12:59:23 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.5, 'seasonality_prior_scale': 1.0, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'multiplicative'} MAPE=2.67% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:59:24 - cmdstanpy - INFO - Chain [1] start processing\n", "12:59:25 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.5, 'seasonality_prior_scale': 1.0, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'additive'} MAPE=2.47% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:59:26 - cmdstanpy - INFO - Chain [1] start processing\n", "12:59:27 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.5, 'seasonality_prior_scale': 1.0, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'multiplicative'} MAPE=2.63% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:59:27 - cmdstanpy - INFO - Chain [1] start processing\n", "12:59:29 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.5, 'seasonality_prior_scale': 10.0, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'additive'} MAPE=2.47% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:59:29 - cmdstanpy - INFO - Chain [1] start processing\n", "12:59:31 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.5, 'seasonality_prior_scale': 10.0, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'multiplicative'} MAPE=2.65% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:59:31 - cmdstanpy - INFO - Chain [1] start processing\n", "12:59:33 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.5, 'seasonality_prior_scale': 10.0, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'additive'} MAPE=2.46% DirAcc=79.3%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:59:33 - cmdstanpy - INFO - Chain [1] start processing\n", "12:59:35 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.5, 'seasonality_prior_scale': 10.0, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'multiplicative'} MAPE=2.64% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:59:35 - cmdstanpy - INFO - Chain [1] start processing\n", "12:59:37 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.5, 'seasonality_prior_scale': 10.0, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'additive'} MAPE=2.47% DirAcc=79.3%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:59:38 - cmdstanpy - INFO - Chain [1] start processing\n", "12:59:40 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.5, 'seasonality_prior_scale': 10.0, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'multiplicative'} MAPE=2.65% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:59:40 - cmdstanpy - INFO - Chain [1] start processing\n", "12:59:43 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.8, 'seasonality_prior_scale': 0.01, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'additive'} MAPE=2.48% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:59:44 - cmdstanpy - INFO - Chain [1] start processing\n", "12:59:47 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.8, 'seasonality_prior_scale': 0.01, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'multiplicative'} MAPE=2.63% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:59:47 - cmdstanpy - INFO - Chain [1] start processing\n", "12:59:50 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.8, 'seasonality_prior_scale': 0.01, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'additive'} MAPE=2.46% DirAcc=79.3%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:59:50 - cmdstanpy - INFO - Chain [1] start processing\n", "12:59:52 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.8, 'seasonality_prior_scale': 0.01, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'multiplicative'} MAPE=2.63% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:59:52 - cmdstanpy - INFO - Chain [1] start processing\n", "12:59:54 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.8, 'seasonality_prior_scale': 0.01, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'additive'} MAPE=2.47% DirAcc=79.3%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:59:55 - cmdstanpy - INFO - Chain [1] start processing\n", "12:59:57 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.8, 'seasonality_prior_scale': 0.01, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'multiplicative'} MAPE=2.64% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "12:59:58 - cmdstanpy - INFO - Chain [1] start processing\n", "13:00:00 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.8, 'seasonality_prior_scale': 0.1, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'additive'} MAPE=2.48% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:00:00 - cmdstanpy - INFO - Chain [1] start processing\n", "13:00:02 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.8, 'seasonality_prior_scale': 0.1, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'multiplicative'} MAPE=2.65% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:00:03 - cmdstanpy - INFO - Chain [1] start processing\n", "13:00:04 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.8, 'seasonality_prior_scale': 0.1, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'additive'} MAPE=2.47% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:00:05 - cmdstanpy - INFO - Chain [1] start processing\n", "13:00:07 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.8, 'seasonality_prior_scale': 0.1, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'multiplicative'} MAPE=2.65% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:00:07 - cmdstanpy - INFO - Chain [1] start processing\n", "13:00:10 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.8, 'seasonality_prior_scale': 0.1, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'additive'} MAPE=2.47% DirAcc=79.3%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:00:10 - cmdstanpy - INFO - Chain [1] start processing\n", "13:00:12 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.8, 'seasonality_prior_scale': 0.1, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'multiplicative'} MAPE=2.67% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:00:13 - cmdstanpy - INFO - Chain [1] start processing\n", "13:00:16 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.8, 'seasonality_prior_scale': 1.0, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'additive'} MAPE=2.48% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:00:16 - cmdstanpy - INFO - Chain [1] start processing\n", "13:00:19 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.8, 'seasonality_prior_scale': 1.0, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'multiplicative'} MAPE=2.63% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:00:20 - cmdstanpy - INFO - Chain [1] start processing\n", "13:00:23 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.8, 'seasonality_prior_scale': 1.0, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'additive'} MAPE=2.46% DirAcc=79.3%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:00:24 - cmdstanpy - INFO - Chain [1] start processing\n", "13:00:28 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.8, 'seasonality_prior_scale': 1.0, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'multiplicative'} MAPE=2.65% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:00:29 - cmdstanpy - INFO - Chain [1] start processing\n", "13:00:33 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.8, 'seasonality_prior_scale': 1.0, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'additive'} MAPE=2.47% DirAcc=79.3%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:00:34 - cmdstanpy - INFO - Chain [1] start processing\n", "13:00:35 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.8, 'seasonality_prior_scale': 1.0, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'multiplicative'} MAPE=2.61% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:00:35 - cmdstanpy - INFO - Chain [1] start processing\n", "13:00:38 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.8, 'seasonality_prior_scale': 10.0, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'additive'} MAPE=2.48% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:00:38 - cmdstanpy - INFO - Chain [1] start processing\n", "13:00:41 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.8, 'seasonality_prior_scale': 10.0, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'multiplicative'} MAPE=2.64% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:00:42 - cmdstanpy - INFO - Chain [1] start processing\n", "13:00:45 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.8, 'seasonality_prior_scale': 10.0, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'additive'} MAPE=2.47% DirAcc=79.3%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:00:45 - cmdstanpy - INFO - Chain [1] start processing\n", "13:00:47 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.8, 'seasonality_prior_scale': 10.0, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'multiplicative'} MAPE=2.63% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:00:48 - cmdstanpy - INFO - Chain [1] start processing\n", "13:00:51 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.8, 'seasonality_prior_scale': 10.0, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'additive'} MAPE=2.47% DirAcc=79.3%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:00:51 - cmdstanpy - INFO - Chain [1] start processing\n", "13:00:54 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 0.8, 'seasonality_prior_scale': 10.0, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'multiplicative'} MAPE=2.66% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:00:54 - cmdstanpy - INFO - Chain [1] start processing\n", "13:00:57 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 1.0, 'seasonality_prior_scale': 0.01, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'additive'} MAPE=2.48% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:00:57 - cmdstanpy - INFO - Chain [1] start processing\n", "13:00:58 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 1.0, 'seasonality_prior_scale': 0.01, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'multiplicative'} MAPE=2.62% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:00:58 - cmdstanpy - INFO - Chain [1] start processing\n", "13:01:00 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 1.0, 'seasonality_prior_scale': 0.01, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'additive'} MAPE=2.47% DirAcc=79.3%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:01:00 - cmdstanpy - INFO - Chain [1] start processing\n", "13:01:02 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 1.0, 'seasonality_prior_scale': 0.01, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'multiplicative'} MAPE=2.63% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:01:02 - cmdstanpy - INFO - Chain [1] start processing\n", "13:01:04 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 1.0, 'seasonality_prior_scale': 0.01, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'additive'} MAPE=2.47% DirAcc=79.3%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:01:04 - cmdstanpy - INFO - Chain [1] start processing\n", "13:01:05 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 1.0, 'seasonality_prior_scale': 0.01, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'multiplicative'} MAPE=2.63% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:01:06 - cmdstanpy - INFO - Chain [1] start processing\n", "13:01:08 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 1.0, 'seasonality_prior_scale': 0.1, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'additive'} MAPE=2.47% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:01:08 - cmdstanpy - INFO - Chain [1] start processing\n", "13:01:10 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 1.0, 'seasonality_prior_scale': 0.1, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'multiplicative'} MAPE=2.62% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:01:10 - cmdstanpy - INFO - Chain [1] start processing\n", "13:01:12 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 1.0, 'seasonality_prior_scale': 0.1, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'additive'} MAPE=2.47% DirAcc=79.3%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:01:12 - cmdstanpy - INFO - Chain [1] start processing\n", "13:01:13 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 1.0, 'seasonality_prior_scale': 0.1, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'multiplicative'} MAPE=2.67% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:01:14 - cmdstanpy - INFO - Chain [1] start processing\n", "13:01:15 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 1.0, 'seasonality_prior_scale': 0.1, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'additive'} MAPE=2.47% DirAcc=79.3%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:01:16 - cmdstanpy - INFO - Chain [1] start processing\n", "13:01:17 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 1.0, 'seasonality_prior_scale': 0.1, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'multiplicative'} MAPE=2.62% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:01:17 - cmdstanpy - INFO - Chain [1] start processing\n", "13:01:19 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 1.0, 'seasonality_prior_scale': 1.0, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'additive'} MAPE=2.48% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:01:19 - cmdstanpy - INFO - Chain [1] start processing\n", "13:01:21 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 1.0, 'seasonality_prior_scale': 1.0, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'multiplicative'} MAPE=2.65% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:01:21 - cmdstanpy - INFO - Chain [1] start processing\n", "13:01:22 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 1.0, 'seasonality_prior_scale': 1.0, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'additive'} MAPE=2.47% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:01:23 - cmdstanpy - INFO - Chain [1] start processing\n", "13:01:24 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 1.0, 'seasonality_prior_scale': 1.0, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'multiplicative'} MAPE=2.66% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:01:24 - cmdstanpy - INFO - Chain [1] start processing\n", "13:01:26 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 1.0, 'seasonality_prior_scale': 1.0, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'additive'} MAPE=2.47% DirAcc=79.3%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:01:26 - cmdstanpy - INFO - Chain [1] start processing\n", "13:01:27 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 1.0, 'seasonality_prior_scale': 1.0, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'multiplicative'} MAPE=2.62% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:01:28 - cmdstanpy - INFO - Chain [1] start processing\n", "13:01:29 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 1.0, 'seasonality_prior_scale': 10.0, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'additive'} MAPE=2.48% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:01:29 - cmdstanpy - INFO - Chain [1] start processing\n", "13:01:30 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 1.0, 'seasonality_prior_scale': 10.0, 'holidays_prior_scale': 0.1, 'seasonality_mode': 'multiplicative'} MAPE=2.62% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:01:31 - cmdstanpy - INFO - Chain [1] start processing\n", "13:01:32 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 1.0, 'seasonality_prior_scale': 10.0, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'additive'} MAPE=2.47% DirAcc=79.3%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:01:33 - cmdstanpy - INFO - Chain [1] start processing\n", "13:01:34 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 1.0, 'seasonality_prior_scale': 10.0, 'holidays_prior_scale': 1.0, 'seasonality_mode': 'multiplicative'} MAPE=2.63% DirAcc=72.4%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:01:34 - cmdstanpy - INFO - Chain [1] start processing\n", "13:01:35 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 1.0, 'seasonality_prior_scale': 10.0, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'additive'} MAPE=2.47% DirAcc=75.9%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:01:36 - cmdstanpy - INFO - Chain [1] start processing\n", "13:01:37 - cmdstanpy - INFO - Chain [1] done processing\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Holdout tuned {'changepoint_prior_scale': 1.0, 'seasonality_prior_scale': 10.0, 'holidays_prior_scale': 10.0, 'seasonality_mode': 'multiplicative'} MAPE=2.66% DirAcc=72.4%\n", "\n", "Stage 2: Prophet cross-validation on top 3 candidates (initial=730 days, period=30 days, horizon=7 days)...\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "13:01:37 - cmdstanpy - INFO - Chain [1] start processing\n", "13:01:39 - cmdstanpy - INFO - Chain [1] done processing\n", " 0%| | 0/124 [00:00 pd.DataFrame:\n", " df = pd.read_csv(csv_path, skiprows=[1])\n", " df = df.dropna(subset=[\"Date\"]).copy()\n", " df[\"Date\"] = pd.to_datetime(df[\"Date\"], errors=\"coerce\")\n", " for col in [\"Open\", \"High\", \"Low\", \"Close\", \"Volume\"]:\n", " df[col] = pd.to_numeric(df[col], errors=\"coerce\")\n", " return df.dropna().sort_values(\"Date\").reset_index(drop=True)\n", "\n", "\n", "def add_technical_features(df: pd.DataFrame) -> pd.DataFrame:\n", " df = df.copy()\n", "\n", " df[\"Return\"] = df[\"Close\"].pct_change()\n", " df[\"MA7\"] = df[\"Close\"].rolling(7).mean()\n", " df[\"MA30\"] = df[\"Close\"].rolling(30).mean()\n", " df[\"Vol7\"] = df[\"Close\"].rolling(7).std()\n", " df[\"Volume_MA7\"] = df[\"Volume\"].rolling(7).mean()\n", "\n", " delta = df[\"Close\"].diff()\n", " avg_gain = delta.clip(lower=0).rolling(14).mean()\n", " avg_loss = (-delta.clip(upper=0)).rolling(14).mean().replace(0, np.nan)\n", " rs = avg_gain / avg_loss\n", " df[\"RSI\"] = 100 - (100 / (1 + rs))\n", "\n", " ema12 = df[\"Close\"].ewm(span=12, adjust=False).mean()\n", " ema26 = df[\"Close\"].ewm(span=26, adjust=False).mean()\n", " df[\"MACD\"] = ema12 - ema26\n", "\n", " bb_middle = df[\"Close\"].rolling(20).mean()\n", " bb_std = df[\"Close\"].rolling(20).std()\n", " df[\"BB_upper\"] = bb_middle + 2 * bb_std\n", " df[\"BB_middle\"] = bb_middle\n", " df[\"BB_lower\"] = bb_middle - 2 * bb_std\n", "\n", " return df.dropna().reset_index(drop=True)\n", "\n", "\n", "def make_prophet_frame(df: pd.DataFrame) -> pd.DataFrame:\n", " prophet_df = df[[\"Date\", \"Close\", *REGRESSOR_COLUMNS]].rename(\n", " columns={\"Date\": \"ds\", \"Close\": \"y\"}\n", " )\n", " return prophet_df.dropna().sort_values(\"ds\").reset_index(drop=True)\n", "\n", "\n", "def create_model(params: dict) -> Prophet:\n", " model = Prophet(\n", " daily_seasonality=True, # type: ignore # type: ignore\n", " weekly_seasonality=True, # type: ignore\n", " yearly_seasonality=True, # type: ignore\n", " interval_width=0.95,\n", " uncertainty_samples=300,\n", " **params,\n", " )\n", " for regressor in REGRESSOR_COLUMNS:\n", " model.add_regressor(regressor)\n", " return model\n", "\n", "\n", "def evaluate_predictions(actual: pd.Series, predicted: pd.Series) -> dict:\n", " actual_values = actual.to_numpy(dtype=float)\n", " predicted_values = predicted.to_numpy(dtype=float)\n", " mae = np.mean(np.abs(actual_values - predicted_values))\n", " rmse = np.sqrt(np.mean((actual_values - predicted_values) ** 2))\n", " mape = np.mean(np.abs((actual_values - predicted_values) / actual_values)) * 100\n", "\n", " actual_direction = np.sign(np.diff(actual_values))\n", " predicted_direction = np.sign(np.diff(predicted_values))\n", " directional_accuracy = (actual_direction == predicted_direction).mean() * 100\n", "\n", " return {\n", " \"mae\": float(mae),\n", " \"rmse\": float(rmse),\n", " \"mape\": float(mape),\n", " \"directional_accuracy\": float(directional_accuracy),\n", " \"rating\": float(max(0, 100 - mape)),\n", " }\n", "\n", "\n", "def tune_prophet_params(prophet_df: pd.DataFrame, test_size: int = 30) -> tuple[dict, pd.DataFrame]:\n", " train = prophet_df.iloc[:-test_size].copy()\n", " test = prophet_df.iloc[-test_size:].copy()\n", " results = []\n", "\n", " keys = list(PARAM_GRID.keys())\n", " total_candidates = int(np.prod([len(values) for values in PARAM_GRID.values()]))\n", " print(f\"\\nStage 1: broad holdout tuning across {total_candidates} Prophet candidates...\")\n", "\n", " for values in product(*PARAM_GRID.values()):\n", " params = dict(zip(keys, values))\n", " model = create_model(params)\n", " model.fit(train)\n", "\n", " future = test[[\"ds\", *REGRESSOR_COLUMNS]].copy()\n", " forecast = model.predict(future)\n", " metrics = evaluate_predictions(test[\"y\"], forecast[\"yhat\"])\n", " results.append(\n", " {\n", " **params,\n", " **{f\"holdout_{name}\": value for name, value in metrics.items()},\n", " \"mape\": metrics[\"mape\"],\n", " \"rmse\": metrics[\"rmse\"],\n", " \"directional_accuracy\": metrics[\"directional_accuracy\"],\n", " \"rating\": metrics[\"rating\"],\n", " }\n", " )\n", "\n", " print(\n", " \"Holdout tuned\",\n", " params,\n", " f\"MAPE={metrics['mape']:.2f}%\",\n", " f\"DirAcc={metrics['directional_accuracy']:.1f}%\",\n", " )\n", "\n", " tuning_df = pd.DataFrame(results).sort_values([\"mape\", \"rmse\"]).reset_index(drop=True)\n", " cv_candidate_count = min(CV_TOP_N, len(tuning_df))\n", " print(\n", " f\"\\nStage 2: Prophet cross-validation on top {cv_candidate_count} candidates \"\n", " f\"(initial={CV_INITIAL}, period={CV_PERIOD}, horizon={CV_HORIZON})...\"\n", " )\n", "\n", " for idx in range(cv_candidate_count):\n", " params = {key: tuning_df.loc[idx, key] for key in keys}\n", " cv_model = create_model(params)\n", " cv_model.fit(train)\n", " df_cv = cross_validation(\n", " cv_model,\n", " initial=CV_INITIAL,\n", " period=CV_PERIOD,\n", " horizon=CV_HORIZON,\n", " parallel=CV_PARALLEL,\n", " )\n", " perf = performance_metrics(df_cv)\n", " cv_metrics = evaluate_predictions(df_cv[\"y\"], df_cv[\"yhat\"])\n", " cv_mape = float(perf[\"mape\"].mean() * 100) # type: ignore # type: ignore\n", " cv_rmse = float(perf[\"rmse\"].mean()) # type: ignore\n", " cv_mae = float(perf[\"mae\"].mean()) # type: ignore # type: ignore\n", "\n", " tuning_df.loc[idx, \"cv_mape\"] = cv_mape\n", " tuning_df.loc[idx, \"cv_rmse\"] = cv_rmse\n", " tuning_df.loc[idx, \"cv_mae\"] = cv_mae\n", " tuning_df.loc[idx, \"cv_directional_accuracy\"] = cv_metrics[\"directional_accuracy\"]\n", " tuning_df.loc[idx, \"cv_rating\"] = max(0, 100 - cv_mape)\n", "\n", " print(\n", " \"CV tuned\",\n", " params,\n", " f\"CV_MAPE={cv_mape:.2f}%\",\n", " f\"CV_DirAcc={cv_metrics['directional_accuracy']:.1f}%\",\n", " )\n", "\n", " cv_ready = tuning_df.dropna(subset=[\"cv_mape\"]).copy()\n", " if not cv_ready.empty:\n", " cv_ready = cv_ready.sort_values([\"cv_mape\", \"cv_rmse\", \"holdout_mape\"]).reset_index(drop=True)\n", " best_params = {key: cv_ready.loc[0, key] for key in keys}\n", " tuning_df[\"selected_by_cv\"] = False\n", " selected_mask = np.ones(len(tuning_df), dtype=bool)\n", " for key, value in best_params.items():\n", " selected_mask &= tuning_df[key] == value\n", " tuning_df.loc[selected_mask, \"selected_by_cv\"] = True\n", " tuning_df = tuning_df.sort_values(\n", " [\"selected_by_cv\", \"cv_mape\", \"mape\", \"rmse\"],\n", " ascending=[False, True, True, True],\n", " ).reset_index(drop=True)\n", " else:\n", " best_params = {key: tuning_df.loc[0, key] for key in keys}\n", " tuning_df[\"selected_by_cv\"] = False\n", " tuning_df.loc[0, \"selected_by_cv\"] = True\n", "\n", " return best_params, tuning_df\n", "\n", "\n", "def make_future_with_regressors(model: Prophet, prophet_df: pd.DataFrame, periods: int) -> pd.DataFrame:\n", " future = model.make_future_dataframe(periods=periods, freq=\"B\")\n", " future = future.merge(prophet_df[[\"ds\", *REGRESSOR_COLUMNS]], on=\"ds\", how=\"left\")\n", " latest_regressors = prophet_df[REGRESSOR_COLUMNS].iloc[-1]\n", " for col in REGRESSOR_COLUMNS:\n", " future[col] = future[col].fillna(latest_regressors[col])\n", " return future\n", "\n", "\n", "def format_7day_forecast(forecast_df: pd.DataFrame) -> pd.DataFrame:\n", " pred = forecast_df.tail(7)[[\"ds\", \"yhat\", \"yhat_lower\", \"yhat_upper\"]].copy()\n", " pred = pred.rename(\n", " columns={\n", " \"ds\": \"Date\",\n", " \"yhat\": \"Predicted_Close\",\n", " \"yhat_lower\": \"Lower_Bound\",\n", " \"yhat_upper\": \"Upper_Bound\",\n", " }\n", " )\n", " pred[\"Predicted_Close\"] = pred[\"Predicted_Close\"].round(2)\n", " pred[\"Lower_Bound\"] = pred[\"Lower_Bound\"].round(2)\n", " pred[\"Upper_Bound\"] = pred[\"Upper_Bound\"].round(2)\n", " pred[\"Date\"] = pd.to_datetime(pred[\"Date\"]).dt.strftime(\"%Y-%m-%d\")\n", " return pred[[\"Date\", \"Predicted_Close\", \"Lower_Bound\", \"Upper_Bound\"]]\n", "\n", "\n", "def make_residual_features(feature_df: pd.DataFrame, forecast_df: pd.DataFrame) -> pd.DataFrame:\n", " residual_features = feature_df[[\"ds\", *REGRESSOR_COLUMNS]].merge(\n", " forecast_df[[\"ds\", \"yhat\"]].rename(columns={\"yhat\": \"prophet_yhat\"}),\n", " on=\"ds\",\n", " how=\"left\",\n", " )\n", " return residual_features[RESIDUAL_FEATURE_COLUMNS].copy()\n", "\n", "\n", "def train_residual_model(feature_df: pd.DataFrame, forecast_df: pd.DataFrame) -> GradientBoostingRegressor:\n", " residual_train = feature_df[[\"ds\", \"y\"]].merge(\n", " forecast_df[[\"ds\", \"yhat\"]],\n", " on=\"ds\",\n", " how=\"left\",\n", " )\n", " residual_train[\"residual\"] = residual_train[\"y\"] - residual_train[\"yhat\"]\n", " X_train = make_residual_features(feature_df, forecast_df)\n", " y_train = residual_train[\"residual\"]\n", "\n", " residual_model = GradientBoostingRegressor(\n", " n_estimators=250,\n", " learning_rate=0.03,\n", " max_depth=2,\n", " subsample=0.85,\n", " random_state=42,\n", " )\n", " residual_model.fit(X_train, y_train)\n", " return residual_model\n", "\n", "\n", "def apply_residual_model(\n", " forecast_df: pd.DataFrame,\n", " feature_df: pd.DataFrame,\n", " residual_model: GradientBoostingRegressor,\n", ") -> pd.DataFrame:\n", " ensemble_forecast = forecast_df.copy()\n", " X = make_residual_features(feature_df, forecast_df)\n", " correction = residual_model.predict(X)\n", " ensemble_forecast[\"prophet_yhat\"] = ensemble_forecast[\"yhat\"]\n", " ensemble_forecast[\"residual_correction\"] = correction\n", " ensemble_forecast[\"yhat\"] = ensemble_forecast[\"prophet_yhat\"] + correction\n", " ensemble_forecast[\"yhat_lower\"] = ensemble_forecast[\"yhat_lower\"] + correction\n", " ensemble_forecast[\"yhat_upper\"] = ensemble_forecast[\"yhat_upper\"] + correction\n", " return ensemble_forecast\n", "\n", "\n", "df = add_technical_features(load_price_data())\n", "prophet_df = make_prophet_frame(df)\n", "\n", "print(f\"Cleaned dataset: {len(prophet_df)} trading days | Latest close: ${prophet_df['y'].iloc[-1]:.2f}\")\n", "\n", "best_params, tuning_results = tune_prophet_params(prophet_df, test_size=30)\n", "print(f\"\\nBest Prophet params: {best_params}\")\n", "\n", "validation_train = prophet_df.iloc[:-30].copy()\n", "validation_test = prophet_df.iloc[-30:].copy()\n", "validation_model = create_model(best_params)\n", "validation_model.fit(validation_train)\n", "validation_train_forecast = validation_model.predict(validation_train[[\"ds\", *REGRESSOR_COLUMNS]])\n", "validation_residual_model = train_residual_model(validation_train, validation_train_forecast)\n", "validation_prophet_forecast = validation_model.predict(validation_test[[\"ds\", *REGRESSOR_COLUMNS]])\n", "validation_forecast = apply_residual_model(\n", " validation_prophet_forecast,\n", " validation_test[[\"ds\", *REGRESSOR_COLUMNS]],\n", " validation_residual_model,\n", ")\n", "backtest = validation_test[[\"ds\", \"y\"]].merge(\n", " validation_forecast[\n", " [\"ds\", \"yhat\", \"yhat_lower\", \"yhat_upper\", \"prophet_yhat\", \"residual_correction\"]\n", " ],\n", " on=\"ds\",\n", " how=\"left\",\n", ")\n", "metrics = evaluate_predictions(backtest[\"y\"], backtest[\"yhat\"])\n", "prophet_only_metrics = evaluate_predictions(\n", " validation_test[\"y\"],\n", " validation_prophet_forecast[\"yhat\"],\n", ")\n", "\n", "final_model = create_model(best_params)\n", "final_model.fit(prophet_df)\n", "full_history_forecast = final_model.predict(prophet_df[[\"ds\", *REGRESSOR_COLUMNS]])\n", "residual_model = train_residual_model(prophet_df, full_history_forecast)\n", "\n", "full_future = make_future_with_regressors(final_model, prophet_df, periods=7)\n", "prophet_forecast = final_model.predict(full_future)\n", "forecast = apply_residual_model(\n", " prophet_forecast,\n", " full_future[[\"ds\", *REGRESSOR_COLUMNS]],\n", " residual_model,\n", ")\n", "\n", "future_7day = format_7day_forecast(forecast)\n", "future_7day.to_csv(FORECAST_CSV_PATH, index=False)\n", "backtest.to_csv(BACKTEST_CSV_PATH, index=False)\n", "\n", "\n", "def predict_7_days_prophet() -> pd.DataFrame:\n", " \"\"\"Return the next 7 business-day NVDA close forecasts from the fitted v2 model.\"\"\"\n", " return format_7day_forecast(forecast)\n", "\n", "\n", "print(\"\\nNVIDIA 7-DAY PRICE TREND PREDICTION\")\n", "print(predict_7_days_prophet().to_markdown(index=False))\n", "\n", "print(\"\\n=== Final 30-Day Backtest (Prophet + Residual ML Ensemble) ===\")\n", "print(f\"MAE : ${metrics['mae']:.2f}\")\n", "print(f\"RMSE : ${metrics['rmse']:.2f}\")\n", "print(f\"MAPE : {metrics['mape']:.2f}%\")\n", "print(f\"Rating: {metrics['rating']:.2f}%\")\n", "print(f\"Directional accuracy: {metrics['directional_accuracy']:.1f}%\")\n", "print(f\"Prophet-only MAPE before residual correction: {prophet_only_metrics['mape']:.2f}%\")\n", "print(f\"Last close: ${df['Close'].iloc[-1]:.2f}\")\n", "\n", "checkpoint = {\n", " \"model_version\": \"prophet_v3_residual_ensemble\",\n", " \"prophet_model\": final_model,\n", " \"residual_model\": residual_model,\n", " \"last_close\": float(df[\"Close\"].iloc[-1]),\n", " \"last_date\": df[\"Date\"].iloc[-1],\n", " \"backtest_mape\": metrics[\"mape\"],\n", " \"backtest_mae\": metrics[\"mae\"],\n", " \"backtest_rmse\": metrics[\"rmse\"],\n", " \"rating\": metrics[\"rating\"],\n", " \"directional_accuracy\": metrics[\"directional_accuracy\"],\n", " \"prophet_only_backtest_mape\": prophet_only_metrics[\"mape\"],\n", " \"prophet_only_directional_accuracy\": prophet_only_metrics[\"directional_accuracy\"],\n", " \"best_params\": best_params,\n", " \"tuning_strategy\": {\n", " \"stage_1\": \"expanded holdout grid search\",\n", " \"stage_2\": \"Prophet cross_validation on top holdout candidates\",\n", " \"cv_top_n\": CV_TOP_N,\n", " \"cv_initial\": CV_INITIAL,\n", " \"cv_period\": CV_PERIOD,\n", " \"cv_horizon\": CV_HORIZON,\n", " },\n", " \"regressor_columns\": REGRESSOR_COLUMNS,\n", " \"residual_feature_columns\": RESIDUAL_FEATURE_COLUMNS,\n", " \"latest_regressors\": prophet_df[REGRESSOR_COLUMNS].iloc[-1].to_dict(),\n", " \"tuning_results\": tuning_results.to_dict(orient=\"records\"),\n", "}\n", "joblib.dump(checkpoint, MODEL_PATH)\n", "\n", "fig = final_model.plot(forecast)\n", "plt.title(\"NVIDIA Stock Price Forecast - Prophet v3 Residual Ensemble\")\n", "plt.xlabel(\"Date\")\n", "plt.ylabel(\"Close Price ($)\")\n", "fig.savefig(FORECAST_PLOT_PATH, bbox_inches=\"tight\")\n", "plt.close(fig)\n", "\n", "print(f\"\\nForecast saved as {FORECAST_CSV_PATH}\")\n", "print(f\"Backtest saved as {BACKTEST_CSV_PATH}\")\n", "print(f\"Forecast plot saved as {FORECAST_PLOT_PATH}\")\n", "print(f\"Upgraded model saved as {MODEL_PATH}\")\n", "\n" ] }, { "cell_type": "code", "execution_count": 9, "id": "f8c1bcae", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "? Loaded model version: prophet_v3_residual_ensemble\n", "? Prophet regressors: ['MA7', 'MA30', 'Vol7', 'Volume_MA7', 'RSI', 'MACD', 'BB_upper', 'BB_middle', 'BB_lower']\n", "? Residual ML model: GradientBoostingRegressor\n", "? Residual features: ['MA7', 'MA30', 'Vol7', 'Volume_MA7', 'RSI', 'MACD', 'BB_upper', 'BB_middle', 'BB_lower', 'prophet_yhat']\n", "? Best Prophet params: {'changepoint_prior_scale': np.float64(0.5), 'seasonality_prior_scale': np.float64(10.0), 'holidays_prior_scale': np.float64(1.0), 'seasonality_mode': 'additive'}\n", "? Tuning strategy: {'stage_1': 'expanded holdout grid search', 'stage_2': 'Prophet cross_validation on top holdout candidates', 'cv_top_n': 3, 'cv_initial': '730 days', 'cv_period': '30 days', 'cv_horizon': '7 days'}\n", "? Last close: $215.33 on 2026-05-22\n", "\n", "=== 30-DAY HOLD-OUT BACKTEST (Strict Future, Prophet + Residual ML) ===\n", "MAE : $4.30\n", "RMSE : $5.14\n", "MAPE : 2.02%\n", "Rating: 97.98%\n", "Directional Accuracy: 72.4%\n", "Prophet-only MAPE before residual correction: 2.46%\n", "Latest actual: $215.33 | Ensemble predicted: $223.84\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABW0AAAKyCAYAAACuWPzHAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3QV4VGf6BfATdxcSLAR3py3UCy3U3d3dbdvt/uvu3W7brbdbd6VAqUMpFHePAHF3nfk/5wt3mBhEJn5++9xl5ObOnSuT5sx738/NbrfbISIiIiIiIiIiIiKdgntHr4CIiIiIiIiIiIiI7KHQVkRERERERERERKQTUWgrIiIiIiIiIiIi0okotBURERERERERERHpRBTaioiIiIiIiIiIiHQiCm1FREREREREREREOhGFtiIiIiIiIiIiIiKdiEJbERERERERERERkU5Eoa2IiIiIiIiIiIhIJ6LQVkREpJO677774ObmhqysrI5elW7p119/NduX/+7LYYcdZqb22N893UUXXYTAwMAmzcvtxe0mnV9iYqLZX2+//XaTjoEBAwa0y3p1le321FNPdfSqiIiISDtTaCsiIgKYIIF/GFuTr68vhg4diuuuuw7p6endZht98MEHeO6551y+3JtvvhkTJ05EeHg4/P39MWLECBOmFRUVNTmUsCZ3d3eznKOPPhqLFi1y+bp2dQy0nLdX3eNWWu6RRx7BAQccgKioKLMthwwZgptuugmZmZn15rXZbHjiiScQHx9v5h07diw+/PDDJr8WQ0nnYz40NBRjxozBFVdcgcWLF3fYbuSXE6NHj+72AeKff/5pPqPy8vJadN55enqiX79+OOuss7B+/Xp0NK4D3w/3UVt66aWXmhS8tyfn3yGff/75Xr8AraysRGRkJA466KBGl2e3282+5e805y/4rMnHxwe9evUy5wo/Mxr6fHB2xhlnmJ+78847XfBuRUSkJ/Hs6BUQERHpTB544AETwpSVlWHBggV4+eWXMXv2bKxdu9aEkd0htOV7YRDlSn///TcOPvhgXHzxxSbAWrFiBR577DHMnz8fv//+uwml9uXss8/GMcccg+rqamzevNmEA4cffrhZNsMsVzvkkENQWloKb29vdDUMDV5//fV6j3t4eHTI+nQXy5Ytw/jx400QFxQUhA0bNuC1117D999/j5UrVyIgIMAx7z//+U9zjF9++eWYMmUKvv76a5xzzjkmnOHPNwVf69ZbbzW3CwsLzet9+umn5jX5RcgzzzzTZu+1p2Noe//995swloF5c8+7qqoqbNu2Da+88grmzJljQtPevXujo/D1+X4YJLZllTI/lxl6crt11t/hp5xySqNXLXh5eeH000/Hf//7XyQlJSEuLq7ePPydtXPnTnMOOrvhhhvMuc7fUQxqeQzde++95jz95JNPcMQRR9RbVkFBAb799luzT/ilDj8zdEWFiIg0lUJbERERJ6zunDx5srl92WWXISIiwvxBxkCGoWJDiouLa4U5PRED7roGDRqE2267DUuWLDHVi/vCqqbzzjvPcZ8hMPcHg3MGBa7GILmrVqayys95W4lrNFSlN3XqVJx22mkmeLHC2F27duHpp5/GtddeixdffNHxeXHooYfi9ttvN6FQUwL0Pn361NuPjz/+uAl/n332WVPpe/XVV2v3duLzjp9txx13nAn2GeBLx+GXIPxy5csvvzTBbWPOPfdcE7YzRP3HP/7R4Jeb/P1Q98sX/k7iZ4GzVatW4aijjsKpp55qgvPY2Nh6nykMed98800T6jIQ5ueEiIhIU6g9goiIyF5YlTMJCQm1+m2ywopVoazG4x+AVnjLqjleVsmKrGHDhpnLiHmppTNW2bDtwvvvv2/mYXA4adIk88dcQ3j5rlUNFhISYqpZS0pK6s333nvvmeX4+fmZ9gL8g3PHjh2O51mBxWCB1UXWZZ57q8jiJdKsdG3osnCGTXX/eK3LWnZTLz+ui38gE7e1My6PlcLWdh48eLAJurhezj766COzPbiPgoODTbXu888/v8+etq+++qoJnLkd99tvP/zxxx+NttOoeylyQ8vkzzPE69+/v1lfrjcruFjl25asdVy4cCFuueUWc8k/v1w4+eST613Ou3TpUsycOdNU0PF9s9r8kksuqTUPty9ba4waNcocs7w8+Morr0Rubm69/c4Qi9uAX4Bwedz21jb54osvzH3ruGdVdkO2b99u1onrzApGVtDVPZcawkCV68714/bm+jIwaamGjmN+icPLrK+55hrHY9zWDFhZodeath7cXv/73//MOfzwww/Xes/8PJk2bZr5Monzcft99tlntX6egdC4ceMaXDY/b7hNXY37ise41R6FQSY/a5riq6++Mp81PB74LwO3hjTl83Vv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kZFh7sfGxrbp64mIiIiIiIiIdDcKbfeBl9JbgW1ERET77BVpk9C2oqICvr6+Cm3bgZ+fn/mXwS3PHbVKEBERERERERFpOpUc7oPVw5YVtiLSdNY5oz7QIiIiIiIiIiLNo9C2idSXU6R5dM6IiIiIiIiIiLSMQlsRERERERERERGRTkShrXRYFeZXX33VaZYjIiIiIiIiIiLSWSi0bSfVNjsWbcvG1yt3mX95vz0sWrTIDAJ17LHHNvtnBwwYgOeeew4dJS0tDddffz0GDhwIHx8f9OvXD8cffzx++umnDlsnERERERERERGRtubZ5q8gmLM2Ffd/ux6p+WWOrREb4ot7jx+JWaNj23QLvfHGGyb45L8pKSno3bt3l9gjiYmJOPDAAxEaGoonn3wSY8aMMQNazZ07F9deey02btzY0asoIiIiIiIiIiLSJlRp2w6B7dXvLa8V2FJafpl5nM+3laKiInz88ce4+uqrTaXt22+/XW+eb7/9FlOmTIGvry8iIyNx8sknm8cPO+wwJCUl4eabbzYtCKxBpe677z6MHz++1jJYjcuqXMvff/+NI4880iwvJCQEhx56KJYvX96sdb/mmmvMay5ZsgSnnnoqhg4dilGjRuGWW27BX3/91ejPrVmzBkcccQT8/PwQERGBK664wmwHy6+//or99tsPAQEBJhBmMMz3afn6668xceJEsz1Y4Xv//fejqqqqWesuIiIiIiIiIiLSGgpt2xBbILDCtqFGCNZjfL6tWiV88sknGD58OIYNG4bzzjsPb775Juz2Pa/1/fffm5D2mGOOwYoVK0zbAQaa9MUXX6Bv37544IEHkJqaaqamKiwsxIUXXogFCxaYgHXIkCHmNfh4U+Tk5GDOnDmmopbhal0MWxtSXFyMmTNnIiwszATHn376KebPn4/rrrvOPM/w9ZRTTjEh8urVq03rCIa6ViD9xx9/4IILLsCNN96I9evX47///a8Juh9++OEmv3cREREREREREZHWUnuEFjj+3wuQWVi+z/nKq6qRW1LZ6POMT1mBO/mhH+Hj6bHP5UUF+eDb6w9q8nqyJQLDWpo1axby8/Px22+/mSpaYhh51llnmWpSy7hx48y/4eHhphduUFAQYmJi0BysdHX26quvmqCVr33cccft8+e3bt1qwmUGzs3xwQcfoKysDO+++64j7H3xxRdNH9xH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6NRTT1V6errN3HzllVeaPZ6bm6sLL7zQPh4eHq45c+Zo/fr1zZ5TVVWln/zkJ0pISFBkZKTmz59vX4f2eX91rmrrXXZ+5thkhQUHtnjOh9kvyyV387IZaXPlDGhnTdomEiODFRLU8r2bcbncGbYF66WoNGn+w1LAfl4DAAAAAAAA9DO9GrQtLy/X5MmTdc8997Ta+Gru3LnatGmTXn31VX377bcaMmSIZs2aZV/nce211+r111/XCy+8oI8//lhZWVmaN29eD/9L+qba+ga9tyrXmwl7woSUFs+pqq/Qpzlv2Pkgh1NHp57Wqc9Kiwnb/5O++re04r+SI1A68zEpMqlTnwUAAAAAAAD0ZUG9+eEnnniinVpjMmoXL16sFStWaMKECfa+++67T6mpqXrmmWd06aWXqri4WA8//LCefvppzZzpvmT/0Ucf1bhx4+xrDz/88B799/Q1n28ssOURjEOHxispqmX5gs9z31FlvTtIfljybEUHt2xStj+x4U5FhOznT62uRlp8n3t+9i3SYH53AAAAAAAAGJh6NWi7L9XV1fZnaOieQGJAQIBCQkK0cOFCG7T95ptvVFtba7NvPcaOHavBgwdr0aJFbQZtzXt73t8oKSmxP817mam/q6+rU31drd5anuW9b874ZDXU1zV7XoOrQQt27mlANjNlbovntEdyRFg71qtDuvAdBSx9Ug0H/9j8MuRLns8fCL9foKcwrgDwfQL4L7bTAGML6CsG2jartp3/Tr8N2nqCrzfccIMeeOABRURE6O9//7t27Nih7Oxs+5ycnBwFBwcrNja22WtTUlLsY2257bbbdPPNN7e4/91337W1cweC9cUObSt014sdEulSXMEK5Rc2f87q2tXKq3YHdocHDVfItl3K164Of9bC1R159kjp7bfVXd57771ue29goGJcAeD7BPBfbKcBxhbQVwyUbVZFRUXfDto6nU699NJLuuSSSxQfH6/AwECbUWvKKZh6t11hAsHXXXdds0zbzMxMHX/88YqOjlZ/l1VUqcefXyap2N4+9eARShoe3+J5X618wTt/4siLlRjX8ZIFI5IjlRDRduOygMX/kiskRq4p57oL63bjWQwz+GfPnm3/tgAwrgD4D7bTAOMK6CvYZgGMq67yXPHfZ4O2xkEHHaSlS5fa2rU1NTVKSkrSYYcdpoMPPtg+burbmvuL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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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oUOHmq5u7uPnaBJNLyq1LXpcb968aarItGuoJro++eQTV3z07NnT/I1zPyZFn4smOnUsr169epn26bHVirVff/013j6/cOGCSYDpBbQmlfQi+ZVXXjEJstR0w9N9fuXKFZNo0O6ZmmDQi3s95kmNPaXb+te//mUSX3rhP3LkSPN8NTnl7uOPP5bLly+buNMLfk3aaSJmz549JkGQWqk9Dno8NSGpXeNeeOEFKV++vEm2aWLqdurVqyf9+/eX6dOnm+SB/q1y/kzL8UgtZ7JDExxOuh814acJDU2AaJJRn5eez9qFVuNMu3tpAvXll182+0QTf+7Wr19vqhr1+WgSRpNpesz+97//mQSmO40X7VKor196vsybN88ktDXh5/Tmm2/Ka6+9ZtbVGD579qw5x3SfaUWjJl60evHSpUsmqe5sjyZjbkcT+gnHndPnfCfPW18/9fVZk1Na+arnvo7ZpbHqTFppsljHTNPH09dpZ1dDjWtNTK9evdqcB1oRqrGrySVNpDrPVY1hbZMmC7USS7sT62vKd99953rt1vcNfazKlSubc0KPwZEjR0ycOGNKl48YMcK8Fji/ENH3AACAn3AAAOAlH3zwgWYiHKtWrXKcPXvWcezYMceiRYscBQoUcISEhJjfnRo3buy4//77HdevX3cti4uLc9SuXdtRtmxZ17IqVao4WrVqleJ2R44cabbrtHPnTvN77969463XoUMHs1zXd+rcubOjRIkSt31MFR0dnWi95s2bO0qVKhVvWf369c3tdnS7+txu3rzpKFy4sOONN94wy/fv32+2vX79etc+3bJlS6K26T5Oi7Zt25q/u3DhQqrWr1q1qqNgwYKO8+fPu5bt2rXLkSFDBkenTp0SteeZZ55J8jnqfStWrIi3XJ9r9uzZHYcPH463PCIiwpExY0bHX3/9ZX5fs2aN+fv+/fsnemyNFyd9LD2WCTn339GjR83vZ86ccWTOnNnRrFkzx61bt1zrzZgxw6w3f/581zI9hrrs448/di2LiYkxx+rJJ590pMajjz7qqFOnjuv3OXPmODJlymTa4U7brtvq169fvOen8aHtdR5rfR66XtasWR1///23a93Nmzeb5YMGDUoxhvV4uO+n1B6HpUuXmseaOHGiax2N27p165rlup9T8tVXX5n11q5dG295Wo5Hal9zFi5c6MiXL1+8feTc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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Top Prophet tuning results before residual ML layer:\n", " selected_by_cv changepoint_prior_scale seasonality_prior_scale holidays_prior_scale seasonality_mode holdout_mape cv_mape cv_rmse cv_directional_accuracy\n", " False 0.8 1.00 1.0 additive 2.462567 3.110480 2.513942 73.913043\n", " True 0.5 10.00 1.0 additive 2.464153 3.101392 2.513344 73.913043\n", " False 0.8 0.01 1.0 additive 2.464799 3.122740 2.513695 73.913043\n", " False 0.5 0.10 10.0 additive 2.464838 NaN NaN NaN\n", " False 1.0 0.01 1.0 additive 2.465569 NaN NaN NaN\n", " False 0.5 10.00 10.0 additive 2.466028 NaN NaN NaN\n", " False 1.0 10.00 1.0 additive 2.466236 NaN NaN NaN\n", " False 0.5 0.01 1.0 additive 2.466669 NaN NaN NaN\n", " False 1.0 0.10 10.0 additive 2.466675 NaN NaN NaN\n", " False 0.8 0.10 10.0 additive 2.466815 NaN NaN NaN\n", "\n", "Current 7-business-day ensemble forecast:\n", "| Date | Predicted_Close | Lower_Bound | Upper_Bound |\n", "|:-----------|------------------:|--------------:|--------------:|\n", "| 2026-05-25 | 218.93 | 215.22 | 222.58 |\n", "| 2026-05-26 | 218.91 | 215.61 | 222.33 |\n", "| 2026-05-27 | 219 | 215.5 | 222.43 |\n", "| 2026-05-28 | 218.94 | 215.04 | 222.13 |\n", "| 2026-05-29 | 218.86 | 215.48 | 222.29 |\n", "| 2026-06-01 | 218.89 | 215.32 | 222.44 |\n", "| 2026-06-02 | 218.84 | 214.58 | 222.54 |\n" ] } ], "source": [ "# ========================\n", "# PROPHET V3 EVALUATION: Residual Ensemble, Holdout, Tuning Summary\n", "# ========================\n", "import joblib\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "from pathlib import Path\n", "from sklearn.metrics import mean_absolute_error, mean_squared_error\n", "\n", "MODEL_PATH = Path(\"nvidia_price_model.pkl\")\n", "BACKTEST_CSV_PATH = Path(\"prophet_90day_backtest.csv\")\n", "FORECAST_CSV_PATH = Path(\"nvidia_7day_forecast.csv\")\n", "\n", "checkpoint = joblib.load(MODEL_PATH)\n", "model = checkpoint[\"prophet_model\"]\n", "residual_model = checkpoint.get(\"residual_model\")\n", "regressor_columns = checkpoint.get(\"regressor_columns\", [])\n", "residual_feature_columns = checkpoint.get(\"residual_feature_columns\", [])\n", "\n", "print(f\"? Loaded model version: {checkpoint.get('model_version', 'unknown')}\")\n", "print(f\"? Prophet regressors: {regressor_columns}\")\n", "print(f\"? Residual ML model: {type(residual_model).__name__ if residual_model else 'None'}\")\n", "print(f\"? Residual features: {residual_feature_columns}\")\n", "print(f\"? Best Prophet params: {checkpoint.get('best_params', {})}\")\n", "print(f\"? Tuning strategy: {checkpoint.get('tuning_strategy', {})}\")\n", "print(f\"? Last close: ${checkpoint.get('last_close', 0):.2f} on {pd.to_datetime(checkpoint.get('last_date')).date()}\")\n", "\n", "# =========================\n", "# 1. Strict holdout metrics saved by Cell-8 / train_nvidia_ml_model.py\n", "# =========================\n", "eval_df = pd.read_csv(BACKTEST_CSV_PATH)\n", "eval_df[\"ds\"] = pd.to_datetime(eval_df[\"ds\"])\n", "\n", "mae = mean_absolute_error(eval_df[\"y\"], eval_df[\"yhat\"])\n", "rmse = np.sqrt(mean_squared_error(eval_df[\"y\"], eval_df[\"yhat\"]))\n", "mape = np.mean(np.abs((eval_df[\"y\"] - eval_df[\"yhat\"]) / eval_df[\"y\"])) * 100\n", "rating = max(0, 100 - mape)\n", "actual_direction = np.sign(eval_df[\"y\"].diff().dropna())\n", "predicted_direction = np.sign(eval_df[\"yhat\"].diff().dropna())\n", "directional_accuracy = (actual_direction.values == predicted_direction.values).mean() * 100 # type: ignore\n", "\n", "print(\"\\n=== 30-DAY HOLD-OUT BACKTEST (Strict Future, Prophet + Residual ML) ===\")\n", "print(f\"MAE : ${mae:.2f}\")\n", "print(f\"RMSE : ${rmse:.2f}\")\n", "print(f\"MAPE : {mape:.2f}%\")\n", "print(f\"Rating: {rating:.2f}%\")\n", "print(f\"Directional Accuracy: {directional_accuracy:.1f}%\")\n", "print(f\"Prophet-only MAPE before residual correction: {checkpoint.get('prophet_only_backtest_mape', float('nan')):.2f}%\")\n", "print(f\"Latest actual: ${eval_df['y'].iloc[-1]:.2f} | Ensemble predicted: ${eval_df['yhat'].iloc[-1]:.2f}\")\n", "\n", "plt.figure(figsize=(14, 7))\n", "plt.plot(eval_df[\"ds\"], eval_df[\"y\"], label=\"Actual Close\", marker=\"o\", linewidth=2)\n", "if \"prophet_yhat\" in eval_df.columns:\n", " plt.plot(eval_df[\"ds\"], eval_df[\"prophet_yhat\"], label=\"Prophet Baseline\", linestyle=\"--\", linewidth=1.5)\n", "plt.plot(eval_df[\"ds\"], eval_df[\"yhat\"], label=\"Prophet + Residual ML\", marker=\"x\", linewidth=2)\n", "plt.fill_between(eval_df[\"ds\"], eval_df[\"yhat_lower\"], eval_df[\"yhat_upper\"], alpha=0.25, label=\"95% Uncertainty\")\n", "plt.title(\"Prophet v3 Residual Ensemble 30-Day Holdout Backtest on NVDA\")\n", "plt.xlabel(\"Date\")\n", "plt.ylabel(\"Close Price ($)\")\n", "plt.legend()\n", "plt.grid(True)\n", "plt.xticks(rotation=45)\n", "plt.tight_layout()\n", "plt.show()\n", "\n", "if \"residual_correction\" in eval_df.columns:\n", " plt.figure(figsize=(12, 4))\n", " plt.bar(eval_df[\"ds\"], eval_df[\"residual_correction\"])\n", " plt.title(\"Residual ML Correction Applied to Prophet Forecast\")\n", " plt.xlabel(\"Date\")\n", " plt.ylabel(\"Correction ($)\")\n", " plt.grid(axis=\"y\")\n", " plt.xticks(rotation=45)\n", " plt.tight_layout()\n", " plt.show()\n", "\n", "# =========================\n", "# 2. Prophet hyperparameter tuning summary from the training checkpoint\n", "# =========================\n", "tuning_results = pd.DataFrame(checkpoint.get(\"tuning_results\", []))\n", "if not tuning_results.empty:\n", " tuning_results = tuning_results.sort_values([\"mape\", \"rmse\"]).reset_index(drop=True)\n", " print(\"\\nTop Prophet tuning results before residual ML layer:\")\n", " display_cols = [\n", " \"selected_by_cv\",\n", " \"changepoint_prior_scale\",\n", " \"seasonality_prior_scale\",\n", " \"holidays_prior_scale\",\n", " \"seasonality_mode\",\n", " \"holdout_mape\",\n", " \"cv_mape\",\n", " \"cv_rmse\",\n", " \"cv_directional_accuracy\",\n", " ]\n", " display_cols = [col for col in display_cols if col in tuning_results.columns]\n", " print(tuning_results[display_cols].head(10).to_string(index=False))\n", "else:\n", " print(\"No tuning results found in checkpoint. Run Cell-8 first.\")\n", "\n", "# =========================\n", "# 3. Current 7-day forecast from the upgraded ensemble\n", "# =========================\n", "forecast_7day = pd.read_csv(FORECAST_CSV_PATH)\n", "print(\"\\nCurrent 7-business-day ensemble forecast:\")\n", "print(forecast_7day.to_markdown(index=False))\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 10, "id": "90d7d755", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Toolkit updated! Active tools: ['duckduckgo_search', 'predict_nvidia_stock', 'analyze_nvidia_news_price_correlation', 'search_nvidia_annual_report']\n", "\n", "Direct ML tool smoke test:\n", "{'prediction': 218.93, 'day_7_prediction': 218.84, 'expected_7day_move_pct': 1.63, 'forecast_table': [{'Date': '2026-05-25', 'Predicted_Close': 218.93, 'Lower_Bound': 215.62, 'Upper_Bound': 222.4}, {'Date': '2026-05-26', 'Predicted_Close': 218.91, 'Lower_Bound': 215.51, 'Upper_Bound': 222.6}, {'Date': '2026-05-27', 'Predicted_Close': 219.0, 'Lower_Bound': 215.42, 'Upper_Bound': 222.98}, {'Date': '2026-05-28', 'Predicted_Close': 218.94, 'Lower_Bound': 215.37, 'Upper_Bound': 222.43}, {'Date': '2026-05-29', 'Predicted_Close': 218.86, 'Lower_Bound': 215.36, 'Upper_Bound': 222.39}, {'Date': '2026-06-01', 'Predicted_Close': 218.89, 'Lower_Bound': 214.95, 'Upper_Bound': 222.68}, {'Date': '2026-06-02', 'Predicted_Close': 218.84, 'Lower_Bound': 215.54, 'Upper_Bound': 222.4}], 'model_version': 'prophet_v3_residual_ensemble', 'uses_residual_model': True, 'regressors': ['MA7', 'MA30', 'Vol7', 'Volume_MA7', 'RSI', 'MACD', 'BB_upper', 'BB_middle', 'BB_lower'], 'residual_features': ['MA7', 'MA30', 'Vol7', 'Volume_MA7', 'RSI', 'MACD', 'BB_upper', 'BB_middle', 'BB_lower', 'prophet_yhat'], 'backtest_mape': 2.019, 'directional_accuracy': 72.41}\n", "\n", "Tool Calls Triggered by LLM:\n", "[{'name': 'predict_nvidia_stock', 'args': {}, 'id': 'call_AMiI91JKW5x2ZGXDmTaHCdJS', 'type': 'tool_call'}]\n" ] } ], "source": [ "import os\n", "import re\n", "from pathlib import Path\n", "from dotenv import load_dotenv\n", "from langchain_openai import ChatOpenAI\n", "\n", "if \"llm\" not in globals():\n", " load_dotenv(Path.cwd() / \".env\")\n", " if not os.getenv(\"OPENAI_API_KEY\"):\n", " raise ValueError(\"OPENAI_API_KEY not found. Run Cell-4 or check your .env file before running this cell.\")\n", " llm = ChatOpenAI(model=\"gpt-5.4\", temperature=0.3, max_tokens=1024) # type: ignore\n", " print(\"Initialized llm from .env because it was not found in notebook memory.\")\n", "\n", "import joblib\n", "import pandas as pd\n", "from langchain_community.tools import DuckDuckGoSearchRun\n", "from langchain_core.tools import tool\n", "from langchain_core.prompts import ChatPromptTemplate\n", "from news_price_correlation import build_correlation_analysis\n", "\n", "MODEL_PATH = Path(\"nvidia_price_model.pkl\")\n", "CSV_PATH = Path(\"nvda_2014_to_2026.csv\")\n", "\n", "# 1. Initialize the DuckDuckGo Tool\n", "ddg_search_tool = DuckDuckGoSearchRun(\n", " name=\"duckduckgo_search\",\n", " description=\"Search the web for the latest news, current events, or live stock market updates regarding Nvidia.\"\n", ")\n", "\n", "# ========================\n", "# Shared ML forecast helpers for the tool\n", "# ========================\n", "def _load_price_checkpoint():\n", " if not MODEL_PATH.exists():\n", " raise FileNotFoundError(f\"{MODEL_PATH} not found. Run Cell-8 or train_nvidia_ml_model.py first.\")\n", " return joblib.load(MODEL_PATH)\n", "\n", "def _build_future_from_checkpoint(model, checkpoint: dict, periods: int = 7):\n", " future = model.make_future_dataframe(periods=periods, freq=\"B\")\n", " regressor_columns = checkpoint.get(\"regressor_columns\", [])\n", " latest_regressors = checkpoint.get(\"latest_regressors\", {})\n", "\n", " missing = [col for col in regressor_columns if col not in latest_regressors]\n", " if missing:\n", " raise ValueError(f\"Checkpoint is missing latest regressor values for: {missing}\")\n", "\n", " for col in regressor_columns:\n", " future[col] = latest_regressors[col]\n", "\n", " return future\n", "\n", "def _apply_residual_ensemble(forecast, future, checkpoint: dict):\n", " residual_model = checkpoint.get(\"residual_model\")\n", " if residual_model is None:\n", " return forecast\n", "\n", " regressor_columns = checkpoint.get(\"regressor_columns\", [])\n", " residual_feature_columns = checkpoint.get(\"residual_feature_columns\", regressor_columns + [\"prophet_yhat\"])\n", "\n", " features = future[regressor_columns].copy()\n", " features[\"prophet_yhat\"] = forecast[\"yhat\"].values\n", " features = features[residual_feature_columns]\n", "\n", " correction = residual_model.predict(features)\n", " adjusted = forecast.copy()\n", " adjusted[\"prophet_yhat\"] = adjusted[\"yhat\"]\n", " adjusted[\"residual_correction\"] = correction\n", " adjusted[\"yhat\"] = adjusted[\"prophet_yhat\"] + correction\n", " adjusted[\"yhat_lower\"] = adjusted[\"yhat_lower\"] + correction\n", " adjusted[\"yhat_upper\"] = adjusted[\"yhat_upper\"] + correction\n", " return adjusted\n", "\n", "def _format_forecast_table(forecast) -> pd.DataFrame:\n", " pred = forecast.tail(7)[[\"ds\", \"yhat\", \"yhat_lower\", \"yhat_upper\"]].copy()\n", " pred = pred.rename(columns={\n", " \"ds\": \"Date\",\n", " \"yhat\": \"Predicted_Close\",\n", " \"yhat_lower\": \"Lower_Bound\",\n", " \"yhat_upper\": \"Upper_Bound\",\n", " })\n", " pred[\"Date\"] = pd.to_datetime(pred[\"Date\"]).dt.strftime(\"%Y-%m-%d\")\n", " for col in [\"Predicted_Close\", \"Lower_Bound\", \"Upper_Bound\"]:\n", " pred[col] = pred[col].round(2)\n", " return pred[[\"Date\", \"Predicted_Close\", \"Lower_Bound\", \"Upper_Bound\"]]\n", "\n", "def _run_ensemble_forecast(periods: int = 7):\n", " checkpoint = _load_price_checkpoint()\n", " model = checkpoint[\"prophet_model\"]\n", " future = _build_future_from_checkpoint(model, checkpoint, periods=periods)\n", " prophet_forecast = model.predict(future)\n", " ensemble_forecast = _apply_residual_ensemble(prophet_forecast, future, checkpoint)\n", " pred_df = _format_forecast_table(ensemble_forecast)\n", " return checkpoint, pred_df\n", "\n", "# 2. Prophet + residual-ML stock forecast tool\n", "@tool\n", "def predict_nvidia_stock() -> dict:\n", " \"\"\"Forecast the next 7 business-day Nvidia closing prices using the saved Prophet + residual ML ensemble.\"\"\"\n", " try:\n", " checkpoint, pred_df = _run_ensemble_forecast(periods=7)\n", " next_day_prediction = float(pred_df.iloc[0][\"Predicted_Close\"])\n", " final_prediction = float(pred_df.iloc[-1][\"Predicted_Close\"])\n", " last_close = float(checkpoint.get(\"last_close\", 0))\n", " expected_move_pct = ((final_prediction / last_close) - 1) * 100 if last_close else None\n", "\n", " return {\n", " \"prediction\": next_day_prediction,\n", " \"day_7_prediction\": final_prediction,\n", " \"expected_7day_move_pct\": round(expected_move_pct, 2) if expected_move_pct is not None else None,\n", " \"forecast_table\": pred_df.to_dict(orient=\"records\"),\n", " \"model_version\": checkpoint.get(\"model_version\", \"unknown\"),\n", " \"uses_residual_model\": checkpoint.get(\"residual_model\") is not None,\n", " \"regressors\": checkpoint.get(\"regressor_columns\", []),\n", " \"residual_features\": checkpoint.get(\"residual_feature_columns\", []),\n", " \"backtest_mape\": round(float(checkpoint.get(\"backtest_mape\", 0)), 3),\n", " \"directional_accuracy\": round(float(checkpoint.get(\"directional_accuracy\", 0)), 2),\n", " }\n", " except Exception as e:\n", " return {\"error\": str(e)}\n", "\n", "# 3. News/price correlation tool\n", "@tool\n", "def analyze_nvidia_news_price_correlation(query: str) -> str:\n", " \"\"\"Analyze whether Nvidia news or an event plausibly correlates with NVDA share-price movement.\"\"\"\n", " return build_correlation_analysis(\n", " query=query,\n", " search=ddg_search_tool.run,\n", " llm=llm, # type: ignore\n", " csv_path=CSV_PATH,\n", " )\n", "\n", "# 4. Define the RAG Tool\n", "@tool\n", "def search_nvidia_annual_report(query: str) -> str:\n", " \"\"\"\n", " Searches Nvidia annual reports (2014-2025) for financial data,\n", " revenue, gross profit, risks, strategy, etc.\n", " \"\"\"\n", " try:\n", " if \"vectorstore\" not in globals():\n", " return \"Annual-report vectorstore is not initialized. Run Cell-5 and Cell-6 first.\"\n", "\n", " # Auto-detect year for better filtering\n", " year_match = re.search(r'20(\\d{2})', query)\n", " year = int(\"20\" + year_match.group(1)) if year_match else None\n", "\n", " filter_dict = {\"source_type\": \"annual_report\"}\n", " if year:\n", " filter_dict = {\"$and\": [{\"source_type\": \"annual_report\"}, {\"year\": year}]}\n", "\n", " retriever = vectorstore.as_retriever(\n", " search_type=\"similarity\",\n", " search_kwargs={\n", " \"k\": 10,\n", " \"filter\": filter_dict\n", " }\n", " )\n", "\n", " docs = retriever.invoke(query)\n", " context = \"\\n\\n\".join([doc.page_content for doc in docs])\n", " if not context.strip():\n", " return \"No annual-report context was retrieved for that question.\"\n", "\n", " prompt = ChatPromptTemplate.from_template(\"\"\"\n", " You are NVIDIA's expert financial analyst.\n", " Answer the question accurately using the provided context.\n", " Include exact numbers and years when available.\n", "\n", " Question: {query}\n", " Context: {context}\n", "\n", " Clear, well-formatted Answer:\n", " \"\"\")\n", "\n", " result = (prompt | llm).invoke({\"query\": query, \"context\": context}) # type: ignore\n", " return result.content.strip() # type: ignore\n", "\n", " except Exception as e:\n", " return f\"Could not retrieve exact data. Error: {str(e)}\"\n", "\n", "# 5. Update your master list of tools to include all four\n", "agent_tools = [\n", " ddg_search_tool,\n", " predict_nvidia_stock,\n", " analyze_nvidia_news_price_correlation,\n", " search_nvidia_annual_report,\n", "]\n", "\n", "print(f\"Toolkit updated! Active tools: {[t.name for t in agent_tools]}\")\n", "\n", "# 6. Re-bind the updated toolkit to your LLM\n", "llm_with_tools = llm.bind_tools(agent_tools) # type: ignore\n", "\n", "# --- TEST THE BINDING ---\n", "print(\"\\nDirect ML tool smoke test:\")\n", "print(predict_nvidia_stock.invoke({}))\n", "\n", "test_query = \"Predict Nvidia stock price for the next 7 business days\"\n", "test_response = llm_with_tools.invoke(test_query)\n", "\n", "print(\"\\nTool Calls Triggered by LLM:\")\n", "print(test_response.tool_calls)\n" ] }, { "cell_type": "code", "execution_count": 11, "id": "848e3094", "metadata": {}, "outputs": [], "source": [ "# ========================\n", "# IMPROVED ROUTER NODE (Strong & Reliable)\n", "# ========================\n", "\n", "from langchain_core.messages import SystemMessage, HumanMessage\n", "\n", "def router_node(state):\n", " query = state[\"query\"]\n", " query_lower = query.lower()\n", " \n", " router_prompt = \"\"\"\n", " You are a precise router for the NVIDIA AI Assistant.\n", " Classify the user's query into EXACTLY ONE of these categories.\n", " Output ONLY the exact category name, nothing else.\n", "\n", " Categories:\n", " - \"ML_agent\" → stock price prediction, forecast, tomorrow's price, next day price, ML model\n", " - \"results_strategy_agent\" → revenue, financial results, gross profit, annual report, risks, strategy, Blackwell, future plans, business performance, product roadmap\n", " - \"outlook_agent\" → latest news, market outlook, recent events, analyst opinions, current sentiment\n", " - \"general_agent\" → general overview, products, company history, casual questions, what does Nvidia sell\n", "\n", " Query: {query}\n", "\n", " Your answer (only one exact category name):\n", " \"\"\"\n", "\n", " try:\n", " response = llm.invoke([\n", " SystemMessage(content=router_prompt.format(query=query)),\n", " HumanMessage(content=query)\n", " ])\n", " \n", " decision = response.content.strip().strip('\"\\'').lower() # type: ignore\n", "\n", " # === STRONG KEYWORD OVERRIDE (most reliable) ===\n", " if any(kw in query_lower for kw in [\"revenue\", \"profit\", \"financial\", \"gross\", \"earnings\", \"balance sheet\", \"report\", \"risk\"]):\n", " decision = \"results_strategy_agent\"\n", " elif any(kw in query_lower for kw in [\"blackwell\", \"strategy\", \"future plans\", \"roadmap\"]):\n", " decision = \"results_strategy_agent\"\n", " elif any(kw in query_lower for kw in [\"news correlation\", \"news impact\", \"price impact\", \"why did stock\", \"why did nvda\", \"sell off\", \"selloff\", \"event impact\", \"correlate\", \"correlation\", \"geopolitical shock\", \"taiwan\", \"invasion\", \"invade\", \"blockade\", \"war\", \"sanction\"]):\n", " decision = \"correlation_agent\"\n", " elif any(kw in query_lower for kw in [\"predict\", \"stock price\", \"tomorrow\", \"forecast\", \"next day\", \"ml model\"]):\n", " decision = \"ML_agent\"\n", " elif any(kw in query_lower for kw in [\"news\", \"latest\", \"outlook\", \"market\", \"analyst\", \"recent\"]):\n", " decision = \"outlook_agent\"\n", " elif any(kw in query_lower for kw in [\"product\", \"sell\", \"overview\", \"history\", \"what is nvidia\"]):\n", " decision = \"general_agent\"\n", "\n", " except Exception:\n", " # Fallback to smart keyword routing if LLM fails\n", " if any(kw in query_lower for kw in [\"revenue\", \"profit\", \"financial\", \"gross\", \"report\", \"risk\", \"blackwell\", \"strategy\"]):\n", " decision = \"results_strategy_agent\"\n", " elif any(kw in query_lower for kw in [\"news correlation\", \"news impact\", \"price impact\", \"why did stock\", \"why did nvda\", \"sell off\", \"selloff\", \"event impact\", \"correlate\", \"correlation\", \"geopolitical shock\", \"taiwan\", \"invasion\", \"invade\", \"blockade\", \"war\", \"sanction\"]):\n", " decision = \"correlation_agent\"\n", " elif any(kw in query_lower for kw in [\"predict\", \"stock\", \"price\", \"forecast\"]):\n", " decision = \"ML_agent\"\n", " elif any(kw in query_lower for kw in [\"news\", \"latest\", \"outlook\", \"market\"]):\n", " decision = \"outlook_agent\"\n", " else:\n", " decision = \"general_agent\"\n", "\n", " return {\n", " \"next_node\": decision,\n", " \"debug_log\": f\"🚦 Router Decision: {decision}\"\n", " }\n", "\n" ] }, { "cell_type": "code", "execution_count": 12, "id": "b39bd834", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "✅ Tool Node successfully defined!\n" ] } ], "source": [ "# 🛠️ TOOL EXECUTION NODE\n", "from langgraph.prebuilt import ToolNode\n", "\n", "# This single node handles executing ANY tool called by your agents\n", "tool_node = ToolNode(agent_tools)\n", "\n", "print(\"✅ Tool Node successfully defined!\")" ] }, { "cell_type": "code", "execution_count": 13, "id": "b23653f0", "metadata": {}, "outputs": [], "source": [ "from langchain_core.messages import SystemMessage, HumanMessage, AIMessage, ToolMessage\n", "import pandas as pd\n", "\n", "# ========================\n", "# FIXED AGENT NODES (Robust Output Handling)\n", "# ========================\n", "\n", "# ========================\n", "# UPDATED AGENT NODES - PROPER TOOL HANDLING\n", "# ========================\n", "\n", "from langchain_core.messages import SystemMessage, HumanMessage, AIMessage, ToolMessage\n", "\n", "# ------------------------------------------------------------------\n", "# IMPROVED ML AGENT (Prophet forecast)\n", "# ------------------------------------------------------------------\n", "def ml_agent(state):\n", " query = state[\"query\"].lower()\n", " debug = state.get(\"debug_log\", \"\") + \"\\nML Agent (Stock Prediction) activated.\"\n", "\n", " if any(word in query for word in [\"predict\", \"next day\", \"tomorrow\", \"stock price\", \"closing price\", \"forecast\", \"ml model\"]):\n", " try:\n", " tool_result = predict_nvidia_stock.invoke({})\n", " if \"error\" in tool_result:\n", " raise ValueError(tool_result[\"error\"])\n", "\n", " forecast_table = tool_result.get(\"forecast_table\", [])\n", " pred_df = pd.DataFrame(forecast_table)\n", " next_price = float(tool_result[\"prediction\"])\n", " day_7_price = float(tool_result[\"day_7_prediction\"])\n", " expected_move = tool_result.get(\"expected_7day_move_pct\")\n", " table_md = pred_df.to_markdown(index=False) if not pred_df.empty else \"No forecast table returned.\"\n", "\n", " response = f\"\"\"**NVIDIA 7-Business-Day Stock Forecast (Prophet + Residual ML Ensemble)**\n", "\n", "**Next Trading Day Close:** **${next_price:,.2f}**\n", "**Day-7 Expected Close:** **${day_7_price:,.2f}** ({expected_move:+.2f}% vs latest close)\n", "\n", "**7-Day Outlook:**\n", "{table_md}\n", "\n", "**Model:** `{tool_result.get('model_version', 'unknown')}`\n", "**Uses residual ML correction:** `{tool_result.get('uses_residual_model')}`\n", "**Backtested MAPE:** `{tool_result.get('backtest_mape')}%`\n", "**Directional Accuracy:** `{tool_result.get('directional_accuracy')}%`\n", "\n", "*Forecast generated from the saved Prophet v3 checkpoint with technical regressors and residual ML correction.*\n", "\"\"\"\n", " debug += (\n", " f\"\\nCalled predict_nvidia_stock tool -> ${next_price:,.2f}; \"\n", " f\"model={tool_result.get('model_version')}; \"\n", " f\"residual={tool_result.get('uses_residual_model')}\"\n", " )\n", " except Exception as e:\n", " response = f\"ML Prediction unavailable: {str(e)}\"\n", " debug += f\"\\nError: {str(e)}\"\n", " else:\n", " response = \"I can forecast Nvidia's next 7 business-day closing prices using the Prophet + residual ML ensemble. Ask me for a stock forecast.\"\n", "\n", " return {**state, \"response\": response, \"debug_log\": debug}\n", "\n", "# ------------------------------------------------------------------\n", "def results_strategy_agent(state):\n", " query = state[\"query\"]\n", "\n", " sys_prompt = SystemMessage(content=\"\"\"\n", " You are NVIDIA's expert financial and strategy analyst.\n", " For ANY question involving revenue, profit, financial results, risks, strategy, Blackwell,\n", " or annual reports - you MUST use the 'search_nvidia_annual_report' tool first.\n", " Do not answer from memory. Always call the tool.\n", " \"\"\")\n", "\n", " messages = [\n", " sys_prompt,\n", " HumanMessage(content=f\"Use the tool to answer this accurately: {query}\")\n", " ]\n", "\n", " response = llm_with_tools.invoke(messages)\n", "\n", " if response.tool_calls:\n", " tool_call = response.tool_calls[0]\n", " if tool_call[\"name\"] == \"search_nvidia_annual_report\":\n", " tool_result = search_nvidia_annual_report.invoke(tool_call[\"args\"])\n", "\n", " final_response = llm.invoke([\n", " sys_prompt,\n", " HumanMessage(content=query),\n", " AIMessage(content=response.content, tool_calls=[tool_call]),\n", " ToolMessage(content=str(tool_result), tool_call_id=tool_call[\"id\"]),\n", " HumanMessage(content=\"Now provide a clear, professional, well-formatted final answer.\")\n", " ])\n", "\n", " return {\n", " \"response\": final_response.content,\n", " \"debug_log\": \"Results & Strategy Agent (Tool used successfully)\",\n", " \"messages\": [final_response]\n", " }\n", "\n", " return {\n", " \"response\": \"I couldn't retrieve the latest report data. Please try rephrasing or ask about a specific year.\",\n", " \"debug_log\": \"Results Agent fallback\",\n", " \"messages\": [response]\n", " }\n", "\n", "# ------------------------------------------------------------------\n", "def outlook_agent(state):\n", " query = state[\"query\"]\n", " sys_prompt = SystemMessage(content=\"\"\"\n", " You are NVIDIA's Market Intelligence Agent.\n", " Use the 'duckduckgo_search' tool to fetch the latest news and market outlook.\n", " After getting the search results, summarize them clearly and concisely.\n", " \"\"\")\n", "\n", " response = llm_with_tools.invoke([sys_prompt, HumanMessage(content=query)])\n", "\n", " if isinstance(response, AIMessage) and response.tool_calls:\n", " tool_call = response.tool_calls[0]\n", "\n", " if tool_call[\"name\"] == \"duckduckgo_search\":\n", " try:\n", " tool_result = ddg_search_tool.invoke(tool_call[\"args\"])\n", " final_messages = [\n", " sys_prompt,\n", " HumanMessage(content=query),\n", " AIMessage(content=f\"Search results: {tool_result}\"),\n", " HumanMessage(content=\"Summarize the latest news and market outlook for Nvidia clearly and professionally.\")\n", " ]\n", " final_response = llm.invoke(final_messages)\n", " return {\n", " \"messages\": [final_response],\n", " \"debug_log\": \"Outlook Agent -> Search tool executed successfully\"\n", " }\n", " except Exception as e:\n", " return {\n", " \"messages\": [AIMessage(content=f\"Search failed: {str(e)}\")],\n", " \"debug_log\": f\"Outlook Agent -> Error: {e}\"\n", " }\n", "\n", " return {\n", " \"messages\": [response],\n", " \"debug_log\": \"Outlook Agent (no tool call)\"\n", " }\n", "\n", "\n", "# ------------------------------------------------------------------\n", "# NEWS/PRICE CORRELATION AGENT\n", "# ------------------------------------------------------------------\n", "def correlation_agent(state):\n", " query = state[\"query\"]\n", " try:\n", " response = analyze_nvidia_news_price_correlation.invoke({\"query\": query})\n", " return {\n", " \"response\": response,\n", " \"debug_log\": \"Correlation Agent -> called analyze_nvidia_news_price_correlation tool\",\n", " \"messages\": [AIMessage(content=response)]\n", " }\n", " except Exception as e:\n", " response = f\"Correlation analysis error: {str(e)}\"\n", " return {\n", " \"response\": response,\n", " \"debug_log\": f\"Correlation Agent -> Error calling analyze_nvidia_news_price_correlation: {e}\",\n", " \"messages\": [AIMessage(content=response)]\n", " }\n", "\n", "# ------------------------------------------------------------------\n", "def general_agent(state):\n", " query = state[\"query\"]\n", " sys_prompt = SystemMessage(content=\"\"\"\n", " You are a helpful NVIDIA assistant.\n", " Answer general questions conversationally.\n", " Use tools only when necessary (especially for financial or news-related queries).\n", " \"\"\")\n", "\n", " if any(kw in query.lower() for kw in [\"revenue\", \"profit\", \"financial\", \"report\", \"risk\", \"blackwell\"]):\n", " try:\n", " tool_result = search_nvidia_annual_report.invoke({\"query\": query}) # type: ignore\n", " return {\n", " \"messages\": [AIMessage(content=tool_result)],\n", " \"debug_log\": \"General Agent -> RAG fallback used\"\n", " }\n", " except:\n", " pass\n", "\n", " response = llm_with_tools.invoke([sys_prompt, HumanMessage(content=query)])\n", "\n", " return {\n", " \"messages\": [response],\n", " \"debug_log\": \"General Agent activated.\"\n", " }\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 14, "id": "4393ab45", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "✅ LangGraph rebuilt with consistent routing!\n" ] } ], "source": [ "# ========================\n", "# 9️⃣ BUILD LANGGRAPH WORKFLOW\n", "# ========================\n", "\n", "from typing import TypedDict\n", "from langgraph.graph import StateGraph, END\n", "from langchain_core.messages import HumanMessage\n", "\n", "# Define the state\n", "class AgentState(TypedDict):\n", " query: str\n", " messages: list\n", " response: str\n", " next_node: str\n", " debug_log: str\n", "\n", "# Helper to extract final text from agent output\n", "def extract_final_text(agent_result) -> str:\n", " try:\n", " msgs = agent_result.get(\"messages\", [])\n", " if msgs:\n", " last = msgs[-1]\n", " return getattr(last, \"content\", str(last))\n", " except Exception:\n", " pass\n", " return str(agent_result)\n", "\n", "# ========================\n", "# AGENT NODES\n", "# ========================\n", "\n", "def ml_agent_node(state: AgentState):\n", " result = ml_agent(state)\n", " return {\n", " \"response\": result.get(\"response\", \"Sorry, I couldn't generate a prediction.\"),\n", " \"debug_log\": state.get(\"debug_log\", \"\") + \"\\n🤖 ML Agent (Stock Prediction) activated.\",\n", " \"messages\": result.get(\"messages\", [])\n", " }\n", "\n", "def results_strategy_agent_node(state: AgentState):\n", " result = results_strategy_agent(state)\n", " return {\n", " \"response\": result.get(\"response\", \"Sorry, I couldn't generate an answer.\"),\n", " \"debug_log\": state.get(\"debug_log\", \"\") + \"\\n\" + result.get(\"debug_log\", \"\"),\n", " \"messages\": result.get(\"messages\", [])\n", " }\n", "\n", "def outlook_agent_node(state: AgentState):\n", " \"\"\"Market news & outlook agent\"\"\"\n", " result = outlook_agent(state) # Your existing outlook_agent function\n", " return {\n", " \"response\": extract_final_text(result),\n", " \"debug_log\": state.get(\"debug_log\", \"\") + \"\\n🌐 Outlook Agent (News & Market) activated.\",\n", " \"messages\": result.get(\"messages\", [])\n", " }\n", "\n", "\n", "def correlation_agent_node(state: AgentState):\n", " result = correlation_agent(state)\n", " return {\n", " \"response\": result.get(\"response\", \"Sorry, I couldn't generate a correlation analysis.\"),\n", " \"debug_log\": state.get(\"debug_log\", \"\") + \"\\nCorrelation Agent activated.\",\n", " \"messages\": result.get(\"messages\", [])\n", " }\n", "\n", "def general_agent_node(state: AgentState):\n", " \"\"\"Fallback general agent\"\"\"\n", " result = general_agent(state) # Your existing general_agent function\n", " return {\n", " \"response\": extract_final_text(result),\n", " \"debug_log\": state.get(\"debug_log\", \"\") + \"\\n💬 General Agent activated.\",\n", " \"messages\": result.get(\"messages\", [])\n", " }\n", "\n", "# ========================\n", "# BUILD LANGGRAPH WORKFLOW\n", "# ========================\n", "\n", "workflow = StateGraph(AgentState)\n", "\n", "workflow.add_node(\"router\", router_node)\n", "workflow.add_node(\"ml_agent\", ml_agent_node)\n", "workflow.add_node(\"results_strategy_agent\", results_strategy_agent_node)\n", "workflow.add_node(\"outlook_agent\", outlook_agent_node)\n", "workflow.add_node(\"correlation_agent\", correlation_agent_node)\n", "workflow.add_node(\"general_agent\", general_agent_node)\n", "\n", "workflow.set_entry_point(\"router\")\n", "\n", "workflow.add_conditional_edges(\n", " \"router\",\n", " lambda state: state[\"next_node\"],\n", " {\n", " \"ML_agent\": \"ml_agent\",\n", " \"results_strategy_agent\": \"results_strategy_agent\",\n", " \"outlook_agent\": \"outlook_agent\",\n", " \"correlation_agent\": \"correlation_agent\",\n", " \"general_agent\": \"general_agent\"\n", " }\n", ")\n", "\n", "workflow.add_edge(\"ml_agent\", END)\n", "workflow.add_edge(\"results_strategy_agent\", END)\n", "workflow.add_edge(\"outlook_agent\", END)\n", "workflow.add_edge(\"correlation_agent\", END)\n", "workflow.add_edge(\"general_agent\", END)\n", "\n", "app = workflow.compile()\n", "\n", "print(\"✅ LangGraph rebuilt with consistent routing!\")\n" ] }, { "cell_type": "code", "execution_count": 15, "id": "5676e95b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Router Decision: results_strategy_agent\n", "Answer preview: Here’s a clear summary of **NVIDIA’s fiscal year 2025** financial status, based on its annual report for the year ended **January 26, 2025**:\n", "\n", "## NVIDIA FY2025 Financial Results\n", "\n", "### Revenue\n", "- **Total revenue:** **$130.5 billion**\n", "- **FY2024 revenue:** $60.9 billion\n", "- **Year-over-year growth:** **11...\n" ] } ], "source": [ "result = app.invoke({\n", " \"query\": \"What is Nvidia's revenue and financial status for 2025?\",\n", " \"messages\": [],\n", " \"debug_log\": \"\"\n", "}) # type: ignore\n", "\n", "print(\"Router Decision:\", result.get(\"next_node\"))\n", "print(\"Answer preview:\", str(result.get(\"response\", \"\"))[:300] + \"...\")" ] }, { "cell_type": "code", "execution_count": 16, "id": "e942e7a3", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "❓ Query: What is Nvidia's revenue and financial status for 2016?\n", "🚦 Router Decision : results_strategy_agent\n", "🤖 Final Answer:\n", "Here’s a clear summary of **NVIDIA’s fiscal 2016 financial status** based on its **Annual Report for the year ended January 31, 2016**:\n", "\n", "## NVIDIA Fiscal 2016 Financial Results\n", "\n", "| Metric | Fiscal 2016 |\n", "|---|---:|\n", "| **Revenue** | **$5.01 billion** |\n", "| **Gross Profit** | **$2.811 billion** |\n", "| **Gross Margin** | **56.1%** |\n", "| **Operating Income** | **$747 million** |\n", "| **Net Income** | **$614 million** |\n", "| **Cash and Cash Equivalents** | **$596 million** |\n", "| **Marketable Securities** | **$4.441 billion** |\n", "| **Operating Cash Flow** | **$1.175 billion** |\n", "\n", "## Year-over-Year Comparison vs. Fiscal 2015\n", "\n", "- **Revenue:** increased **7%** from **$4.682 billion** to **$5.010 billion**\n", "- **Gross Margin:** improved from **55.5%** to **56.1%**\n", "- **Operating Income:** declined **2%** from **$759 million** to **$747 million**\n", "- **Net Income:** declined **3%** from **$631 million** to **$614 million**\n", "\n", "## Business Context\n", "\n", "NVIDIA’s fiscal 2016 revenue performance was supported by:\n", "\n", "- **GPU revenue:** **$4.19 billion**, up **9%**\n", "- **Tegra Processor revenue:** **$559 million**, down **3%**\n", "- **License revenue:** **$264 million**, roughly flat year over year\n", "\n", "## Overall Financial Status\n", "\n", "In fiscal 2016, NVIDIA was **profitable, cash-generative, and financially solid**:\n", "\n", "- Revenue reached a **record $5.01 billion** at the time\n", "- Gross margins remained strong at **56.1%**\n", "- The company generated over **$1.17 billion in operating cash flow**\n", "- NVIDIA also maintained a strong liquidity position with **$596 million in cash** and **$4.44 billion in marketable securities**\n", "\n", "## Notable Headwinds Mentioned in the Annual Report\n", "\n", "Fiscal 2016 results were affected by:\n", "\n", "- **$131 million** in restructuring and other charges related to winding down the **Icera modem operations**\n", "- **$70 million** in legal fees tied to litigation involving **Samsung and Qualcomm**\n", "\n", "### Bottom line\n", "**NVIDIA generated $5.01 billion in revenue in fiscal 2016 and remained strongly profitable, with $614 million in net income and a strong balance sheet, despite some one-time charges and legal expenses.**\n", "\n", "If you want, I can also provide:\n", "1. a **short investor-style summary**, or \n", "2. a **detailed breakdown by business segment**.\n", "\n", "🧠 Debug Log:\n", "🚦 Router Decision: results_strategy_agent\n", "Results & Strategy Agent (Tool used successfully)\n", "------------------------------------------------------------------------------------------\n", "\n", "❓ Query: What was Nvidia's gross profit in the latest annual report?\n", "🚦 Router Decision : results_strategy_agent\n", "🤖 Final Answer:\n", "According to NVIDIA’s latest annual report available in the provided context, **gross profit was $6.768 billion** for the fiscal year ended **January 26, 2020**.\n", "\n", "### Gross Profit\n", "- **2020:** **$6,768 million**\n", "- **2019:** $7,171 million\n", "- **2018:** $5,822 million\n", "\n", "### Additional context\n", "- **Revenue (2020):** $10,918 million\n", "- **Gross margin (2020):** approximately **62.0%**\n", "\n", "If you want, I can also provide the exact income statement line item or summarize how gross profit changed year over year.\n", "\n", "🧠 Debug Log:\n", "🚦 Router Decision: results_strategy_agent\n", "Results & Strategy Agent (Tool used successfully)\n", "------------------------------------------------------------------------------------------\n", "\n", "❓ Query: Predict Nvidia's next day closing stock price using the ML model\n", "🚦 Router Decision : ML_agent\n", "🤖 Final Answer:\n", "**NVIDIA 7-Business-Day Stock Forecast (Prophet + Residual ML Ensemble)**\n", "\n", "**Next Trading Day Close:** **$218.93**\n", "**Day-7 Expected Close:** **$218.84** (+1.63% vs latest close)\n", "\n", "**7-Day Outlook:**\n", "| Date | Predicted_Close | Lower_Bound | Upper_Bound |\n", "|:-----------|------------------:|--------------:|--------------:|\n", "| 2026-05-25 | 218.93 | 215.19 | 222.36 |\n", "| 2026-05-26 | 218.91 | 215.38 | 222.93 |\n", "| 2026-05-27 | 219 | 215.49 | 222.61 |\n", "| 2026-05-28 | 218.94 | 215.3 | 222.54 |\n", "| 2026-05-29 | 218.86 | 215.14 | 222.64 |\n", "| 2026-06-01 | 218.89 | 215.83 | 222.72 |\n", "| 2026-06-02 | 218.84 | 215.03 | 222.67 |\n", "\n", "**Model:** `prophet_v3_residual_ensemble`\n", "**Uses residual ML correction:** `True`\n", "**Backtested MAPE:** `2.019%`\n", "**Directional Accuracy:** `72.41%`\n", "\n", "*Forecast generated from the saved Prophet v3 checkpoint with technical regressors and residual ML correction.*\n", "\n", "\n", "🧠 Debug Log:\n", "🚦 Router Decision: ML_agent\n", "🤖 ML Agent (Stock Prediction) activated.\n", "------------------------------------------------------------------------------------------\n", "\n", "❓ Query: What are the latest news and market outlook for Nvidia?\n", "🚦 Router Decision : outlook_agent\n", "🤖 Final Answer:\n", "Here’s a clear, professional summary of the latest news and market outlook for Nvidia (NVDA):\n", "\n", "## Latest News\n", "- **Analyst sentiment remains strongly positive.** Recent coverage shows multiple firms maintaining **“buy” ratings** on Nvidia, reflecting confidence in its leadership in AI chips and data-center acceleration.\n", "- **AI demand continues to be the main growth driver.** Commentary across recent reports highlights ongoing **hyperscaler and enterprise spending on AI infrastructure**, which continues to support Nvidia’s revenue outlook.\n", "- **Strategic partnerships and ecosystem strength remain key themes.** Nvidia’s software, networking, and platform ecosystem are still seen as major competitive advantages, helping it maintain a strong position beyond just GPU hardware.\n", "- **Valuation is a recurring discussion point.** While bullish reports emphasize growth potential, several analyses also note that Nvidia’s **premium valuation** means investors are expecting continued execution and strong earnings growth.\n", "\n", "## Market Outlook\n", "- **Overall outlook is bullish.** The market view remains favorable, driven by expectations of sustained AI capital expenditures, expanding cloud demand, and Nvidia’s dominant market share in AI accelerators.\n", "- **Key upside drivers:**\n", " - Continued **AI infrastructure buildout**\n", " - Strong **data center revenue growth**\n", " - Additional adoption from enterprises and cloud providers\n", " - Benefits from partnerships and broader platform monetization\n", "- **Key risks:**\n", " - High valuation and elevated expectations\n", " - Potential slowdown in AI spending if customer budgets tighten\n", " - Competitive pressure from AMD, Intel, and custom in-house chips\n", " - Supply chain or geopolitical risks that could affect production or demand\n", "\n", "## Bottom Line\n", "Nvidia’s near- to medium-term outlook remains **strongly positive**, with AI demand still acting as the central catalyst. However, the stock’s premium valuation means future performance will depend heavily on Nvidia continuing to deliver exceptional growth and defend its leadership position.\n", "\n", "If you want, I can also provide this as a **bull case / bear case / base case** investment summary.\n", "\n", "🧠 Debug Log:\n", "🚦 Router Decision: outlook_agent\n", "🌐 Outlook Agent (News & Market) activated.\n", "------------------------------------------------------------------------------------------\n", "\n", "❓ Query: Tell me about Nvidia's Blackwell chip and future strategy\n", "🚦 Router Decision : results_strategy_agent\n", "🤖 Final Answer:\n", "## Nvidia’s Blackwell chip and future strategy\n", "\n", "Nvidia’s **Blackwell** is more than a new GPU architecture. Based on Nvidia’s annual report, the company is positioning Blackwell as the foundation of a broader **AI infrastructure platform**—combining compute, networking, and software into what it calls **“AI factories.”**\n", "\n", "### 1. What Blackwell is\n", "Blackwell is Nvidia’s next major AI computing platform, designed for the new phase of AI workloads:\n", "- **Large-scale training**\n", "- **Inference**\n", "- **Reasoning models**\n", "- Enterprise and sovereign AI deployments\n", "\n", "Nvidia describes Blackwell as its **fastest-ramping platform ever**. In **Q4 FY2025**, it reported **$11 billion in Blackwell revenue**, calling it the **fastest product ramp in company history**.\n", "\n", "### 2. Why Blackwell matters\n", "Nvidia’s strategy is based on the idea that AI is shifting from pure model training toward **inference and reasoning**, where efficiency, scale, and cost matter even more.\n", "\n", "According to Nvidia, Blackwell delivers major improvements over prior generations:\n", "- **30x faster inference**\n", "- **25x lower total cost of ownership**\n", "- For a **1.8 trillion-parameter GPT model**, Blackwell can achieve similar 90-day training outcomes with roughly:\n", " - **one-quarter of the GPUs**\n", " - **one-quarter of the power**\n", " compared with prior platforms\n", "\n", "Nvidia says Blackwell can do this at around **4 megawatts** in the cited example, versus much higher power needs on older systems.\n", "\n", "### 3. Nvidia’s broader strategy: from chips to AI factories\n", "A key strategic point is that Nvidia no longer sees itself only as a chip company. The annual report says it has evolved:\n", "- from a **chip maker**\n", "- to a **builder of infrastructure**\n", "- into a **full-stack AI company**\n", "\n", "That means Blackwell is sold as part of a complete system including:\n", "- **GPUs**\n", "- **CPUs** such as **Grace**\n", "- **NVLink** interconnects\n", "- **InfiniBand and Ethernet networking**\n", "- **Software and AI services**\n", "\n", "Nvidia’s message is that customers increasingly want complete AI systems, not just accelerators.\n", "\n", "### 4. Networking is central to the Blackwell strategy\n", "Nvidia’s future strategy is not only about compute performance. It is also about owning the networking layer needed to scale AI clusters.\n", "\n", "The report highlights products such as:\n", "- **NVLink**\n", "- **Quantum X800**\n", "- **Spectrum-X / Spectrum X800**\n", "- **ConnectX**\n", "- **BlueField**\n", "\n", "This supports two key goals:\n", "- **Scale-up** inside AI servers and racks\n", "- **Scale-out** across entire AI factories and data centers\n", "\n", "This is important because very large AI deployments depend on tightly integrated networking to avoid bottlenecks.\n", "\n", "### 5. Software and ecosystem strategy\n", "Nvidia is also trying to deepen its moat through software and deployable AI tools. Blackwell is part of a stack that includes:\n", "- **CUDA**\n", "- **NVIDIA Inference Microservices (NIMs)**\n", "- **AI Blueprints**\n", "- **Nemotron models**\n", "- **Omniverse Cloud APIs**\n", "\n", "The strategy here is clear: make Nvidia not just the hardware provider, but the **default platform for building and deploying AI**. That can improve customer stickiness and help Nvidia capture more value per deployment.\n", "\n", "### 6. The roadmap beyond Blackwell\n", "Nvidia’s roadmap extends beyond Blackwell to:\n", "- **Rubin**\n", "- **Feynman**\n", "\n", "The company presents this as a long-term platform sequence, signaling to customers that Nvidia intends to keep pushing performance, scale, and platform integration over multiple generations.\n", "\n", "### 7. Strategic vision and outlook\n", "Nvidia’s long-term thesis is that AI infrastructure will become a foundational layer of the global economy. The annual report says:\n", "- **trillions of dollars of AI infrastructure** will be built over the coming decade\n", "- and potentially **up to half a trillion dollars** could be built on U.S. soil within four years\n", "\n", "In that vision, Blackwell is the current centerpiece of a much larger opportunity:\n", "- hyperscale cloud AI\n", "- enterprise AI\n", "- sovereign AI\n", "- inference and reasoning systems\n", "- robotics and industrial AI over time\n", "\n", "### 8. Bottom line\n", "Blackwell is important because Nvidia is using it to expand from a leading AI chip maker into the dominant supplier of **end-to-end AI infrastructure**.\n", "\n", "**In simple terms:**\n", "- **Blackwell** is the new performance engine\n", "- **Networking** is the scaling fabric\n", "- **Software** is the lock-in layer\n", "- **AI factories** are the business model\n", "- **Rubin and Feynman** are the next steps in the roadmap\n", "\n", "So Nvidia’s future strategy is not just to sell faster chips—it is to own as much of the AI computing stack as possible.\n", "\n", "If you want, I can also turn this into a **1-page investor\n", "\n", "🧠 Debug Log:\n", "🚦 Router Decision: results_strategy_agent\n", "Results & Strategy Agent (Tool used successfully)\n", "------------------------------------------------------------------------------------------\n", "\n", "❓ Query: Summarize the key risks mentioned in Nvidia's 2025 annual report\n", "🚦 Router Decision : results_strategy_agent\n", "🤖 Final Answer:\n", "Here’s a clear summary of the **key risks disclosed in NVIDIA’s Fiscal 2025 Annual Report (Form 10-K), Item 1A. Risk Factors**:\n", "\n", "---\n", "\n", "## Key Risks in NVIDIA’s 2025 Annual Report\n", "\n", "### 1. Demand volatility\n", "NVIDIA warns that it may **misjudge demand** for its products and services, which could lead to:\n", "- revenue fluctuations,\n", "- excess or insufficient inventory,\n", "- supply-demand imbalances,\n", "- weaker financial results.\n", "\n", "This matters especially because recent growth has been heavily concentrated in **Data Center and AI infrastructure demand**.\n", "\n", "### 2. Supply chain and manufacturing dependence\n", "NVIDIA relies heavily on third parties to **manufacture, assemble, package, test, and supply components** for its products. Key risks include:\n", "- limited manufacturing capacity,\n", "- supplier bottlenecks,\n", "- higher input or production costs,\n", "- delays in fulfillment,\n", "- inability to scale fast enough.\n", "\n", "These risks are amplified by the complexity of newer AI and data center systems.\n", "\n", "### 3. New product and transition risk\n", "The company faces execution risk when introducing new products or transitioning to new architectures, including:\n", "- design and engineering delays,\n", "- ramp-up problems,\n", "- cost overruns,\n", "- slower-than-expected customer adoption.\n", "\n", "This was especially relevant in fiscal 2025 with the transition from **Hopper** to early shipments of **Blackwell** systems.\n", "\n", "### 4. Competitive and technological change\n", "NVIDIA operates in fast-moving markets where success depends on staying ahead of:\n", "- rapid technology shifts,\n", "- new computing architectures,\n", "- aggressive competition,\n", "- changing customer requirements.\n", "\n", "If competitors innovate faster or customers adopt alternative platforms, NVIDIA’s growth and margins could be pressured.\n", "\n", "### 5. Market acceptance of products\n", "Even if NVIDIA launches advanced products, results depend on whether customers and partners actually adopt them. Risks include:\n", "- slower enterprise AI spending,\n", "- weaker adoption of new platforms,\n", "- reduced demand in key end markets,\n", "- dependence on ecosystem support.\n", "\n", "### 6. Product quality, defects, and performance issues\n", "NVIDIA identifies risk from:\n", "- design defects,\n", "- manufacturing defects,\n", "- software bugs,\n", "- integration or performance problems in customer systems.\n", "\n", "Because its products are used in highly complex AI, cloud, and data center environments, failures could lead to reputational damage, customer claims, or lost sales.\n", "\n", "### 7. Changes in standards, interfaces, and customer preferences\n", "The company notes risk from:\n", "- evolving industry standards,\n", "- interface changes,\n", "- shifting customer needs,\n", "- new technical requirements.\n", "\n", "If NVIDIA is slow to adapt, products may become less competitive or require costly redesign.\n", "\n", "### 8. Execution and forward-looking uncertainty\n", "NVIDIA emphasizes that its outlook depends on assumptions about demand, supply, product timing, and market conditions. Actual results could differ materially if execution falls short or market conditions change.\n", "\n", "---\n", "\n", "## Why these risks are especially important\n", "These risk factors carry extra weight because NVIDIA’s fiscal 2025 performance was extraordinarily strong and increasingly concentrated in AI and data center markets. That means disruptions in:\n", "- customer demand,\n", "- product launches,\n", "- manufacturing capacity,\n", "- competitive positioning,\n", "could have an outsized effect on results.\n", "\n", "---\n", "\n", "## Bottom line\n", "The main risks in NVIDIA’s 2025 annual report center on **demand uncertainty, supply chain dependence, product transition execution, competition, market adoption, product quality, and fast-changing technology standards**. In short, NVIDIA’s biggest challenge is sustaining rapid growth while managing the complexity and concentration that come with leadership in AI infrastructure.\n", "\n", "If you want, I can also turn this into:\n", "1. a **bullet-point investor brief**, \n", "2. a **board-style risk matrix**, or \n", "3. a **1-paragraph executive summary**.\n", "\n", "🧠 Debug Log:\n", "🚦 Router Decision: results_strategy_agent\n", "Results & Strategy Agent (Tool used successfully)\n", "------------------------------------------------------------------------------------------\n", "\n", "❓ Query: What products does Nvidia sell?\n", "🚦 Router Decision : general_agent\n", "🤖 Final Answer:\n", "NVIDIA sells a mix of hardware, software, and platforms, mainly in these categories:\n", "\n", "- **GPUs (graphics processing units)**\n", " - **GeForce**: consumer graphics cards for gaming and PCs\n", " - **RTX / workstation GPUs**: for creators, designers, engineers, and AI workstations\n", " - **Data center GPUs**: like **H100, H200, B100/B200, A100** for AI training, inference, and high-performance computing\n", "\n", "- **AI and data center platforms**\n", " - Complete systems such as **DGX** servers\n", " - Networking for AI/data centers through **NVIDIA Networking** (from Mellanox), including **InfiniBand** and **Ethernet** products\n", " - AI infrastructure platforms for cloud providers and enterprises\n", "\n", "- **CPUs and superchips**\n", " - **Grace CPU**\n", " - **Grace Hopper** superchips combining CPU + GPU for AI and HPC workloads\n", "\n", "- **Automotive products**\n", " - **NVIDIA DRIVE** for autonomous driving and in-vehicle computing\n", " - Chips and software for infotainment, driver assistance, and self-driving systems\n", "\n", "- **Embedded / edge AI computing**\n", " - **Jetson** modules for robots, drones, industrial systems, and edge AI devices\n", "\n", "- **Software and AI platforms**\n", " - **CUDA** for GPU computing\n", " - AI software libraries and frameworks\n", " - **NVIDIA AI Enterprise**\n", " - Omniverse for simulation and 3D collaboration\n", " - Tools for robotics, healthcare, cybersecurity, and digital twins\n", "\n", "- **Gaming and cloud gaming**\n", " - Gaming GPUs and related software\n", " - **GeForce NOW** cloud gaming service\n", "\n", "So in short, NVIDIA is no longer just a graphics card company — it sells **gaming GPUs, AI chips, servers, networking gear, automotive platforms, edge devices, and software/subscription platforms**.\n", "\n", "If you want, I can also break this down by **consumer products vs enterprise products**.\n", "\n", "🧠 Debug Log:\n", "🚦 Router Decision: general_agent\n", "💬 General Agent activated.\n", "------------------------------------------------------------------------------------------\n", "\n", "❓ Query: Give me a general overview of Nvidia company\n", "🚦 Router Decision : general_agent\n", "🤖 Final Answer:\n", "NVIDIA is a U.S. technology company best known for designing high-performance graphics processing units (GPUs), but today it’s much broader than just graphics.\n", "\n", "### In simple terms\n", "NVIDIA builds chips, software, and platforms that power:\n", "\n", "- **Gaming graphics** for PCs and laptops\n", "- **Artificial intelligence** training and inference\n", "- **Data centers and cloud computing**\n", "- **Autonomous vehicles and robotics**\n", "- **Professional visualization** for designers, engineers, and creators\n", "\n", "### What NVIDIA is most famous for\n", "Originally, NVIDIA became well known for its **GeForce** graphics cards, popular with gamers. Over time, its GPUs also became essential for **AI and machine learning** because they are very good at handling massive parallel computations.\n", "\n", "That shift helped NVIDIA become one of the most important companies in the AI boom.\n", "\n", "### Main business areas\n", "NVIDIA’s business is often thought of in a few major segments:\n", "\n", "- **Gaming** \n", " Graphics cards and related products for consumers.\n", "\n", "- **Data Center** \n", " AI chips, networking, and systems used by cloud providers, enterprises, and research labs.\n", "\n", "- **Professional Visualization** \n", " Hardware and software for 3D design, simulation, digital twins, and content creation.\n", "\n", "- **Automotive** \n", " Platforms for self-driving, advanced driver assistance, and in-car AI computing.\n", "\n", "### Key technologies and platforms\n", "Some of NVIDIA’s most important offerings include:\n", "\n", "- **GeForce** – consumer gaming GPUs\n", "- **RTX** – GPUs with ray tracing and AI-enhanced graphics\n", "- **CUDA** – NVIDIA’s software platform for GPU computing\n", "- **DGX systems** – AI supercomputing systems\n", "- **H100 / A100 / newer AI accelerators** – chips used in AI data centers\n", "- **Omniverse** – platform for 3D collaboration and simulation\n", "- **Drive** – automotive AI platform\n", "\n", "### Why NVIDIA matters so much today\n", "NVIDIA sits at the center of the AI ecosystem because many companies use its hardware and software to train and run large AI models. Its competitive advantage comes not only from chips, but also from its **software ecosystem**, especially CUDA, which makes its hardware deeply embedded in AI workflows.\n", "\n", "### Basic company background\n", "- **Founded:** 1993\n", "- **Headquarters:** Santa Clara, California\n", "- **Founders:** Jensen Huang, Chris Malachowsky, and Curtis Priem\n", "- **CEO:** Jensen Huang\n", "\n", "### Big-picture reputation\n", "NVIDIA is generally seen as:\n", "- A leader in AI hardware\n", "- A pioneer in GPU computing\n", "- One of the most influential semiconductor companies in the world\n", "\n", "If you want, I can also give you:\n", "1. a **beginner-friendly summary**, \n", "2. a **business/financial overview**, or \n", "3. a **timeline of NVIDIA’s history**.\n", "\n", "🧠 Debug Log:\n", "🚦 Router Decision: general_agent\n", "💬 General Agent activated.\n", "------------------------------------------------------------------------------------------\n" ] } ], "source": [ "# ========================\n", "# 🔟 TEST THE FULL NVIDIA LANGGRAPH SYSTEM\n", "# ========================\n", "\n", "def test_agent(question: str):\n", " print(f\"\\n❓ Query: {question}\")\n", " result = app.invoke({\n", " \"query\": question,\n", " \"messages\": [],\n", " \"response\": \"\",\n", " \"next_node\": \"\",\n", " \"debug_log\": \"\"\n", " })\n", " \n", " print(f\"🚦 Router Decision : {result.get('next_node', 'N/A')}\")\n", " print(f\"🤖 Final Answer:\\n{result.get('response', 'No response')}\")\n", " print(f\"\\n🧠 Debug Log:\\n{result.get('debug_log', '')}\")\n", " print(\"-\" * 90)\n", "\n", "\n", "# ==================== TEST CASES ====================\n", "\n", "test_agent(\"What is Nvidia's revenue and financial status for 2016?\")\n", "test_agent(\"What was Nvidia's gross profit in the latest annual report?\")\n", "test_agent(\"Predict Nvidia's next day closing stock price using the ML model\")\n", "test_agent(\"What are the latest news and market outlook for Nvidia?\")\n", "test_agent(\"Tell me about Nvidia's Blackwell chip and future strategy\")\n", "test_agent(\"Summarize the key risks mentioned in Nvidia's 2025 annual report\")\n", "test_agent(\"What products does Nvidia sell?\")\n", "test_agent(\"Give me a general overview of Nvidia company\")" ] }, { "cell_type": "code", "execution_count": 17, "id": "efba941f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "* Running on local URL: http://127.0.0.1:7862\n", "* Running on public URL: https://c1a89993f102339d30.gradio.live\n", "\n", "This share link expires in 1 week. For free permanent hosting and GPU upgrades, run `gradio deploy` from the terminal in the working directory to deploy to Hugging Face Spaces (https://huggingface.co/spaces)\n" ] }, { "data": { "text/html": [ "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Keyboard interruption in main thread... closing server.\n", "Killing tunnel 127.0.0.1:7862 <> https://c1a89993f102339d30.gradio.live\n" ] }, { "data": { "text/plain": [] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# ========================\n", "# 1️⃣1️⃣ GRADIO CHAT UI - NVIDIA AI ASSISTANT\n", "# ========================\n", "\n", "import gradio as gr\n", "\n", "def chat_fn(message, history):\n", " try:\n", " result = app.invoke({\n", " \"query\": message,\n", " \"messages\": [],\n", " \"response\": \"\",\n", " \"next_node\": \"\",\n", " \"debug_log\": \"\"\n", " })\n", " \n", " answer = result.get(\"response\", \"Sorry, I couldn't generate an answer.\")\n", " log = result.get(\"debug_log\", \"No routing information available.\")\n", " \n", " # Cleaner, more reliable output\n", " return f\"\"\"\n", "**🤖 Answer**\n", "\n", "{answer}\n", "\n", "---\n", "\n", "**🔍 Debug Trace**\n", "{log}\n", "\"\"\"\n", " \n", " except Exception as e:\n", " return f\"⚠️ Error processing request: {str(e)}\"\n", "\n", "\n", "# Create the Gradio Chat Interface\n", "demo = gr.ChatInterface(\n", " fn=chat_fn,\n", " title=\"🚀 NVIDIA AI Assistant - Multi-Agent System\",\n", " description=(\n", " \"Ask me anything about NVIDIA! \"\n", " \"I can help with:\\n\"\n", " \"• Financial results & Annual Reports (2023-2025)\\n\"\n", " \"• Stock price predictions (ML model)\\n\"\n", " \"• Latest news and market outlook\\n\"\n", " \"• Company strategy, products, and future plans\"\n", " ),\n", " examples=[\n", " \"What was Nvidia's revenue in 2025?\",\n", " \"Predict tomorrow's Nvidia stock price\",\n", " \"What are the latest news about Nvidia?\",\n", " \"Summarize the key risks from the 2025 annual report\",\n", " \"Tell me about Nvidia's Blackwell platform\",\n", " \"Give me an overview of Nvidia's financial performance\"\n", " ],\n", " cache_examples=False,\n", " # theme is applied at launch level or via gr.Blocks now\n", ")\n", "\n", "# Launch with theme and other settings\n", "demo.launch(\n", " debug=True,\n", " share=True, # Public link (optional)\n", " server_name=\"127.0.0.1\", # Better for VS Code\n", " server_port=7862,\n", " theme=gr.themes.Soft(), # type: ignore\n", " show_error=True,\n", " quiet=False,\n", " prevent_thread_lock=False,\n", " ssr_mode=False # Helps prevent blank page issues\n", ")" ] }, { "cell_type": "code", "execution_count": null, "id": "5bec1bf1", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "c:\\Users\\User\\miniconda3\\envs\\nvidia_project\\Lib\\site-packages\\tqdm\\auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", " from .autonotebook import tqdm as notebook_tqdm\n", "Loading weights: 100%|██████████| 199/199 [00:00<00:00, 3827.10it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "🧹 Old ChromaDB completely reset. Starting fresh...\n", "📄 Loading all Nvidia Annual Reports...\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 12/12 [01:47<00:00, 8.95s/it]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "✅ Loaded 2263 PDF documents.\n", "🔪 Split into 4647 chunks.\n", "🎉 SUCCESS! Fresh RAG built with 4647 chunks.\n", "📁 Check your chroma_db_v2 folder — it should now be much smaller!\n" ] } ], "source": [ "# ========================\n", "# CLEAN REBUILD - ULTIMATE ONE-CELL FIX (Run this in a new cell)\n", "# ========================\n", "\n", "# import chromadb\n", "# from chromadb.config import Settings\n", "# from langchain_community.document_loaders import DirectoryLoader, PyPDFLoader\n", "# from langchain_chroma import Chroma\n", "# from langchain_huggingface import HuggingFaceEmbeddings\n", "# from langchain_text_splitters import RecursiveCharacterTextSplitter\n", "# import os\n", "# import re\n", "# import torch\n", "\n", "# # ==================== CONFIG ====================\n", "# SOURCE_DATA_DIR = r\"C:\\Users\\User\\NTU_DSAI\\Module-5\\Jony_Nvidia_1\\Nvidia_Annual_Reports_2014-2025\"\n", "# DRIVE_DB_PATH = r\"C:\\Users\\User\\NTU_DSAI\\Module-5\\Jony_Nvidia_1\\chroma_db_v2\"\n", "# EMBEDDING_MODEL = \"all-mpnet-base-v2\"\n", "\n", "# device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n", "# embeddings = HuggingFaceEmbeddings(model_name=EMBEDDING_MODEL, model_kwargs={\"device\": device})\n", "\n", "# # ==================== FORCE CLEAN START ====================\n", "# persistent_client = chromadb.PersistentClient(\n", "# path=DRIVE_DB_PATH, \n", "# settings=Settings(allow_reset=True)\n", "# )\n", "\n", "# persistent_client.reset()\n", "# print(\"🧹 Old ChromaDB completely reset. Starting fresh...\")\n", "\n", "# # ==================== BUILD FRESH ====================\n", "# collection_name = \"nvidia_annual_reports_2014_2025\"\n", "\n", "# print(\"📄 Loading all Nvidia Annual Reports...\")\n", "# loader = DirectoryLoader(SOURCE_DATA_DIR, glob=\"**/*.pdf\", loader_cls=PyPDFLoader, show_progress=True) # pyright: ignore[reportArgumentType]\n", "# docs = loader.load()\n", "\n", "# for doc in docs:\n", "# match = re.search(r'(\\d{4})', doc.metadata.get('source', ''))\n", "# if match:\n", "# doc.metadata['year'] = int(match.group(1))\n", "# doc.metadata['source_type'] = 'annual_report'\n", "\n", "# print(f\"✅ Loaded {len(docs)} PDF documents.\")\n", "\n", "# splitter = RecursiveCharacterTextSplitter(chunk_size=2500, chunk_overlap=600)\n", "# split_docs = splitter.split_documents(docs)\n", "# print(f\"🔪 Split into {len(split_docs)} chunks.\")\n", "\n", "# vectorstore = Chroma.from_documents(\n", "# documents=split_docs,\n", "# embedding=embeddings,\n", "# client=persistent_client,\n", "# collection_name=collection_name\n", "# )\n", "\n", "# print(f\"🎉 SUCCESS! Fresh RAG built with {vectorstore._collection.count()} chunks.\")\n", "# print(\"📁 Check your chroma_db_v2 folder — it should now be much smaller!\")" ] } ], "metadata": { "kernelspec": { "display_name": "nvidia_project", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.15" } }, "nbformat": 4, "nbformat_minor": 5 }