{"id":31819,"date":"2026-02-13T07:56:01","date_gmt":"2026-02-13T15:56:01","guid":{"rendered":"https:\/\/www.pingcap.com\/?p=31819"},"modified":"2026-02-13T07:56:04","modified_gmt":"2026-02-13T15:56:04","slug":"ai-college-roi-advisor-build-financial-modeling-tidb","status":"publish","type":"post","link":"https:\/\/www.pingcap.com\/ko\/blog\/ai-college-roi-advisor-build-financial-modeling-tidb\/","title":{"rendered":"How to Build an AI Advisor That Shows College ROI (Not Rankings)"},"content":{"rendered":"<p>I know too many people drowning in student debt.<\/p>\n\n\n\n<p>A friend got her Master\u2019s in Music from an expensive private school. She\u2019s $120k in debt and works at Starbucks. Another guy I know got a business degree from a school that costs $50k a year. He\u2019s doing the same job he could\u2019ve gotten without the degree, except now he has loan payments until he\u2019s 40.<\/p>\n\n\n\n<p>These are smart, driven people. They just didn\u2019t have the right information when they were 17 and picking schools. Nobody showed them the math.<\/p>\n\n\n\n<p>Most college tools sell vibes: rankings, campus photos, acceptance rates. What they don\u2019t show you is the only question that matters for most families:<\/p>\n\n\n\n<p><em>\u201cIf I pick this school with this major, what does my financial life look like at 30\u2026or 35?\u201d<\/em><\/p>\n\n\n\n<p>So I built <a href=\"https:\/\/app.parallellives.ai\/collegepicker\"><strong>College Picker<\/strong><\/a>, an AI college advisor that compares schools based on real financial outcomes. Not prestige. Not marketing. Money<strong>.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Key_Takeaways\"><\/span>Key Takeaways<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Rankings can be wildly disconnected from affordability and post-grad outcomes.<\/li>\n\n\n\n<li>\u201cCollege cost\u201d isn\u2019t one number. It depends on income, residency, aid, and transfer paths.<\/li>\n\n\n\n<li>The tool models <strong>20-year net worth projections<\/strong> per school + major + career path.<\/li>\n\n\n\n<li><a href=\"https:\/\/www.pingcap.com\/ko\/tidb\/\">\ud2f0DB<\/a> lets me do <strong>relational filtering + full-text search + vector similarity<\/strong> in one SQL query, without syncing multiple databases.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Beyond_College_Rankings_Solving_the_Student_Debt_Crisis_with_Data\"><\/span>Beyond College Rankings: Solving the Student Debt Crisis with Data<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>College rankings don\u2019t help. US News ranks schools by prestige metrics that have almost nothing to do with whether you\u2019ll be able to pay rent after graduation. A school can be #15 in the country and still leave you with $200k in debt and a $45k starting salary.<\/p>\n\n\n\n<p>I\u2019m not saying \u201cdon\u2019t pursue music or art.\u201d I\u2019m saying: if you want to study painting, maybe do it as a minor while you major in something that pays the bills. Keep making art. Do not take on six figures of debt for a degree that cannot realistically service it.<\/p>\n\n\n\n<p>College Picker is built to answer the question every 17-year-old should be asking:<\/p>\n\n\n\n<p><em>\u201cIs this degree worth the debt?\u201d<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"What_College_Picker_Does\"><\/span>What College Picker Does<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Given a student profile (income, state, intended major, and optionally a career path), College Picker:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Finds relevant schools using <strong><a href=\"https:\/\/www.pingcap.com\/ko\/tutorial\/tutorial-hybrid-search-combining-vector-and-full-text-search\/\">hybrid search<\/a><\/strong> (keywords + semantic search)<\/li>\n\n\n\n<li>Pulls costs, debt, graduation rates, and earnings outcomes<\/li>\n\n\n\n<li>Looks up career path requirements (grad school, residency years, etc.)<\/li>\n\n\n\n<li>Generates <strong>20-year projections<\/strong> (debt payoff, salary growth, savings\/investing)<\/li>\n\n\n\n<li>Produces a comparison verdict (Excellent\/Good\/Fair\/Poor) with reasoning<\/li>\n\n\n\n<li>Visualizes the tradeoffs as a decision tree<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"The_AI_Stack_Combining_TiDB_Cloud_Claude_Opus_and_GPT-4o_mini\"><\/span>The AI Stack: Combining TiDB Cloud, Claude Opus, and GPT-4o mini<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>There\u2019s no single model that does everything well, so I use the right tool for each job:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><a href=\"https:\/\/www.pingcap.com\/ko\/tidb\/cloud\/\">TiDB Cloud \uc2a4\ud0c0\ud130<\/a><\/strong>: I didn\u2019t want to run three databases. Postgres for user data, a vector DB for embeddings, Redis for caching. That\u2019s a lot of infrastructure for a side project. TiDB handles relational queries and vector similarity in the same SQL statement. It\u2019s MySQL-compatible so I didn\u2019t have to learn anything new. And the Starter tier scales to zero, so I\u2019m not paying when nobody\u2019s using it.<\/li>\n\n\n\n<li><strong>Claude Opus 4.5<\/strong>: The conversational advisor. Students ask questions like \u201cShould I go to Stanford or community college first?\u201d and it responds with real data, not platitudes.<\/li>\n\n\n\n<li><strong>Claude Sonnet 4<\/strong>: Career data lookup. Given a career like \u201cpediatric surgeon,\u201d it returns structured salary data, residency years, and grad school costs. I use Sonnet because speed matters and it\u2019s cheaper than Opus for structured extraction.<\/li>\n\n\n\n<li><strong>GPT-4o mini<\/strong>: College comparison verdicts. It weighs tradeoffs and outputs \u201cExcellent\/Good\/Fair\/Poor\u201d ratings with reasoning.<\/li>\n\n\n\n<li><strong>OpenAI Embeddings<\/strong>: text-embedding-3-small generates vectors for everything, powering semantic search like \u201caffordable engineering schools near California.\u201d<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Building_the_AI_Workflow_Mapping_Financial_Outcomes_from_Search_to_Projection\"><\/span>Building the AI Workflow: Mapping Financial Outcomes from Search to Projection<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Here\u2019s the pipeline:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;Student inputs profile: income, state, intended major]\n      \u2193\n&#91;Search colleges via hybrid search (text + vector)]\n      \u2193\n&#91;Fetch college data from TiDB: costs, outcomes, earnings]\n      \u2193\n&#91;Claude looks up career salary data for intended path]\n      \u2193\n&#91;Generate 20-year financial projection per college]\n      \u2193\n&#91;Build decision tree visualization]\n      \u2193\n&#91;GPT-4o-mini generates verdict: which school is better ROI]\n      \u2193\n&#91;Render comparison with break-even ages]\n<\/code><\/pre>\n\n\n\n<p><strong>Key insight:<\/strong> College cost isn\u2019t a single number. It varies by family income, in-state vs out-of-state, financial aid, and whether you do a 2+2 community college transfer. The system models all of it.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Why_Unified_Databases_Beat_Split_Architectures_for_AI_Applications\"><\/span>Why Unified Databases Beat Split Architectures for AI Applications<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Most AI apps run a split architecture:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Postgres for relational data<\/li>\n\n\n\n<li>A vector database (Pinecone\/Weaviate\/etc.) for embeddings<\/li>\n<\/ul>\n\n\n\n<p>It works, but you inherit a couple problems that get painful fast.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Eliminating the &#8220;Sync Tax&#8221; Between Relational and Vector Data<\/h3>\n\n\n\n<p>If college data lives in one database and embeddings live in another, every update becomes a mini two-phase commit you\u2019re managing yourself:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Update the relational row<\/li>\n\n\n\n<li>Regenerate the embedding<\/li>\n\n\n\n<li>Upsert to the vector database<\/li>\n\n\n\n<li>Hope nothing fails in between<\/li>\n<\/ol>\n\n\n\n<p>When College Scorecard releases new earnings data, you\u2019re running sync scripts and praying for consistency. You can end up with $85k earnings in Postgres but an embedding generated from old $72k data. Search results get wrong in ways that are hard to debug.<\/p>\n\n\n\n<p>With TiDB, that problem disappears:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>UPDATE colleges\nSET earnings_10yr = 85000,\n    embedding = ?\nWHERE id = 12345;<\/code><\/pre>\n\n\n\n<p>One transaction. Both update or neither updates. <a href=\"https:\/\/www.pingcap.com\/ko\/blog\/distributed-transactions-tidb\/\">ACID guarantees<\/a> across relational and vector data.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. Solving the Query Latency Problem: Combining Relational Filters and Vector Search in One SQL Statement<\/h3>\n\n\n\n<p>My search needed three things at once:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Filter by state and earnings<\/li>\n\n\n\n<li>Text match for exact names like \u201cUCLA\u201d<\/li>\n\n\n\n<li>Semantic search for queries like \u201cgood engineering schools\u201d<\/li>\n<\/ul>\n\n\n\n<p>With a split stack, that\u2019s multiple round trips: query the vector DB, fetch IDs, query Postgres, do text search, merge and re-rank in application code.<\/p>\n\n\n\n<p>With TiDB, it\u2019s one query:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT id, name, state, earnings_10yr,\n       FTS_MATCH_WORD(name, 'UCLA') as text_score,\n       VEC_COSINE_DISTANCE(embedding, ?) as vector_distance\nFROM colleges\nWHERE state = 'CA' AND earnings_10yr &gt; 60000\nORDER BY\n  CASE WHEN FTS_MATCH_WORD(name, 'UCLA') &gt; 0 THEN 0 ELSE 1 END,\n  vector_distance ASC\nLIMIT 10;<\/code><\/pre>\n\n\n\n<p>Relational filter, text search, vector search, custom ranking. One query. One round trip. (In my case: ~47ms.)<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">AI Infrastructure Economics: Why &#8216;Scale to Zero&#8217; Is Essential for Side Projects<\/h3>\n\n\n\n<p>Vector databases often charge by vector count and queries. At ~6,000 colleges with 1,536-dim embeddings, my rough math was <strong>~$70\/month minimum<\/strong> on many platforms, plus the relational database hosting, plus the engineering time to keep everything in sync.<\/p>\n\n\n\n<p>For a side project with sporadic traffic, TiDB Cloud Starter scaling to zero is the difference between \u201cI\u2019ll keep this running\u201d and \u201cI\u2019m shutting it down.\u201d<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Technical_Implementation_SQL_Vector_Search_and_Hybrid_Querying\"><\/span>Technical Implementation: SQL Vector Search and Hybrid Querying<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Here\u2019s what I store per college:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CREATE TABLE colleges (\n  id INT PRIMARY KEY,\n  name VARCHAR(255),\n  state VARCHAR(2),\n  ownership ENUM('public', 'private_nonprofit', 'private_forprofit'),\n  \n  -- Costs (varies by income bracket)\n  tuition_in_state INT,\n  tuition_out_of_state INT,\n  room_and_board INT,\n  net_price_0_30k INT,      -- Family income $0-30k\n  net_price_30_48k INT,     -- Family income $30k-48k\n  net_price_48_75k INT,     -- Family income $48k-75k\n  net_price_75_110k INT,    -- Family income $75k-110k\n  net_price_110k_plus INT,  -- Family income $110k+\n  \n  -- Outcomes\n  graduation_rate_4yr FLOAT,\n  graduation_rate_6yr FLOAT,\n  retention_rate FLOAT,\n  \n  -- Earnings\n  earnings_6yr INT,         -- Median earnings 6 years after enrollment\n  earnings_10yr INT,        -- Median earnings 10 years after enrollment\n  \n  -- Debt\n  median_debt INT,\n  monthly_payment INT,\n  \n  -- Vector embedding for semantic search\n  embedding VECTOR(1536),\n  \n  INDEX idx_state (state),\n  INDEX idx_earnings (earnings_10yr),\n  VECTOR INDEX idx_embedding (embedding) USING HNSW\n);<\/code><\/pre>\n\n\n\n<p>That <code>VECTOR(1536)<\/code> column sits next to <code>tuition_in_state<\/code>. Same table, same row, same transaction.<\/p>\n\n\n\n<p>Also: notice the five income brackets for net price. A family making $40k pays a very different amount than one making $150k. Most college tools ignore this. They show sticker price like everyone pays the same. They don\u2019t.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Implementing Hybrid Search: Merging Keyword Matching and Vector Similarity<\/h3>\n\n\n\n<p>Students search in messy ways:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u201cUCLA\u201d<\/li>\n\n\n\n<li>\u201cUniversity of California Los Angeles\u201d<\/li>\n\n\n\n<li>\u201cgood CS schools in California\u201d<\/li>\n\n\n\n<li>\u201caffordable engineering near LA\u201d<\/li>\n<\/ul>\n\n\n\n<p>So I built a hybrid search route that combines keyword matching with semantic similarity.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>export async function POST(request: NextRequest) {\n  const { query, mode = \"hybrid\", limit = 10 } = await request.json();\n  \n  \/\/ Generate embedding for semantic search\n  const queryEmbedding = await generateEmbedding(query);\n\n  if (mode === \"text\" || mode === \"hybrid\") {\n    \/\/ BM25 text search on college names\n    const &#91;textResults] = await pool.execute(`\n      SELECT id, name, state, earnings_10yr,\n             FTS_MATCH_WORD(name, ?) as relevance\n      FROM colleges\n      WHERE FTS_MATCH_WORD(name, ?)\n      ORDER BY relevance DESC\n      LIMIT ?\n    `, &#91;query, query, limit]);\n\n    if (mode === \"text\" || textResults.length &gt;= limit) {\n      return NextResponse.json({ results: textResults, mode: \"text\" });\n    }\n  }\n\n  if (mode === \"vector\" || mode === \"hybrid\") {\n    \/\/ Semantic search via vector similarity\n    const &#91;vectorResults] = await pool.execute(`\n      SELECT id, name, state, earnings_10yr,\n             VEC_COSINE_DISTANCE(embedding, ?) as distance\n      FROM colleges\n      WHERE VEC_COSINE_DISTANCE(embedding, ?) &lt; 0.5\n      ORDER BY distance ASC\n      LIMIT ?\n    `, &#91;queryEmbedding, queryEmbedding, limit]);\n\n    \/\/ Merge and deduplicate results\n    const merged = mergeResults(textResults, vectorResults);\n    return NextResponse.json({ results: merged, mode: \"hybrid\" });\n  }\n}<\/code><\/pre>\n\n\n\n<p><code>FTS_MATCH_WORD()<\/code> handles exact matches. <code>VEC_COSINE_DISTANCE()<\/code> handles semantic queries. Same database, same query pattern, both search paradigms.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The College Alias Problem: Improving Search Accuracy with Lookup Tables<\/h3>\n\n\n\n<p>This is where I wasted a full day.<\/p>\n\n\n\n<p>My first version just did fuzzy search:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT * FROM colleges WHERE LOWER(name) LIKE '%mit%' LIMIT 5<\/code><\/pre>\n\n\n\n<p>It was slow. And it returned garbage. \u201cMIT\u201d matched \u201cSummit University\u201d and \u201cSmith College\u201d before it matched Massachusetts Institute of Technology.<\/p>\n\n\n\n<p>I tried weights based on string position. Levenshtein distance. Regex patterns. All fragile. All slow.<\/p>\n\n\n\n<p>The fix was embarrassingly simple: maintain a lookup table.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CREATE TABLE college_aliases (\n  alias VARCHAR(255) PRIMARY KEY,\n  college_id INT,\n  INDEX idx_college (college_id)\n);\n\n-- Examples\nINSERT INTO college_aliases VALUES\n  ('UCLA', 110662),\n  ('University of California Los Angeles', 110662),\n  ('UC Los Angeles', 110662),\n  ('USC', 123961),\n  ('University of Southern California', 123961),\n  ('MIT', 166683),\n  ('Massachusetts Institute of Technology', 166683);<\/code><\/pre>\n\n\n\n<p>Now the chat route extracts possible school names, checks aliases first, then falls back to fuzzy search:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>async function findColleges(terms: string&#91;]): Promise&lt;College&#91;]&gt; {\n  const colleges: College&#91;] = &#91;];\n  \n  for (const term of terms) {\n    \/\/ Try alias lookup first (fast, exact)\n    const &#91;aliasRows] = await pool.execute(\n      `SELECT c.* FROM colleges c\n       JOIN college_aliases a ON c.id = a.college_id\n       WHERE LOWER(a.alias) = LOWER(?)`,\n      &#91;term]\n    );\n    \n    if (aliasRows.length &gt; 0) {\n      colleges.push(aliasRows&#91;0]);\n      continue;\n    }\n    \n    \/\/ Fall back to fuzzy search\n    const &#91;fuzzyRows] = await pool.execute(\n      `SELECT * FROM colleges\n       WHERE LOWER(name) LIKE ?\n       LIMIT 1`,\n      &#91;`%${term.toLowerCase()}%`]\n    );\n    \n    if (fuzzyRows.length &gt; 0) {\n      colleges.push(fuzzyRows&#91;0]);\n    }\n  }\n  \n  return colleges;\n}<\/code><\/pre>\n\n\n\n<p>I also log misses so the system gets better over time:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CREATE TABLE college_lookup_misses (\n  term VARCHAR(255),\n  searched_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n);<\/code><\/pre>\n\n\n\n<p>Every week I check the missing table and add new aliases. That\u2019s dramatically more reliable than trying to guess what abbreviations people use.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Calculating College ROI: Modeling 20-Year Net Worth and Break-Even Ages<\/h3>\n\n\n\n<p>Given a college, major, and career path, I project net worth over 20 years.<\/p>\n\n\n\n<p>The model factors in:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>College costs (income-adjusted net price)<\/li>\n\n\n\n<li>Scholarships<\/li>\n\n\n\n<li>Major-specific earnings multipliers (CS: 1.8x, Arts: 0.65x)<\/li>\n\n\n\n<li>Career path requirements (med school adds 4 years + ~$240k debt)<\/li>\n\n\n\n<li>Loan repayment (10-year standard plan)<\/li>\n\n\n\n<li>Savings rate (15%) and investment returns (7%)<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>function generateLifePath(\n  college: College,\n  major: string,\n  career: CareerData,\n  familyIncome: number\n): YearlySnapshot&#91;] {\n  const timeline: YearlySnapshot&#91;] = &#91;];\n  \n  \/\/ Get income-adjusted net price\n  const yearlyCollegeCost = getNetPrice(college, familyIncome);\n  const totalCollegeCost = yearlyCollegeCost * 4;\n  \n  \/\/ Major affects starting salary\n  const earningsMultiplier = MAJOR_MULTIPLIERS&#91;major] || 1.0;\n  const baseSalary = college.earnings_10yr * earningsMultiplier;\n  \n  \/\/ Career might require grad school\n  const gradSchoolYears = career.grad_school_years || 0;\n  const gradSchoolCost = career.grad_school_cost || 0;\n  const residencyYears = career.residency_years || 0;\n  \n  let totalDebt = totalCollegeCost + gradSchoolCost;\n  let netWorth = -totalDebt;\n  let currentSalary = 0;\n  \n  for (let year = 0; year &lt;= 20; year++) {\n    const age = 18 + year;\n    let phase = \"college\";\n    \n    if (year &lt; 4) {\n      phase = \"college\";\n      currentSalary = 0;\n    } else if (year &lt; 4 + gradSchoolYears) {\n      phase = \"grad_school\";\n      currentSalary = 0;\n    } else if (year &lt; 4 + gradSchoolYears + residencyYears) {\n      phase = \"residency\";\n      currentSalary = career.residency_salary || 60000;\n    } else {\n      phase = \"career\";\n      const yearsWorking = year - 4 - gradSchoolYears - residencyYears;\n      currentSalary = baseSalary * Math.pow(1.03, yearsWorking); \/\/ 3% annual raises\n    }\n    \n    \/\/ Loan repayment during career years\n    const loanPayment = phase === \"career\" ? (totalDebt \/ 10) : 0;\n    \n    \/\/ Savings and investment\n    const savings = currentSalary * 0.15;\n    netWorth = netWorth * 1.07 + savings - loanPayment;\n    \n    timeline.push({\n      year,\n      age,\n      phase,\n      salary: Math.round(currentSalary),\n      debt: Math.round(Math.max(0, totalDebt)),\n      netWorth: Math.round(netWorth)\n    });\n    \n    totalDebt = Math.max(0, totalDebt - loanPayment);\n  }\n  \n  return timeline;\n}<\/code><\/pre>\n\n\n\n<p>The output is dead simple to understand. For medical paths, it shows the brutal truth: you often don\u2019t break even until your mid-30s, but long-term earnings can compensate.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"549\" height=\"159\" src=\"https:\/\/static.pingcap.com\/files\/2026\/02\/12141803\/image-4.png\" alt=\"Output from a AI College ROI Advisor.\" class=\"wp-image-31833\" srcset=\"https:\/\/static.pingcap.com\/files\/2026\/02\/12141803\/image-4.png 549w, https:\/\/static.pingcap.com\/files\/2026\/02\/12141803\/image-4-300x87.png 300w\" sizes=\"auto, (max-width: 549px) 100vw, 549px\" \/><\/figure>\n\n\n\n<p>And for that friend with the Master\u2019s in Music? The projection would\u2019ve shown exactly what she was getting into. $120k debt, ~$35k starting salary, break-even age: never.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Extracting Real-Time Career Salary Data with Claude Sonnet<\/h3>\n\n\n\n<p>My first version hardcoded salary data. I had a giant JSON file with 200+ careers and their salaries.<\/p>\n\n\n\n<p>It was wrong within six months. Salaries change. New careers emerge. I was constantly patching it.<\/p>\n\n\n\n<p>Now I ask Claude Sonnet to look it up:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const response = await anthropic.messages.create({\n  model: \"claude-sonnet-4-20250514\",\n  max_tokens: 500,\n  system: `You are a career data assistant. Given a career, return JSON with:\n    - title: normalized job title\n    - median_salary: annual median\n    - salary_25th: 25th percentile\n    - salary_75th: 75th percentile\n    - growth_rate: projected job growth %\n    - education_years: years of education\/training required\n    - grad_school_required: boolean\n    - grad_school_years: if required\n    - grad_school_cost: estimated total cost\n    - residency_years: for medical careers\n    - residency_salary: if applicable`,\n  messages: &#91;{ role: \"user\", content: `Career: ${careerInput}` }]\n});<\/code><\/pre>\n\n\n\n<p>This handles edge cases like:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u201cpediatric surgeon\u201d (med school + residency)<\/li>\n\n\n\n<li>\u201cpatent attorney\u201d (law school after undergrad)<\/li>\n<\/ul>\n\n\n\n<p>Results are cached in-memory to avoid repeated API calls for common careers.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Visualizing Financial Paths with ReactFlow Decision Trees<\/h3>\n\n\n\n<p>I generate a decision tree showing outcomes at key stages:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function buildDecisionTree(colleges: College&#91;], lifePaths: LifePath&#91;]): TreeNode&#91;] {\n  const nodes: TreeNode&#91;] = &#91;];\n  const edges: TreeEdge&#91;] = &#91;];\n  \n  \/\/ Root node: \"Now\"\n  nodes.push({\n    id: \"start\",\n    data: { label: \"Now (Age 18)\", netWorth: 0 },\n    position: { x: 0, y: 0 }\n  });\n  \n  for (const &#91;index, college] of colleges.entries()) {\n    const path = lifePaths&#91;index];\n    \n    \/\/ Year 1 node\n    nodes.push({\n      id: `${college.id}-y1`,\n      data: {\n        label: college.name,\n        phase: \"Freshman\",\n        netWorth: path&#91;1].netWorth\n      }\n    });\n    \n    \/\/ Year 4 node (graduation)\n    nodes.push({\n      id: `${college.id}-y4`,\n      data: {\n        label: \"Graduation\",\n        netWorth: path&#91;4].netWorth,\n        debt: path&#91;4].debt\n      }\n    });\n    \n    \/\/ Year 10 node (mid-career)\n    nodes.push({\n      id: `${college.id}-y10`,\n      data: {\n        label: \"Year 10\",\n        netWorth: path&#91;10].netWorth,\n        salary: path&#91;10].salary,\n        sentiment: path&#91;10].netWorth &gt; 0 ? \"positive\" : \"negative\"\n      }\n    });\n    \n    \/\/ Connect nodes\n    edges.push({ source: \"start\", target: `${college.id}-y1` });\n    edges.push({ source: `${college.id}-y1`, target: `${college.id}-y4` });\n    edges.push({ source: `${college.id}-y4`, target: `${college.id}-y10` });\n  }\n  \n  \/\/ Add \"Skip College\" path for comparison\n  nodes.push({\n    id: \"skip-y10\",\n    data: {\n      label: \"No Degree - Year 10\",\n      netWorth: calculateNoDegreeNetWorth(10),\n      salary: 35000\n    }\n  });\n  \n  return { nodes, edges };\n}<\/code><\/pre>\n\n\n\n<p>It uses ReactFlow + Dagre for layout. Nodes are color-coded: Green for positive net worth, red for negative.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"What_Im_Still_Iterating_On\"><\/span>What I\u2019m Still Iterating On<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Major multipliers are rough.<\/strong> A CS degree from Stanford and one from a regional state school don\u2019t produce the same outcomes, but right now I apply the same 1.8x multiplier to both.<\/li>\n\n\n\n<li><strong>School-specific multipliers are messy.<\/strong> I\u2019m working on field-of-study data from College Scorecard. Lots of missing values and inconsistent categorization.<\/li>\n\n\n\n<li><strong>Career lookups aren\u2019t perfectly consistent.<\/strong> Ask about \u201cdata scientist\u201d twice and you might get slightly different salary ranges. I\u2019m considering using a structured source like BLS for base numbers and keeping Claude for edge cases and career-path logic.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"The_Results\"><\/span>The Results<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>What works today:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Hybrid search across 6,000+ colleges<\/li>\n\n\n\n<li>Income-adjusted cost comparisons across five brackets<\/li>\n\n\n\n<li>20-year projections (with career-specific paths)<\/li>\n\n\n\n<li>Decision tree visualizations<\/li>\n\n\n\n<li>AI verdicts comparing schools head-to-head<\/li>\n\n\n\n<li>2+2 community college alternatives<\/li>\n\n\n\n<li>Voice chat if you don\u2019t want to type<\/li>\n<\/ul>\n\n\n\n<p>What\u2019s next:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Scholarship database integration<\/li>\n\n\n\n<li>Geographic cost-of-living adjustments<\/li>\n\n\n\n<li>School-specific major earnings (not just national averages)<\/li>\n\n\n\n<li>Multi-year historical trends<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Try_It_Yourself\"><\/span>Try It Yourself<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>The college data comes from the Department of Education\u2019s College Scorecard. The AI layers add the financial modeling and natural language interface.<\/p>\n\n\n\n<p>If you want to build something similar, TiDB Cloud Starter gives you hybrid search out of the box: FTS_MATCH_WORD for keywords, VEC_COSINE_DISTANCE for semantics, same query, same database. No need to stitch together Postgres plus a vector DB plus Redis.<\/p>\n\n\n\n<p>The main insight from building this: Rankings don\u2019t matter. ROI matters.<\/p>\n\n\n\n<p>A $200k degree that leads to a $50k job is a worse deal than a $40k degree that leads to the same job. The math isn\u2019t complicated. The data just isn\u2019t presented this way anywhere else.<\/p>\n\n\n\n<p>If this tool had existed when my friend was picking schools, she might not be $120k in debt right now. That\u2019s why I built it.<\/p>\n\n\n\n<p>Check out my <a href=\"https:\/\/github.com\/\"><strong>College Picker GitHub repo<\/strong><\/a> to see how I used TiDB Cloud Starter and hybrid search to build this financial-first advisor.<\/p>","protected":false},"excerpt":{"rendered":"<p>I know too many people drowning in student debt. A friend got her Master\u2019s in Music from an expensive private school. She\u2019s $120k in debt and works at Starbucks. Another guy I know got a business degree from a school that costs $50k a year. He\u2019s doing the same job he could\u2019ve gotten without the [&hellip;]<\/p>\n","protected":false},"author":324,"featured_media":31820,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"ub_ctt_via":"","footnotes":""},"categories":[436],"tags":[138,459,460,111,461],"class_list":["post-31819","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorial","tag-ai","tag-college-advisor","tag-hybrid-search","tag-tidb","tag-unified-database"],"acf":[],"featured_image_src":"https:\/\/static.pingcap.com\/files\/2026\/02\/12140852\/tidb_feature_1800x600-1.png","author_info":{"display_name":"Chris Dabatos","author_link":"https:\/\/www.pingcap.com\/ko\/blog\/author\/chris-dabatos\/"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>AI College ROI Advisor: Build Financial Modeling with TiDB<\/title>\n<meta name=\"description\" content=\"Learn how TiDB powers an AI advisor to model 20-year college ROI. Compare real outcomes and see if your degree is worth the debt.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.pingcap.com\/ko\/blog\/ai-college-roi-advisor-build-financial-modeling-tidb\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"AI College ROI Advisor: Build Financial Modeling with TiDB\" \/>\n<meta property=\"og:description\" content=\"Learn how TiDB powers an AI advisor to model 20-year college ROI. Compare real outcomes and see if your degree is worth the debt.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.pingcap.com\/ko\/blog\/ai-college-roi-advisor-build-financial-modeling-tidb\/\" \/>\n<meta property=\"og:site_name\" content=\"TiDB\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/facebook.com\/pingcap2015\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-13T15:56:01+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-13T15:56:04+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/static.pingcap.com\/files\/2026\/02\/12140911\/tidb_1200x627-2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2400\" \/>\n\t<meta property=\"og:image:height\" content=\"1254\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Chris Dabatos\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/static.pingcap.com\/files\/2026\/02\/12140927\/tidb_twitter_1600x900-3.png\" \/>\n<meta name=\"twitter:creator\" content=\"@PingCAP\" \/>\n<meta name=\"twitter:site\" content=\"@PingCAP\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Chris Dabatos\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"14\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.pingcap.com\/blog\/ai-college-roi-advisor-build-financial-modeling-tidb\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/ai-college-roi-advisor-build-financial-modeling-tidb\/\"},\"author\":{\"name\":\"Chris Dabatos\",\"@id\":\"https:\/\/www.pingcap.com\/#\/schema\/person\/4d7ecdb90868256414855723f838c9e0\"},\"headline\":\"How to Build an AI Advisor That Shows College ROI (Not Rankings)\",\"datePublished\":\"2026-02-13T15:56:01+00:00\",\"dateModified\":\"2026-02-13T15:56:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/ai-college-roi-advisor-build-financial-modeling-tidb\/\"},\"wordCount\":1800,\"publisher\":{\"@id\":\"https:\/\/www.pingcap.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/ai-college-roi-advisor-build-financial-modeling-tidb\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/static.pingcap.com\/files\/2026\/02\/12140852\/tidb_feature_1800x600-1.png\",\"keywords\":[\"AI\",\"College Advisor\",\"Hybrid Search\",\"TiDB\",\"Unified Database\"],\"articleSection\":[\"Tutorial\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.pingcap.com\/blog\/ai-college-roi-advisor-build-financial-modeling-tidb\/\",\"url\":\"https:\/\/www.pingcap.com\/blog\/ai-college-roi-advisor-build-financial-modeling-tidb\/\",\"name\":\"AI College ROI Advisor: Build Financial Modeling with TiDB\",\"isPartOf\":{\"@id\":\"https:\/\/www.pingcap.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/ai-college-roi-advisor-build-financial-modeling-tidb\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/ai-college-roi-advisor-build-financial-modeling-tidb\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/static.pingcap.com\/files\/2026\/02\/12140852\/tidb_feature_1800x600-1.png\",\"datePublished\":\"2026-02-13T15:56:01+00:00\",\"dateModified\":\"2026-02-13T15:56:04+00:00\",\"description\":\"Learn how TiDB powers an AI advisor to model 20-year college ROI. Compare real outcomes and see if your degree is worth the debt.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/ai-college-roi-advisor-build-financial-modeling-tidb\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.pingcap.com\/blog\/ai-college-roi-advisor-build-financial-modeling-tidb\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.pingcap.com\/blog\/ai-college-roi-advisor-build-financial-modeling-tidb\/#primaryimage\",\"url\":\"https:\/\/static.pingcap.com\/files\/2026\/02\/12140852\/tidb_feature_1800x600-1.png\",\"contentUrl\":\"https:\/\/static.pingcap.com\/files\/2026\/02\/12140852\/tidb_feature_1800x600-1.png\",\"width\":3600,\"height\":1200},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.pingcap.com\/blog\/ai-college-roi-advisor-build-financial-modeling-tidb\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.pingcap.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Build an AI Advisor That Shows College ROI (Not Rankings)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.pingcap.com\/#website\",\"url\":\"https:\/\/www.pingcap.com\/\",\"name\":\"TiDB\",\"description\":\"TiDB | SQL at Scale\",\"publisher\":{\"@id\":\"https:\/\/www.pingcap.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.pingcap.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.pingcap.com\/#organization\",\"name\":\"PingCAP\",\"url\":\"https:\/\/www.pingcap.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.pingcap.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/static.pingcap.com\/files\/2021\/11\/pingcap-logo.png\",\"contentUrl\":\"https:\/\/static.pingcap.com\/files\/2021\/11\/pingcap-logo.png\",\"width\":811,\"height\":232,\"caption\":\"PingCAP\"},\"image\":{\"@id\":\"https:\/\/www.pingcap.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/facebook.com\/pingcap2015\",\"https:\/\/x.com\/PingCAP\",\"https:\/\/linkedin.com\/company\/pingcap\",\"https:\/\/youtube.com\/channel\/UCuq4puT32DzHKT5rU1IZpIA\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.pingcap.com\/#\/schema\/person\/4d7ecdb90868256414855723f838c9e0\",\"name\":\"Chris Dabatos\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.pingcap.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/static.pingcap.com\/files\/2022\/10\/17234942\/avatar.jpg\",\"contentUrl\":\"https:\/\/static.pingcap.com\/files\/2022\/10\/17234942\/avatar.jpg\",\"caption\":\"Chris Dabatos\"},\"description\":\"Developer Advocate\",\"url\":\"https:\/\/www.pingcap.com\/ko\/blog\/author\/chris-dabatos\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"AI College ROI Advisor: Build Financial Modeling with TiDB","description":"Learn how TiDB powers an AI advisor to model 20-year college ROI. Compare real outcomes and see if your degree is worth the debt.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.pingcap.com\/ko\/blog\/ai-college-roi-advisor-build-financial-modeling-tidb\/","og_locale":"ko_KR","og_type":"article","og_title":"AI College ROI Advisor: Build Financial Modeling with TiDB","og_description":"Learn how TiDB powers an AI advisor to model 20-year college ROI. Compare real outcomes and see if your degree is worth the debt.","og_url":"https:\/\/www.pingcap.com\/ko\/blog\/ai-college-roi-advisor-build-financial-modeling-tidb\/","og_site_name":"TiDB","article_publisher":"https:\/\/facebook.com\/pingcap2015","article_published_time":"2026-02-13T15:56:01+00:00","article_modified_time":"2026-02-13T15:56:04+00:00","og_image":[{"width":2400,"height":1254,"url":"https:\/\/static.pingcap.com\/files\/2026\/02\/12140911\/tidb_1200x627-2.png","type":"image\/png"}],"author":"Chris Dabatos","twitter_card":"summary_large_image","twitter_image":"https:\/\/static.pingcap.com\/files\/2026\/02\/12140927\/tidb_twitter_1600x900-3.png","twitter_creator":"@PingCAP","twitter_site":"@PingCAP","twitter_misc":{"Written by":"Chris Dabatos","Est. reading time":"14\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.pingcap.com\/blog\/ai-college-roi-advisor-build-financial-modeling-tidb\/#article","isPartOf":{"@id":"https:\/\/www.pingcap.com\/blog\/ai-college-roi-advisor-build-financial-modeling-tidb\/"},"author":{"name":"Chris Dabatos","@id":"https:\/\/www.pingcap.com\/#\/schema\/person\/4d7ecdb90868256414855723f838c9e0"},"headline":"How to Build an AI Advisor That Shows College ROI (Not Rankings)","datePublished":"2026-02-13T15:56:01+00:00","dateModified":"2026-02-13T15:56:04+00:00","mainEntityOfPage":{"@id":"https:\/\/www.pingcap.com\/blog\/ai-college-roi-advisor-build-financial-modeling-tidb\/"},"wordCount":1800,"publisher":{"@id":"https:\/\/www.pingcap.com\/#organization"},"image":{"@id":"https:\/\/www.pingcap.com\/blog\/ai-college-roi-advisor-build-financial-modeling-tidb\/#primaryimage"},"thumbnailUrl":"https:\/\/static.pingcap.com\/files\/2026\/02\/12140852\/tidb_feature_1800x600-1.png","keywords":["AI","College Advisor","Hybrid Search","TiDB","Unified Database"],"articleSection":["Tutorial"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/www.pingcap.com\/blog\/ai-college-roi-advisor-build-financial-modeling-tidb\/","url":"https:\/\/www.pingcap.com\/blog\/ai-college-roi-advisor-build-financial-modeling-tidb\/","name":"AI College ROI Advisor: Build Financial Modeling with TiDB","isPartOf":{"@id":"https:\/\/www.pingcap.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.pingcap.com\/blog\/ai-college-roi-advisor-build-financial-modeling-tidb\/#primaryimage"},"image":{"@id":"https:\/\/www.pingcap.com\/blog\/ai-college-roi-advisor-build-financial-modeling-tidb\/#primaryimage"},"thumbnailUrl":"https:\/\/static.pingcap.com\/files\/2026\/02\/12140852\/tidb_feature_1800x600-1.png","datePublished":"2026-02-13T15:56:01+00:00","dateModified":"2026-02-13T15:56:04+00:00","description":"Learn how TiDB powers an AI advisor to model 20-year college ROI. Compare real outcomes and see if your degree is worth the debt.","breadcrumb":{"@id":"https:\/\/www.pingcap.com\/blog\/ai-college-roi-advisor-build-financial-modeling-tidb\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.pingcap.com\/blog\/ai-college-roi-advisor-build-financial-modeling-tidb\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.pingcap.com\/blog\/ai-college-roi-advisor-build-financial-modeling-tidb\/#primaryimage","url":"https:\/\/static.pingcap.com\/files\/2026\/02\/12140852\/tidb_feature_1800x600-1.png","contentUrl":"https:\/\/static.pingcap.com\/files\/2026\/02\/12140852\/tidb_feature_1800x600-1.png","width":3600,"height":1200},{"@type":"BreadcrumbList","@id":"https:\/\/www.pingcap.com\/blog\/ai-college-roi-advisor-build-financial-modeling-tidb\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.pingcap.com\/"},{"@type":"ListItem","position":2,"name":"How to Build an AI Advisor That Shows College ROI (Not Rankings)"}]},{"@type":"WebSite","@id":"https:\/\/www.pingcap.com\/#website","url":"https:\/\/www.pingcap.com\/","name":"\ud2f0DB","description":"TiDB | SQL at Scale","publisher":{"@id":"https:\/\/www.pingcap.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.pingcap.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/www.pingcap.com\/#organization","name":"PingCAP","url":"https:\/\/www.pingcap.com\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.pingcap.com\/#\/schema\/logo\/image\/","url":"https:\/\/static.pingcap.com\/files\/2021\/11\/pingcap-logo.png","contentUrl":"https:\/\/static.pingcap.com\/files\/2021\/11\/pingcap-logo.png","width":811,"height":232,"caption":"PingCAP"},"image":{"@id":"https:\/\/www.pingcap.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/facebook.com\/pingcap2015","https:\/\/x.com\/PingCAP","https:\/\/linkedin.com\/company\/pingcap","https:\/\/youtube.com\/channel\/UCuq4puT32DzHKT5rU1IZpIA"]},{"@type":"Person","@id":"https:\/\/www.pingcap.com\/#\/schema\/person\/4d7ecdb90868256414855723f838c9e0","name":"Chris Dabatos","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.pingcap.com\/#\/schema\/person\/image\/","url":"https:\/\/static.pingcap.com\/files\/2022\/10\/17234942\/avatar.jpg","contentUrl":"https:\/\/static.pingcap.com\/files\/2022\/10\/17234942\/avatar.jpg","caption":"Chris Dabatos"},"description":"Developer Advocate","url":"https:\/\/www.pingcap.com\/ko\/blog\/author\/chris-dabatos\/"}]}},"grav_blocks":false,"card_markup":"<a class=\"card-resource bg-white\" href=\"https:\/\/www.pingcap.com\/ko\/blog\/ai-college-roi-advisor-build-financial-modeling-tidb\/\"><div class=\"card-resource__image-container\"><img class=\"card-resource__image\" alt=\"tidb_feature_1800x600 (1)\" src=\"https:\/\/static.pingcap.com\/files\/2026\/02\/12140852\/tidb_feature_1800x600-1.png\" loading=\"lazy\" width=3600 height=1200 \/><\/div><div class=\"card-resource__content-container\"><div class=\"card-resource__content-head\"><div class=\"card-resource__category\">Tutorial<\/div><\/div><h5 class=\"card-resource__title\">How to Build an AI Advisor That Shows College ROI (Not Rankings)<\/h5><\/div><\/a>","_links":{"self":[{"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/posts\/31819","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/users\/324"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/comments?post=31819"}],"version-history":[{"count":27,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/posts\/31819\/revisions"}],"predecessor-version":[{"id":31878,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/posts\/31819\/revisions\/31878"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/media\/31820"}],"wp:attachment":[{"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/media?parent=31819"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/categories?post=31819"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/tags?post=31819"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}