<?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: Atharva pawar</title>
    <description>The latest articles on DEV Community by Atharva pawar (@atharva_1123).</description>
    <link>https://dev.to/atharva_1123</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%2F4056557%2F3c0213ba-7b47-4d4d-a6f2-2cd0f9ba648e.jpg</url>
      <title>DEV Community: Atharva pawar</title>
      <link>https://dev.to/atharva_1123</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/atharva_1123"/>
    <language>en</language>
    <item>
      <title>GiveSpark — AI-powered ways to be generous this weekend</title>
      <dc:creator>Atharva pawar</dc:creator>
      <pubDate>Sat, 05 Sep 2026 15:10:36 +0000</pubDate>
      <link>https://dev.to/atharva_1123/givespark-ai-powered-ways-to-be-generous-this-weekend-34j7</link>
      <guid>https://dev.to/atharva_1123/givespark-ai-powered-ways-to-be-generous-this-weekend-34j7</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/weekend-2026-09-03"&gt;Weekend Challenge: Generosity Edition&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;GiveSpark is a small tool that turns "I should do something generous this weekend" into an actual plan. You tell it what you're good at, how much time you have, and optionally a cause you care about — and it uses Google's Gemini model to hand back four specific, doable ways to be generous, built around you instead of a generic list.&lt;/p&gt;

&lt;p&gt;No "just volunteer somewhere." No "donate to charity." Real, concrete ideas sized to fit the time you actually have — whether that's 15 minutes or the whole weekend.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;Try it live: &lt;a href="https://givespark-iota.vercel.app" rel="noopener noreferrer"&gt;https://givespark-iota.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note: since this calls the Gemini API directly from the browser, you'll need to paste your own free Gemini API key (get one in seconds at &lt;a href="https://aistudio.google.com/apikey" rel="noopener noreferrer"&gt;aistudio.google.com/apikey&lt;/a&gt;) to generate ideas. No signup or payment required for the free tier.&lt;/p&gt;

&lt;p&gt;[Add your screenshot or short screen recording of the wizard flow here]&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/atharva-pawar80" rel="noopener noreferrer"&gt;
        atharva-pawar80
      &lt;/a&gt; / &lt;a href="https://github.com/atharva-pawar80/givespark" rel="noopener noreferrer"&gt;
        givespark
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;React + Vite&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;This template provides a minimal setup to get React working in Vite with HMR and some Oxlint rules.&lt;/p&gt;
&lt;p&gt;Currently, two official plugins are available:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react" rel="noopener noreferrer"&gt;@vitejs/plugin-react&lt;/a&gt; uses &lt;a href="https://oxc.rs" rel="nofollow noopener noreferrer"&gt;Oxc&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc" rel="noopener noreferrer"&gt;@vitejs/plugin-react-swc&lt;/a&gt; uses &lt;a href="https://swc.rs/" rel="nofollow noopener noreferrer"&gt;SWC&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;React Compiler&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;The React Compiler is not enabled on this template because of its impact on dev &amp;amp; build performances. To add it, see &lt;a href="https://react.dev/learn/react-compiler/installation" rel="nofollow noopener noreferrer"&gt;this documentation&lt;/a&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Expanding the Oxlint configuration&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;If you are developing a production application, we recommend using TypeScript with type-aware lint rules enabled. Check out the &lt;a href="https://github.com/vitejs/vite/tree/main/packages/create-vite/template-react-ts" rel="noopener noreferrer"&gt;TS template&lt;/a&gt; for information on how to integrate TypeScript and Oxlint's TypeScript related rules in your project.&lt;/p&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/atharva-pawar80/givespark" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;I built GiveSpark as a step-by-step wizard instead of a single long form, so it feels like a short conversation rather than filling out paperwork. The screen is split in two: a dark editorial panel on the left that changes its headline as you move through each step, and a light, functional panel on the right where you actually answer.&lt;/p&gt;

&lt;p&gt;The centerpiece is a small SVG "spark line" on the left — a thin line with four dots that lights up marigold as you complete each step, doubling as both progress indicator and the one memorable visual detail of the design.&lt;/p&gt;

&lt;p&gt;Once you've answered all three questions and pasted a Gemini API key, the app builds a prompt from your answers and asks Gemini to respond with strict JSON (a title and detail for each idea). That gets parsed and rendered as four slightly rotated "note" cards with a torn-paper look, so the output feels personal rather than like a data table.&lt;/p&gt;

&lt;p&gt;Stack: React + Vite, the Gemini API (&lt;code&gt;gemini-3.6-flash&lt;/code&gt;) called directly from the client, and Lucide for icons. No CSS framework — the whole design system is a small hand-written stylesheet embedded in the component, so it runs anywhere with zero extra setup.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;p&gt;Best Use of Google AI — the entire core feature depends on Gemini. The app builds a structured prompt from the user's inputs (skills, time, cause), asks Gemini to return strict JSON, and renders the response as personalized "kindness notes." Without the model, this is just a form — the AI is what turns three inputs into something genuinely useful.&lt;/p&gt;

</description>
      <category>weekendchallenge</category>
    </item>
    <item>
      <title>What I Learned Building a Fraud Detection Model (And Why 99% Accuracy Almost Fooled Me)</title>
      <dc:creator>Atharva pawar</dc:creator>
      <pubDate>Fri, 31 Jul 2026 12:08:34 +0000</pubDate>
      <link>https://dev.to/atharva_1123/what-i-learned-building-a-fraud-detection-model-and-why-99-accuracy-almost-fooled-me-16k8</link>
      <guid>https://dev.to/atharva_1123/what-i-learned-building-a-fraud-detection-model-and-why-99-accuracy-almost-fooled-me-16k8</guid>
      <description>&lt;p&gt;A few weeks ago, I decided to stop just watching ML tutorials and actually build something end-to-end — from messy real data to a working, served model. I picked credit card fraud detection, using the well-known ULB fraud dataset (284,807 real anonymized European transactions, with only ~0.17% actually fraudulent).&lt;/p&gt;

