{"name":"Mohamed Thabet","firstName":"Mohamed","headline":"Machine learning and simulation engineer","tagline":"Engineer across machine learning, data and physics simulation","intro":"I'm 19 and I learn by rebuilding things from first principles: neural networks, decision trees and clustering in raw NumPy, and gravity you can throw planets into. If I can't write it from scratch, I don't consider it understood yet.","about":"I started with physics simulations: a ball thrown with drag and bounce, a solar system in VPython, and a Pygame window where you slingshot planets around a sun. That turned into machine learning, where I write every algorithm by hand before touching a library. My MNIST network is NumPy matrix maths with hand-derived gradients, and switching ReLU to LeakyReLU took it from 10% to about 80% accuracy. I also do exploratory data analysis on real datasets, such as 187,000 house listings, using Pandas and Seaborn. At Samsung Innovation Campus I studied AI and machine learning, and in a team of six built Bayan, an Android app that simplifies Arabic text for readers with dyslexia.","email":"abdwadood2000@gmail.com","socials":{"github":"https://github.com/mohamedthabet7","linkedin":"https://www.linkedin.com/in/mohamed-thabet-269a44441/"},"coreAreas":["Machine learning from scratch","Neural networks","Backpropagation","Decision trees","Clustering","Regression and statistics","Exploratory data analysis","Physics simulation","NumPy","Python"],"tools":["Git","GitHub","Jupyter Notebook","pip","VPython","Pygame"],"url":"https://mohamedthabet.com","links":{"site":"https://mohamedthabet.com","projects":"https://mohamedthabet.com/projects","llms":"https://mohamedthabet.com/llms.txt"},"skills":[{"tab":"Python & Maths","skills":[{"name":"Python","icon":"/icons/python.svg"},{"name":"Linear algebra"},{"name":"Calculus for backprop"},{"name":"Probability & entropy"}]},{"tab":"Machine Learning","skills":[{"name":"NumPy","icon":"/icons/numpy.svg"},{"name":"scikit-learn","icon":"/icons/scikitlearn.svg"},{"name":"Statsmodels"},{"name":"Neural networks"},{"name":"ID3 decision trees"},{"name":"K-Means / K-Medoids"}]},{"tab":"Data & Visualisation","skills":[{"name":"Pandas","icon":"/icons/pandas.svg"},{"name":"Matplotlib"},{"name":"Seaborn"},{"name":"SciPy","icon":"/icons/scipy.svg"},{"name":"Jupyter","icon":"/icons/jupyter.svg"}]},{"tab":"Simulation","skills":[{"name":"VPython"},{"name":"Pygame"},{"name":"Euler integration"},{"name":"Vector maths"}]}],"education":[],"experience":[],"achievements":[],"certifications":[{"title":"Artificial Intelligence course, capstone: Bayan","issuer":"Samsung Innovation Campus","url":"https://github.com/Cogni-Libya/Bayan"}],"projects":[{"slug":"bayan","title":"Bayan: an AI reading assistant for Arabic dyslexia","shortName":"Bayan (بيان)","summary":"Samsung Innovation Campus capstone with a team of six: an Android app that simplifies hard Arabic text, adds diacritics and reads it aloud, all on the phone. I worked on the app.","features":["Built the PROCESS_TEXT action, so «تبسيط» appears in the text-selection menu of any app, and its result sheet","Rebuilt the app in Jetpack Compose and Material 3 Expressive, with model download, settings and result states","Simplify → diacritize → read aloud with the spoken word highlighted, fully offline with ONNX Runtime","Data annotation and quality review; the best model keeps the meaning on 82% of the test set"],"tech":[{"name":"Kotlin"},{"name":"Jetpack Compose"},{"name":"ONNX Runtime"},{"name":"Python","icon":"/icons/python.svg"}],"image":"/projects/bayan.webp","liveUrl":"https://bayan-android.vercel.app","githubUrl":"https://github.com/Cogni-Libya/Bayan","featured":true},{"slug":"planets-through-space","title":"Planets Through Space: slingshot planets around a sun","shortName":"Planets Through Space","summary":"A Pygame gravity sandbox: drag to aim, release, and Newton's law decides whether the planet orbits, escapes or falls in.","features":["Drag-and-release slingshot launch, with the speed set by the drag length","Newtonian gravity F = G·m₁·m₂ / r² from a sun of 1.989 × 10³⁰ kg","Euler integration of velocity and position at 400 steps per second","Planets are removed when they leave the screen or hit the sun"],"tech":[{"name":"Python","icon":"/icons/python.svg"},{"name":"Pygame"}],"liveUrl":"https://mohamedthabet.com/#gravity","githubUrl":"https://github.com/mohamedthabet7/Practice-Projects/blob/main/PlanetThroughSpace-Project","featured":true},{"slug":"mnist-neural-network","title":"MNIST Net: a neural network with no framework","shortName":"MNIST Net","summary":"A two-layer network that reads handwritten digits, written in raw NumPy with hand-derived backpropagation.","features":["784 → 10 → 10 architecture with a numerically stable softmax","Analytical gradients for every weight and bias, no autodiff","Diagnosed the dying-ReLU problem stuck at 10% accuracy","LeakyReLU (α = 0.1) lifted test accuracy to about 80%"],"tech":[{"name":"Python","icon":"/icons/python.svg"},{"name":"NumPy","icon":"/icons/numpy.svg"},{"name":"Jupyter","icon":"/icons/jupyter.svg"}],"githubUrl":"https://github.com/mohamedthabet7/Machine-Learning-Algorithims","featured":true},{"slug":"id3-decision-tree","title":"ID3 Decision Tree: entropy, by hand then by recursion","shortName":"ID3 Decision Tree","summary":"Shannon entropy and information gain worked by hand, then automated into a recursive ID3 builder that prints the tree.","features":["Manual entropy and information-gain trace for every branch","Recursive ID3 that picks the split with the most information gain","Detects pure leaves where H(S) = 0","Renders the learned Play Tennis tree as clean ASCII"],"tech":[{"name":"Python","icon":"/icons/python.svg"},{"name":"Pandas","icon":"/icons/pandas.svg"}],"githubUrl":"https://github.com/mohamedthabet7/Machine-Learning-Algorithims","featured":false},{"slug":"kmeans-kmedoids","title":"K-Means vs K-Medoids: two ways to find a centre","shortName":"K-Means vs K-Medoids","summary":"Both clustering algorithms from first principles, compared on how they handle noise and outliers.","features":["Euclidean distance and centroid updates written out in NumPy","PAM medoid search: the centre must be a real data point","Tested on an 8-point set and a 40-point synthetic set","Shows why medoids resist outliers better than means"],"tech":[{"name":"Python","icon":"/icons/python.svg"},{"name":"NumPy","icon":"/icons/numpy.svg"}],"githubUrl":"https://github.com/mohamedthabet7/Machine-Learning-Algorithims","featured":false},{"slug":"california-housing-vif","title":"California Housing: regression and multicollinearity","shortName":"California Housing","summary":"OLS, SGD, Lasso and Ridge compared on California house values, with a VIF diagnosis of correlated features.","features":["Correlation heatmaps and distributions with Seaborn","Four regressors compared: OLS, SGD, Lasso and Ridge","Found AveRooms and AveBedrms correlated at about 0.85","VIF = 1 / (1 − R²) used to drop redundant predictors"],"tech":[{"name":"Python","icon":"/icons/python.svg"},{"name":"scikit-learn","icon":"/icons/scikitlearn.svg"},{"name":"Pandas","icon":"/icons/pandas.svg"},{"name":"Jupyter","icon":"/icons/jupyter.svg"}],"githubUrl":"https://github.com/mohamedthabet7/Machine-Learning-Algorithims","featured":false},{"slug":"house-prices-eda","title":"House Prices EDA: 187,000 listings, one skewed column","shortName":"House Prices EDA","summary":"Exploratory analysis of a 20-column housing dataset: cleaning, missing data and a price column with a skew of 177.","features":["Duplicate and missing-value audit across all 20 columns","Renamed and retyped mislabelled object columns","Measured extreme right skew and planned a log transform","Binned prices into intervals to size the outliers"],"tech":[{"name":"Python","icon":"/icons/python.svg"},{"name":"Pandas","icon":"/icons/pandas.svg"},{"name":"Seaborn"},{"name":"Jupyter","icon":"/icons/jupyter.svg"}],"githubUrl":"https://github.com/mohamedthabet7/Data-Analysis-and-EDA","featured":false},{"slug":"solar-simulation","title":"Solar Simulation: n-body orbits in 3D","shortName":"Solar Simulation","summary":"Planets that pull on each other in a VPython 3D scene, with collisions and labelled bodies.","features":["Mutual gravity between every pair of bodies","Launch angle and speed set per planet in 3D","Collision detection when bodies touch","Live 3D canvas with a reference grid at 60 FPS"],"tech":[{"name":"Python","icon":"/icons/python.svg"},{"name":"VPython"}],"githubUrl":"https://github.com/mohamedthabet7/Practice-Projects/blob/main/SolarSimulation.py","featured":false},{"slug":"ball-throw","title":"Ball Throw: projectile physics with drag and bounce","shortName":"Ball Throw","summary":"A 3D ball thrown at any angle, slowed by drag and friction, bouncing with set elasticity.","features":["Launch from vertical and horizontal angles in 3D","Gravity of 9.8 m/s² applied each frame","Drag, friction and elasticity coefficients","Comes to rest on the floor instead of jittering"],"tech":[{"name":"Python","icon":"/icons/python.svg"},{"name":"VPython"}],"githubUrl":"https://github.com/mohamedthabet7/Practice-Projects/blob/main/BallThrow.py","featured":false},{"slug":"perceptron","title":"Perceptron: Rosenblatt's rule from random weights","shortName":"Perceptron","summary":"A single neuron that learns logic gates, starting from random weights and stopping at zero error.","features":["Forward perceptron with a bipolar step function","Self-learning loop with Rosenblatt's update rule","Random initial weights between −5 and 5","Trains until total error on the truth table is zero"],"tech":[{"name":"Python","icon":"/icons/python.svg"}],"githubUrl":"https://github.com/mohamedthabet7/Machine-Learning-Algorithims","featured":false}]}