Jonathan Davin

Every project I build starts from a problem I ran into or watched happen. Fifth-semester student looking for a first role in machine learning.

Portrait of Jonathan Davin

Hi, I’m Jonathan.

I like to solve real problems with software. My family’s steel shop ran on handwritten receipts for twenty years, so I built the system that replaced them. I couldn’t tell which developer role my skills pointed to, so I built a model that answers it from real developers survey. Most of what I build starts that way.

I’m in my fifth semester and looking for a first role in machine learning. I want to keep starting from real problems, but at a scale I can’t reach on my own.

Focus
Machine learningNLPData analysis
Toolkit
PythonPyTorchHugging Facescikit-learnpandasFlaskGit

Featured projects

Each one started with a real problem and ended with something that works.

  • 85.41%F1-score (5-fold CV)
  • 60,283Tweets scraped
  • 25,726Auto-labelled tweets

The problem

Knowing which crypto assets Indonesian users write about on X is the first step before any sentiment or scam monitoring. No labelled Indonesian dataset existed for that task, and many coin names are also everyday words, such as ‘ini’ and ‘dia’.

What I built

I collected 60,283 tweets, cleaned them to 27,226 and built a coin dictionary from the CoinGecko API. I auto-labelled 25,726 tweets with a rule that drops ambiguous coin names, and three annotators labelled 1,461 tweets by hand. I pre-trained IndoBERTweet-CRF on the auto labels, fine-tuned it on the hand labels and tested it against four baselines and four ablations.

What came out

The model reaches an F1-score of 85.41%, well above dictionary lookup (59.22%) and level with IndoBERT-CRF trained on hand labels only (85.57%). Fine-tuning on hand labels adds the most, 26.36 points.

Where it falls short

It finds coins that are in the dictionary well (recall 0.9550) but misses many that are not (0.5442). It also confuses a coin with the network or company of the same name, such as Solana.

  • 0.76Macro F1 (IndoBERTweet)
  • 6Models compared
  • 0.0066McNemar p-value

The problem

Indonesian tweets are short, full of slang, and the emotion classes in them are far from balanced. It is not obvious which model family to reach for, or whether a large transformer is worth its cost over a classical baseline.

What I built

I compared six models on the same split of the EmoT dataset: Complement Naive Bayes, SVM and Random Forest, a BiLSTM with FastText embeddings, and two transformers, IndoBERT and IndoBERTweet. Each family got the preprocessing it needs, and I read the confusion matrices per class before comparing the best pair with McNemar’s test.

What came out

IndoBERTweet came first with a macro F1 of 0.76, ahead of IndoBERT (0.70) and Complement Naive Bayes (0.69), and it led in all five emotion classes. The domain of the pre-training data mattered more than model size, and McNemar’s test put the gap over Naive Bayes at p = 0.0066.

Where it falls short

The BiLSTM ran with frozen FastText weights, so it could not adapt to slang, and it finished below the classical baselines. The study covers one dataset in one language, with 3,521 training samples, so the findings do not transfer on their own.

  • 23,387Survey respondents after cleaning
  • 186Skill features
  • 0.40Silhouette score (K = 6)

The problem

As a student, I did not know which career path fit me, because computer science has many branches and hundreds of skills. The career advice I found was generic and not based on data. I wanted to answer my own question with real survey data: which group of developers do I resemble, and what should I learn next?

What I built

I cleaned the Stack Overflow Developer Survey 2025 from 48,867 responses down to 23,387 and encoded each person’s stack as 186 yes/no skill features across six categories. I reduced the features with UMAP, K = 6. I then built a Flask app that places a new user in a cluster, lists the common cluster skills they lack, and ranks those skills by how many cluster members want to learn them.

What came out

The web app returns a persona, a confidence score, a runner-up persona, a skill gap and a learning roadmap. After a warm-up of about 30 seconds, each prediction takes under 10 ms.

Where it falls short

Purity (0.37) and ARI (0.03) are low, so the six clusters do not line up cleanly with existing labels in the data. Cleaning removed about half of the respondents, and the app has to load a 77 MB UMAP model, so a cold start is slow.

  • 204Backend API tests
  • 66UI tests
  • 19Print layout checks

The problem

The store recorded sales, stock counts and customer loyalty points by hand, which made stock levels hard to trust and made returns and point balances error-prone. I built a point-of-sale system to replace that paper process with one shared database.

What I built

I started with the data model in Prisma, then built a Fastify API with a full backend test suite, followed by a React and Electron front end. I tested the print output against a physical Epson LX-310 dot-matrix printer to check the real receipt layout.

What came out

The app is packaged as a Windows installer and ready to use. It passes 204 backend tests, 66 UI tests and 19 print layout checks.

Where it falls short

Automatic updates, an online version, code signing, and macOS or Linux support were left out of phase 1 on purpose.

  • 24Resume categories
  • 17,880Job postings in source set
  • 4Matching setups compared

The problem

Automated screening often matches a CV to a posting by keywords, so ‘ML developer’ and ‘machine learning engineer’ can count as a miss. A candidate rewrites a CV for every posting without learning which requirements were read as unmet.

What I built

Two ways of matching, compared on the same data: a TF-IDF keyword baseline and Sentence-BERT embeddings, first off the shelf and then fine-tuned with a contrastive loss on resume and posting pairs grouped by field. The app embeds a CV in chunks and each requirement in the posting, then lists the requirements with no close match as gaps instead of folding them into one score.

  • LocalNo external ASR API
  • Real-timePartial transcript while speaking
  • Sep 2026Started

The problem

The Feynman technique asks you to explain a topic out loud and mark the parts you fumble, but few people listen back to catch them. Speech recognition models are trained on clean, edited transcripts, so they delete the hesitations, which is the one signal this task needs.

What I built

A local app that streams microphone audio into a Whisper model on the same machine, returns partial transcripts while the user is still speaking, and then marks the long pauses and filler words. No external speech recognition API is involved. The target users are Indonesian CS students who mix English technical terms into Indonesian, and that code-switching is the hard part.

    The path so far.

    From the first lecture to the first paper, and the students I mentor along the way.

    1. BINUS University

      Computer Science, Intelligent Systems

      Alam Sutera • 2024 – Now

      Computer Science with a focus on intelligent systems. Most of it goes into machine learning, deep learning, and data systems.

    2. Peer Mentor, SASC BINUS

      Academic tutoring, scholarship program

      BINUS • 2025 – Now

      Three periods of mentoring other Computer Science students through a merit scholarship. I recieved the Excellence Achievement Award in my first term.

    3. ICIMCIS 2026

      IEEE conference paper, first author

      2026

      My paper on named entity recognition for crypto assets, built on IndoBERTweet-CRF, was accepted and will be presented online

    4. Mentor, BSLC

      BINUS Student Learning Community

      BINUS • 2026 – Now

      A mentor in the student learning community, which takes my tutoring beyond SASC.

    5. Today

      Looking for a data or ML internship

      BINUS • Now

      Fifth semester, a 3.98 GPA, and a place on the Dean’s List 2025. I’m looking for an internship in data or machine learning.

    Let’s work together.

    I’m looking for an internship or a first role in machine learning.

    Email is the fastest way to reach me.

    What is it about? Optional

    At least 20 characters. Your draft stays on this device until you send it.