<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: KoralZakai</title>
    <description>The latest articles on DEV Community by KoralZakai (@koralzakai).</description>
    <link>https://dev.to/koralzakai</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4031038%2Fe1e239eb-d661-4b24-934c-d8608650694f.png</url>
      <title>DEV Community: KoralZakai</title>
      <link>https://dev.to/koralzakai</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/koralzakai"/>
    <language>en</language>
    <item>
      <title>Everyone Knows Trump's Tweets Move Markets. I Measured It: the Connection Is Real — the Direction Isn't.</title>
      <dc:creator>KoralZakai</dc:creator>
      <pubDate>Wed, 15 Jul 2026 21:05:49 +0000</pubDate>
      <link>https://dev.to/koralzakai/everyone-knows-trumps-tweets-move-markets-i-measured-it-the-connection-is-real-the-direction-1m32</link>
      <guid>https://dev.to/koralzakai/everyone-knows-trumps-tweets-move-markets-i-measured-it-the-connection-is-real-the-direction-1m32</guid>
      <description>&lt;p&gt;&lt;em&gt;#NebiusServerlessChallenge&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live dashboard:&lt;/strong&gt; &lt;a href="https://koralzakai.github.io/stocksPredictionAfterTweet/dashboard.html" rel="noopener noreferrer"&gt;Myth-Busting Quantitative Terminal&lt;/a&gt;&lt;br&gt;
· &lt;strong&gt;Live endpoint:&lt;/strong&gt; &lt;a href="https://port8080-xaqg3twr3yhr61q.tunnel.applications.eu-north1.nebius.cloud/docs" rel="noopener noreferrer"&gt;&lt;code&gt;/predict&lt;/code&gt; on Nebius Serverless&lt;/a&gt;&lt;br&gt;
· &lt;strong&gt;Code:&lt;/strong&gt; &lt;a href="https://github.com/KoralZakai/stocksPredictionAfterTweet" rel="noopener noreferrer"&gt;github.com/KoralZakai/stocksPredictionAfterTweet&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Everyone on a trading desk knows the story. &lt;em&gt;He tweeted about Intel, and the stock ran for&lt;br&gt;
months.&lt;/em&gt; &lt;em&gt;He posts about Iran, oil spikes.&lt;/em&gt; The anecdotes are vivid, specific, and everybody&lt;br&gt;
has one.&lt;/p&gt;

&lt;p&gt;While the prevailing myth suggests that Trump's tweets drive market movements, my research —&lt;br&gt;
built on an analysis of 78,130 posts, with Llama-3.3-70B reading every market-relevant tweet —&lt;br&gt;
reveals a more nuanced reality. The findings demonstrate that the market tends to price in&lt;br&gt;
significant events long before the tweet is even posted. This indicates a case of reverse&lt;br&gt;
causality, where the market dictates Trump's narrative, rather than the other way around. He&lt;br&gt;
isn't moving the market; he is simply riding the wave of established trends.&lt;/p&gt;

&lt;p&gt;Forward — the direction you could trade — the signal is a coin flip, and I can show that with&lt;br&gt;
pre-registered tests rather than vibes: &lt;strong&gt;0 of 63 cells survive correction.&lt;/strong&gt; Getting to that&lt;br&gt;
answer honestly was the hard part. Seven times this pipeline produced a beautiful,&lt;br&gt;
publishable, &lt;em&gt;completely false&lt;/em&gt; positive — each one looking exactly like the discovery the&lt;br&gt;
anecdotes promise. Those seven are the engineering content of this post.&lt;/p&gt;