&lt;p&gt;Here's what I learned along the way — including a mistake that taught me more than any tutorial could have.&lt;/p&gt;

&lt;h2&gt;
  
  
  The trap: 99.8% accuracy that means nothing
&lt;/h2&gt;

&lt;p&gt;The first thing I checked was the class balance. Only 292 out of 170,799 transactions in my training data were fraud — about 0.17%.&lt;/p&gt;

&lt;p&gt;That number matters more than it looks. If a model just predicted "not fraud" for &lt;em&gt;every single transaction&lt;/em&gt;, it would score &lt;strong&gt;99.83% accuracy&lt;/strong&gt; — and be completely useless. It would catch zero fraud, ever.&lt;/p&gt;

&lt;p&gt;This is the single biggest lesson from this project: &lt;strong&gt;never trust accuracy alone on imbalanced data.&lt;/strong&gt; The real metrics that matter are precision and recall on the minority class — in my case, how many real fraud cases the model actually catches (recall), and how often it's right when it flags something as fraud (precision).&lt;/p&gt;

&lt;h2&gt;
  
  
  Cleaning data on purpose, badly, to learn how to fix it
&lt;/h2&gt;

&lt;p&gt;Before touching the real dataset, I deliberately &lt;em&gt;broke&lt;/em&gt; a copy of it — injecting missing values, duplicate rows, and inconsistent formatting (like &lt;code&gt;"$618.00"&lt;/code&gt; mixed in with clean floats in the same column). Then I had to detect and fix each problem myself.&lt;/p&gt;

&lt;p&gt;A few things stuck with me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Not all "bad" data should be treated the same way.&lt;/strong&gt; A truly missing value and a badly-formatted-but-recoverable value need different fixes. I filled true missing values with the median (resistant to outliers), but &lt;em&gt;parsed&lt;/em&gt; the messy currency strings back into numbers instead of throwing them away.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Duplicate rows are sneaky.&lt;/strong&gt; They don't look wrong — they're just the same real event logged twice — but they quietly bias a model into over-weighting whatever pattern got duplicated.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Comparing models honestly, not just picking one
&lt;/h2&gt;

&lt;p&gt;I trained and compared several approaches on the same data:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Precision (fraud)&lt;/th&gt;
&lt;th&gt;Recall (fraud)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Logistic Regression&lt;/td&gt;
&lt;td&gt;0.78&lt;/td&gt;
&lt;td&gt;0.78&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Logistic Regression (scaled)&lt;/td&gt;
&lt;td&gt;0.87&lt;/td&gt;
&lt;td&gt;0.71&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Logistic Regression + class_weight='balanced'&lt;/td&gt;
&lt;td&gt;0.05&lt;/td&gt;
&lt;td&gt;0.98&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Random Forest&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.96&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.83&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That third row is a great cautionary example. Forcing the model to aggressively catch every fraud case sounds good in theory — but it tanked precision to 5%, meaning it flagged huge numbers of real, legitimate transactions as fraud just to avoid missing rare cases. Depending on the business, that tradeoff might be worth it — or it might be a disaster. There's no universal right answer; it depends on what a false alarm actually costs versus what a missed fraud case costs.&lt;/p&gt;

&lt;p&gt;Random Forest ended up winning clearly, likely because it can carve out complex, non-linear patterns in the anonymized features — something a single linear decision boundary (Logistic Regression) struggles with.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tracking experiments properly instead of a hand-written table
&lt;/h2&gt;

&lt;p&gt;By the third or fourth model variant, I was manually copying accuracy numbers into a notes file to keep track of what I'd tried. That's exactly the problem experiment tracking tools like MLflow are built to solve — instead of a fragile personal table, every run's parameters and metrics get logged automatically, comparable side-by-side, permanently.&lt;/p&gt;

&lt;p&gt;Once I actually felt that manual-tracking pain firsthand, adding MLflow made immediate sense — it wasn't just "a tool someone said to learn," it was solving a real annoyance I'd already run into.&lt;/p&gt;

&lt;h2&gt;
  
  
  Shipping it as an API — and a bug that traced back to an earlier mistake
&lt;/h2&gt;

&lt;p&gt;I wrapped the final model in a FastAPI service so it could take a transaction's details and return a live prediction. Testing it threw a real error:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;X has 30 features, but RandomForestClassifier is expecting 31 features as input.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Turned out there was a stray leftover index column (&lt;code&gt;__index_level_0__&lt;/code&gt;) still present in the training data — an artifact from how the dataset had been exported — that I'd accidentally trained the model on. The fix wasn't in the API code at all; it was going back to the training script and dropping that column before retraining.&lt;/p&gt;

&lt;p&gt;That was a good reminder that bugs discovered at serving time often point back to something upstream in data prep, not the code you're currently staring at.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;This project is now cleaned, tracked in MLflow, and served through a working API that correctly classifies both fraud and legitimate transactions I tested it against. Next up: containerizing it with Docker, and building a Retrieval-Augmented Generation (RAG) project to round out the skill set.&lt;/p&gt;

&lt;p&gt;If you're early in your ML journey too — my honest advice is to deliberately break something (like I did with the dirty data) and fix it yourself, rather than only ever working with clean, ready-made datasets. That's where the real learning happens.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Currently learning ML engineering and AI agent development hands-on, one real project at a time. Open to entry-level opportunities and would love to connect with anyone working in this space.&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