&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Data.&lt;/strong&gt; 78,130 public posts; 8,317 in the study window (2025-01-01 → 2026-07-06). Daily&lt;br&gt;
OHLCV bars for 62 tickers, committed to the repo. Public data only — a stranger can re-run&lt;br&gt;
every number without a single private key.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The model.&lt;/strong&gt; &lt;code&gt;meta-llama/Llama-3.3-70B-Instruct&lt;/code&gt; on &lt;strong&gt;Nebius AI Studio&lt;/strong&gt;, zero-shot,&lt;br&gt;
reading &lt;em&gt;only the tweet text&lt;/em&gt;: what is this post about, which instruments does it touch, and&lt;br&gt;
which way does each one go. 476 tweets, 1,296 instrument calls. No fine-tuning — the question&lt;br&gt;
is whether the &lt;em&gt;text&lt;/em&gt; carries signal, and a fine-tune would smuggle the outcome into the&lt;br&gt;
answer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The architecture.&lt;/strong&gt; Nebius Serverless AI Jobs run the batch research pipeline; a Serverless&lt;br&gt;
AI Endpoint serves &lt;code&gt;/predict&lt;/code&gt;. One CPU-only image builds both, so batch and serve cannot&lt;br&gt;
drift. The rule that makes this rigorous rather than plumbing: &lt;strong&gt;the serverless layer&lt;br&gt;
contains zero science.&lt;/strong&gt; Every job is a thin CLI that calls pure modules and writes&lt;br&gt;
artifacts. The endpoint is a thin handler that calls the same &lt;code&gt;decide()&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Jobs:      data_ingestion → labeling → features → dataset → training → evaluation → reporting
Endpoint:  POST /predict ──── the same decide() ────┘
Feedback:  /predict → prediction_log.jsonl → jobs/feedback.py → replication report
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The endpoint &lt;strong&gt;refuses to boot&lt;/strong&gt; if its live classification prompt hash or its corpus&lt;br&gt;
sha256 don't match the manifest the batch job produced. The Job produces the numbers; the&lt;br&gt;
Endpoint may only cite them.&lt;/p&gt;


&lt;h2&gt;
  
  
  The seven artifacts
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1. The tie-break that counted ties as wins
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;_tweet_hit&lt;/code&gt; aggregates a tweet's instrument basket into one verdict. The tie rule:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;   &lt;span class="c1"&gt;# 1-of-2 hits → 0.5 &amp;gt;= 0.5 → a WIN
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;49% of baskets hold exactly two instruments&lt;/strong&gt;, where "majority" is undefined. Every 50/50&lt;br&gt;
split scored as a full win. Headline hit rate: &lt;strong&gt;0.618, p=0.017&lt;/strong&gt;. I had a finding.&lt;/p&gt;

&lt;p&gt;A tie carries no directional verdict — it's unscoreable, not a win. Excluding ties: &lt;strong&gt;0.507&lt;/strong&gt;.&lt;br&gt;
Scoring them as losses is the mirror bug (0.393). Two independent unbiased estimators agree&lt;br&gt;
at ~50%. The entire "signal" was the tie rule.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. The permutation null that couldn't say no
&lt;/h3&gt;

&lt;p&gt;The event study flagged &lt;strong&gt;22 of 72 cells&lt;/strong&gt; as significant. Gorgeous. Also arithmetic: he&lt;br&gt;
posts on &lt;strong&gt;83% of all trading sessions&lt;/strong&gt;, so sampling a null pool of size ≈ the population&lt;br&gt;
&lt;em&gt;without replacement&lt;/em&gt; collapsed the null's variance and floored every p-value. Bootstrap with&lt;br&gt;
replacement + dedupe to unique event-days: &lt;strong&gt;22 → 0&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. The same-bar burst
&lt;/h3&gt;

&lt;p&gt;The intraday study returned &lt;strong&gt;9 solid cells, p≈0.0018&lt;/strong&gt; — "war tweets spike oil volume 79%".&lt;br&gt;
He posts in bursts: five tweets in ten minutes. With one price bar per hour, all five pointed&lt;br&gt;
at the &lt;em&gt;same&lt;/em&gt; move. One event counted five times as five pieces of evidence.&lt;/p&gt;

&lt;p&gt;I only caught it because the "biggest movers" list had a tweet about a &lt;strong&gt;renovated Palm Room&lt;/strong&gt;&lt;br&gt;
at the top. Count each hour once: &lt;strong&gt;9 → 0&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. A hardcoded market clock
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;13.5&lt;/code&gt; for the US open. NYSE opens 13:30 UTC in EDT but &lt;strong&gt;14:30 UTC in EST&lt;/strong&gt; — so every tweet&lt;br&gt;
posted 13:30–14:30 UTC from November to mid-March was anchored to the wrong session.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. &lt;code&gt;DJT&lt;/code&gt; — his own signature
&lt;/h3&gt;

&lt;p&gt;Trump signs posts "President DJT". The ticker rule read that as a mention of his listed&lt;br&gt;
company: &lt;strong&gt;754 of 762 "DJT mentions" were the sign-off.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Negated-return math
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;-E(-X)&lt;/code&gt; to get a backward return. Valid for small moves; on a stock that had &lt;em&gt;doubled&lt;/em&gt; it&lt;br&gt;
reported +44.8% for a +105.3% run-up.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. "intel" is not Intel
&lt;/h3&gt;

&lt;p&gt;The one that stings. In a political corpus "intel" overwhelmingly means &lt;em&gt;intelligence&lt;/em&gt;:&lt;br&gt;
&lt;strong&gt;51 of 55 matches (93%)&lt;/strong&gt; were spy-agency tweets — &lt;code&gt;leaking intel&lt;/code&gt;, &lt;code&gt;Danish intel&lt;/code&gt;, &lt;code&gt;Obama&lt;br&gt;
Intel Chief&lt;/code&gt; — and they were sitting in the CORPORATE cohort of a registered study.&lt;/p&gt;

&lt;p&gt;But the &lt;strong&gt;mirror half&lt;/strong&gt; is the lesson. My dashboard kept its &lt;em&gt;own&lt;/em&gt; private Intel regex that&lt;br&gt;
only accepted company context &lt;em&gt;after&lt;/em&gt; the word. So it scored these as &lt;strong&gt;not Intel&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;The CEO of INTEL is highly CONFLICTED and must resign&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;I met with Mr. Lip-Bu Tan, of Intel&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;I PAID ZERO FOR INTEL, IT IS WORTH APPROXIMATELY 11 BILLION DOLLARS&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those are exactly the mentions that &lt;strong&gt;contradict my own headline exhibit&lt;/strong&gt;. Intel was&lt;br&gt;
&lt;em&gt;falling&lt;/em&gt; (−14.3%) when he demanded the CEO resign — then rose &lt;strong&gt;+18.1%&lt;/strong&gt;. My exhibit claimed&lt;br&gt;
"he reflects news rather than generating it," and my regex had quietly deleted four&lt;br&gt;
counterexamples out of eight.&lt;/p&gt;

&lt;p&gt;One rule dropped 93% true positives. The other dropped the inconvenient cases. &lt;strong&gt;A rule that&lt;br&gt;
keeps what fits the thesis is the anecdote generator I was writing about — running on my own&lt;br&gt;
exhibit.&lt;/strong&gt; Fixed, rescored: CORPORATE 43 → 13 events, 72 → 63 cells, verdict &lt;strong&gt;unchanged: 0&lt;br&gt;
survive&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Which way does the arrow point?
&lt;/h2&gt;

&lt;p&gt;The last thing I built asks the connection question directly, on the same committed data.&lt;br&gt;
Not "do his tweets predict prices?" — that's dead — but "does the market predict his&lt;br&gt;
&lt;em&gt;tweets&lt;/em&gt;?" Three measurements, in the order they survived (&lt;code&gt;experiments/event_study/mirror_test.py&lt;/code&gt;,&lt;br&gt;
seeded, offline):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Tweet level.&lt;/strong&gt; How big was the abnormal move a mentioned company had &lt;em&gt;behind&lt;/em&gt; it,
vs random days? &lt;strong&gt;9.7% vs 6.7%, p&amp;lt;0.001.&lt;/strong&gt; A finding! — and it's &lt;strong&gt;fake&lt;/strong&gt;. It's the
burst artifact again: ten of those "observations" are ten tweets about the &lt;em&gt;same&lt;/em&gt;
Tesla fall. My own artifact #3, back for an eighth attempt.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Episode level&lt;/strong&gt; (one observation per company × 21-session window): the gap shrinks
to 8.1% vs 7.1%, &lt;strong&gt;p=0.17. Dead.&lt;/strong&gt; He does not systematically pick movers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Intensity.&lt;/strong&gt; But &lt;em&gt;how many times&lt;/em&gt; he posts about a company tracks the size of the
move behind it: episodes he mentions once sit on ~&lt;strong&gt;4%&lt;/strong&gt; moves; episodes he posts
about three or more times sit on ~&lt;strong&gt;8.4%&lt;/strong&gt; (rank correlation +0.23, raw p=0.033,
n=65). He doesn't tweet about more companies when markets move — he tweets &lt;strong&gt;more
times about the same one&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Honest label: that last result is &lt;strong&gt;exploratory&lt;/strong&gt; — one test, raw p, and if I apply the&lt;br&gt;
same multiple-comparison correction to the mirror script's own three tests that killed the&lt;br&gt;
forward signal, p≈0.10 and it fails too. I'm reporting it as suggestive, not as a survivor;&lt;br&gt;
holding my favourite direction to the same bar as the one I rejected is the whole point of&lt;br&gt;
this project. What &lt;em&gt;doesn't&lt;/em&gt; need a p-value is the case-level record above: the market&lt;br&gt;
moved first, in every famous anecdote I could check.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The timing is the whole illusion.&lt;/strong&gt; His posts land when a stock is already deep inside&lt;br&gt;
a strong, established trend — Intel had gained &lt;strong&gt;+105% over the prior 21 sessions&lt;/strong&gt; when&lt;br&gt;
he posted "Intel Stock continues to rise"; Tesla was mid-fall when the thirteen Tesla&lt;br&gt;
posts arrived. To an observer who sees tweet-then-more-movement, he looks like the cause.&lt;br&gt;
But the trend was there &lt;em&gt;first&lt;/em&gt;: he is reflecting an established market move, narrating it&lt;br&gt;
— and memory quietly reorders the sequence into tweet-then-move. That is why the anecdotes&lt;br&gt;
feel irrefutable and why every one of them dissolved under a timeline: the observed&lt;br&gt;
correlation is real, the implied causation is backwards.&lt;/p&gt;

&lt;p&gt;So the honest summary of the connection: &lt;strong&gt;his feed is a mirror of the market, not a&lt;br&gt;
lever on it&lt;/strong&gt; — and the mirror hypothesis deserves its own pre-registered study, which&lt;br&gt;
the repo is set up to run.&lt;/p&gt;

&lt;h2&gt;
  
  
  The results
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;➡ Live dashboard: &lt;a href="https://koralzakai.github.io/stocksPredictionAfterTweet/dashboard.html" rel="noopener noreferrer"&gt;Myth-Busting Quantitative Terminal&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
— every number below is explorable there, including the wrong-day control and the&lt;br&gt;
per-tweet reasoning behind each call.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;test&lt;/th&gt;
&lt;th&gt;result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;EOD directional (tweet-level)&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;0.522&lt;/strong&gt;, n=67, p=0.40 → &lt;code&gt;shipped_horizons: []&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Beat-SPY (instrument-level, 1,296 calls)&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;48.1% / 47.3% / 48.6% / 49.2%&lt;/strong&gt; at EOD/3d/1w/1mo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Event study, 63 pre-registered cells&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;0 survive&lt;/strong&gt; BH (min p_bh 0.76)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Intraday shock, 30 cells, MDE 0.1–0.3%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0 survive&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Meta-model ("when can we trust it?")&lt;/td&gt;
&lt;td&gt;Val AUC 0.593 → &lt;strong&gt;Test 0.431&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Two tells explain the coin flip. &lt;strong&gt;73% of the model's calls are "UP"&lt;/strong&gt; — it isn't reaching a&lt;br&gt;
direction, it mostly says up, and markets drift up anyway. And its most-named instrument is&lt;br&gt;
&lt;strong&gt;SPY itself&lt;/strong&gt; (304 calls), which cannot beat itself.&lt;/p&gt;

&lt;p&gt;Then the control that settles it. The model's named assets &lt;em&gt;do&lt;/em&gt; move more than the ones it&lt;br&gt;
ignores (1.52% vs 1.12% at one day). So I scored each tweet's picks &lt;strong&gt;on a different tweet's&lt;br&gt;
day&lt;/strong&gt;: &lt;strong&gt;+0.40pp real vs +0.38pp wrong-day&lt;/strong&gt;. The entire advantage survives on a day the&lt;br&gt;
tweet had nothing to do with. It isn't knowledge — it's that oil and the fear gauge are&lt;br&gt;
jumpier than staples and bonds &lt;em&gt;every day of the year&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why the anecdotes survive contact with all of this:&lt;/strong&gt; reverse causality (the mirror,&lt;br&gt;
above), mean reversion (big oil moves recover the same with no tweet), and saturation (he&lt;br&gt;
posts on 83% of sessions, so every big move has a coincident tweet available to blame).&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing the loop, honestly
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;/predict&lt;/code&gt; appends every served call to a bucket-mounted log; a Job waits for each horizon to&lt;br&gt;
&lt;strong&gt;close&lt;/strong&gt;, labels it, and scores it against the same pre-registered registry.&lt;/p&gt;

&lt;p&gt;The obvious version of this — retrain on live calls, ship when p &amp;lt; 0.05 — is the fastest way&lt;br&gt;
to destroy everything above. Callers choose which tweets to send, so that sample is&lt;br&gt;
&lt;em&gt;selected&lt;/em&gt;, not sampled; and re-scoring a growing log until it passes reaches significance&lt;br&gt;
with probability 1 on pure noise. So live calls are a &lt;strong&gt;replication set, never training&lt;br&gt;
data&lt;/strong&gt;, and the correction is applied over &lt;code&gt;registry × n_looks&lt;/code&gt; — the bar &lt;strong&gt;rises&lt;/strong&gt; every run.&lt;br&gt;
You cannot wait your way to a finding.&lt;/p&gt;

&lt;h2&gt;
  
  
  What shipped
&lt;/h2&gt;

&lt;p&gt;An endpoint that &lt;strong&gt;abstains on every tweet&lt;/strong&gt; — because nothing survived correction, and a&lt;br&gt;
calibrated refusal is the correct output. It quotes no accuracy and no confidence score,&lt;br&gt;
because nothing I measured earned one. Try it:&lt;br&gt;
&lt;a href="https://port8080-xaqg3twr3yhr61q.tunnel.applications.eu-north1.nebius.cloud/docs" rel="noopener noreferrer"&gt;&lt;code&gt;/predict&lt;/code&gt;&lt;/a&gt;&lt;br&gt;
— send any tweet and it will tell you, with its reasoning, why it will not call it.&lt;/p&gt;

&lt;p&gt;Serverless fits research better than I expected: every stage is deterministic, containerized,&lt;br&gt;
hash-stamped, independently re-runnable, CPU-only, and scales to zero. But the real lesson is&lt;br&gt;
cheaper than infrastructure. Six of my seven artifacts were caught by a &lt;em&gt;control&lt;/em&gt;, not by&lt;br&gt;
inspection — and the seventh was caught because a tweet about a &lt;strong&gt;renovated Palm Room&lt;/strong&gt;&lt;br&gt;
topped the leaderboard.&lt;/p&gt;

&lt;p&gt;Build the thing that can say no. Then check whether it's saying no for the right reason.&lt;/p&gt;

</description>
      <category>nebiusserverlesschallenge</category>
      <category>machinelearning</category>
      <category>serverless</category>
      <category>python</category>
    </item>
  </channel>
</rss>
