About Me

Data Science Masters graduate with real world experience in Data Analysis, Machine Learning, Web Development, and Data Visualization. Have an entrepreneurial spirit and a strong business acumen from previous experience as a co-founder of a very successful startup. Excellent financial literacy gained from undergraduate education and work experience.

My Skills

Machine Learning Databases Languages Web Ontologies Visualization
Copmuter Vision (OpenCV) SQL Python HTML OWL D3.js
Natural Language Processing (Gensim, NLTK, TextBlob) MongoDB PHP CSS RDFS MatplotLib
General (Sklearn, Keras, Tensorflow) Neo4J JAVA JQuery Proteje App Tableau
WEKA JavaScript Laravel SparQL Seaborn

All

Machine Learning

Databases

Languages

Web Ontologies

Visualization

My Portfolio

All

Finance

Machine Learning

Visualization

Computer Vision

Web Development

Heart Rate

Goal

The goal of this project to create a software which takes in a selfie video and outputs the heart rate and breathing rate.

Technologies Used

PythonOpenCV

Detecting Heart Rate

When the heart beats, blood flows from the heart to the rest of the body, leading to a slight change in skin color that is not detectable by the human eye. To accomplish this with my code, I used OpenCV and frontal face Haar cascades to detect the face within the video frames. After detecting the face, a rectangular area is taken from the forehead and used for measurement. The change in the average red color from frame to frame is then used to detect the heart rate.

Detecting Breathing Rate

When we breathe, our heads move vertically in a very slight manner. If we detect the up and down movements, we can detect the breathing rate. To achieve this, I used Lucas-Kanade optical flow method which detects the movement of a pixel from frame to frame. For stability, I selected many pixels on the forehead and averaged out their vertical movement.

Steps Performed to Calculate the Peaks

  • Smoothing the graph using moving average
  • Sliding window and select max in each window (Note: this leads to many false peaks)
  • Remove false peaks
    • Remove peaks which have a high gradient
    • If 2 peaks are close to each, remove the lower peak

Pixels in blue rectangle are used to measure Y location and redness

Race Track Genetic Algorithm

Goal

The goal of this project is to implement genetic algorithms to perform a simple task. The aim was not to perform some important job but rather to learn more about genetic algorithms and their implementation. For this reason, the neural networks and the genetic algorithm were created from scratch (I.e. NEAT library was not used).

Technologies Used

PythonPyGame

Methodology

The inputs to the neural networks were the distance sensors (red lines) and the position of the target. The outputs were the possible directions for the individuals to move. Different activation functions and populations were tested. The selection method used was Roulette Wheel Selection. A fixed topology neural network was used.

Learning Outcome

  • Understand how to build Genetic Algorithm from scratch
  • Experiment with different activation functions
  • Understand the importance of the choice of inputs and outputs of the neural networks

The height of the red lines represent the inputs to the neural network

Particle Swarm Optimization

Goal

The goal of this project is to come up with a model that solves complex equations which have error functions with many local minima. To create this model I used a neural network which was optimized using Particle Swarm Optimization (PSO) instead of gradient descent. The neural network was created from scratch using python. PSO is slower than gradient descent, but it the reason it was used was because PSO is population based, hence it can avoid falling in a local minimum.

Technologies Used

PythonPlotly 3D

Learning Outcome

  • Understand how to build neural networks from scratch
  • Experiment with different activation functions
  • Learn how to implement PSO and understand on a practical level the difference between PSO and gradient descent (advantages and disadvantages)

Using linear activation and training data included was 0-10

Video Image Reduction Using Clustering

Goal

The goal of this project is to experiment with K-means clustering algorithm and study it’s abilities in image and video segmentation. Segmentation can be useful for a multitude of reasons including object detection, image compression, and edge detection. Another potential application of segmentation is applying filters on videos and images.

Technologies Used

PythonOpenCVSklearn

Methods

  • Image segmentation using only colors
  • Image segmentation using colors and pixels
  • Video segmentation

Implementing clustering on video frames

Traffic Sign Computer Vision

Goal

The classification of traffic signs is a computer vision problem that is crucial for self driving cars. The goal of this project was to analyze and classify 10 classes of traffic signs.

Technologies Used

PythonWEKAOpenCV

Classification

The experiments were conducted in both Python and WEKA. I tested the use of all pixels versus only the most correlated pixels and found that using only the most correlated pixels lead to more accurate results with simple algorithms. OpenCV Canny edge detector was used in some of the experiments to reduce the size of the image by converting the values into binary. Out of all the algorithms, convolution neural networks and Feed-Forward neural networks achieved the best results.

Clustering

Clustering can sometimes help us see patterns in data that we hadn’t noticed earlier. To apply the clustering I have used K-means and Gaussian Mixture Model. The findings showed that some images were grouped based on the background of the traffic sign rather than the traffic sign itself.

Canny edge detection on a 30 speed sign

EMG Signal Analysis

Goal

Electromyography is a technique used in medicine to record the electrical activity produced by skeletal muscles. It is also being thoroughly researched in the field of prosthetics. The goal of my project was to build a prototype of a device that can be used to record EMG signals which can then be used detect facial expressions.

Technologies Used

ArduinoMyoWare Muscle SensorC++Python

Challenges

EMG signals are very noisy as they contain what is known as the motion artifact. Motion artifact occurs when the subject moves during the recording of the EMG signals. The challenge lies in the fact that these noise signals often have higher amplitudes than the muscle signals being measured. To overcome this, the signals were deconstructed into their different frequencies using the Fourier transform method. A band pass filter was then applied, and what was left was the noise free signal that was produced by the muscle of interest.

EMG signal before filtering frequency

Data Visualiztion With D3

Goal

The goal of this project was to create a dashboard that uses visuals to provide information about the research conducted by different universities in the United Kingdom. D3 is a powerful and customizable JavaScript library that is used to create interactive data visualizations on web pages.

Technologies Used

JavaScriptD3.jsNodeJS

Some of the unique layouts used

  • Network Chart: Network charts are useful when we need to visualize the interrelations between multiple nodes.
  • Tree Diagram: Tree diagrams are great agglomerative clustering techniques that are visually clear to the user.
  • Map: Maps are usually the best way to plot geographical data.

Interactive network graph (try dragging the nodes)

Text Analytics

Goal

The goal of this project was to extract tweets from twitter relating to online learning. Once the tweets were obtained, the task was to analyze their underlying sentiment and to create a classifier that can do this automatically. Last but not least, I had perform topic modeling to understand the themes behind the positive and negative tweets.

Technologies Used

PythonTwitter APITweepyGensimNLTKTextBlobPyLDavis

Methodology

  • Data Collection: A Twitter developer API was created and Tweepy library was used to extract tweets.
  • Data Preprocessing: the data was lowercased and only letters and spaces were kept. Stop words were removed and all remaining words were stemmed.
  • Feature representation: TF-IDF and Count Vectorizer were both used on the following N-gram options: Unigrams, Bigrams, and Trigrams.
  • Building the Model: multiple machine learning models were used including Random Forest Classifier and Support Vector Machines.
  • Topic Modeling: For this, Latent Dirichlet Allocation (LDA) was performed on the tweets and the outcome was visualized using PyLDavis.

Visualization of the insights gained from topic modelling

shop.lightwhey.ae

Goal

The goal of this project was to create a simple and user friendly online shop for LightWhey Protein Ice Cream. Link: shop.lightwhey.ae.

Technologies Used

PHPMySQLHTMLCSSJavaScriptJQueryAJAX

Functionalities

  • Seamless add-to-cart experience using JQuery and AJAX
  • Multiple delivery fees depending on the city
  • Percentage Discount code functionalities with a limited number of uses
  • Gift Vouchers with a set value in Dirhams
  • Payment Gateway integration for online payments
  • In-built software to accurately track visits and conversions

Homepage

Full Restaurant Ordering System

Goal

The goal of this project was to create a fully fledged marketplace web app for restaurants. The purpose of this web app was that any restaurant planning to set up online ordering can sign up and instantly have their own online store which they can market to customers. The benefits of the software were that it was zero commission and restaurants could take back control of their own marketing.

Technologies Used

PHPLaravelMySQLHTMLCSSJavaScriptJQueryAJAXMessaging API

Functionalities

  • Front end brochure webpage to explain the idea of the web app
  • Restaurants can be added through an admin panel
  • Multi branch restaurant system where one link can be used as an access point for all branches
  • Each restaurant branch can have different timings and different delivery addresses
  • Each restaurant branch can have different minimum orders and delivery fees
  • Each restaurant can add voucher codes that can apply on a user’s first couple of orders or on all orders
  • Customer can choose pick-up or delivery. Minimum orders and delivery fees are removed for pick-up
  • Customer sign up and login through OTP code (no password)
  • Customers can save multiple addresses (home, office, etc.)
  • On the restaurant page, all categories are displayed, and once clicked the page is scrolled to the clicked category
  • Seamless add-to-cart experience using JQuery and AJAX
  • Options with prices on each menu item
  • Add-on options with prices on each menu item
  • Restaurant can choose the currency based on their country
  • Restaurants can set status as "busy" to stop receiving orders
  • Restaurants can set certain items as best sellers
  • When order is placed, email is sent to customer and restaurant
  • Automatic refresh every minute in restaurant dashboard to show new orders without manually reloading the page
  • Constant beeping sound until order is accepted
  • Multi language website (Arabic and English)
  • JavaScript plugin that allows restaurants to add the online ordering system onto their own websites

Brochure webpage

Flutter E-commerce Shop App

Goal

The goal of this project was to create an MVP e-commerce app using flutter. The app was test launched in the google play store.

Technologies Used

FlutterPHPGoogle Maps APIMySQLHTMLCSSJavaScript

Functionalities

  • Sign up / Login
  • Add items to cart
  • Delete items from cart using swipe
  • Select location using Google Maps
  • View order history

Brochure webpage

Stock Price Prediction Using Machine Learning

Goal

The ability to predict stock movements can be very lucrative but difficult. The aim of this project is to attempt to predict future stock prices in the short term and long term.

Technologies Used

PythonSklearnKeras

Models used

  • Random Forest (RF)
  • Support Vector Regressor (SVR)
  • K-nearest Neighbor (KNN)
  • Ridge Regressions
  • Multi Layer Perceptron (MLP)
  • Long Short-Term Memory Networks (LSTM)

Short-Term

This involves prediction of stock prices 1 hour or 1 day in advance. The inputs used for this type of prediction will include stock prices, traded volumes, and technical analysis indicators which are manually feature engineered. These indicators include:

  • Simple Moving Average
  • Exponential Moving Average
  • Moving Average Convergence Divergence
  • Relative Strength Index
  • Stochastic Oscillator
  • On-Balance Volume

Long-Term

This involves prediction of stock prices 1 year in advance. The inputs used for this type of prediction will include financial statement information. This information will be in the form of over 50 variables.

Evaluation

Many published papers in this topic use basic evaluation methods such as Precision, Recall, Correlation, MSE, MAE, etc. Although these are great evaluation methods, they do not help much in portraying the full picture when it comes to stock prediction. In this project I will be evaluating the models and simulating them against the buy-and-hold strategy.

Initial Steps

For initial experimentation, I exracted hourly Bitcoin data and created some models such as KNN, MLP, Ridge, SVR, and RF. Models were trained using a sliding window approach and the were tested on 2 testing periods (plotted in the graphs below).

KNN vs buy-and-hold: Period 1

Language Model

Goal

The goal of this project was to build a model that can help predict the next word in a sentence. This is similar to the models used in chat services which suggest possibilites for the next word which you may want to use

This is an end-to-end task which involves deployment of the model on the web

Technologies Used

PythonTensorFlowKerasTensorFlowJSJavaScriptJQuery

Methodology

The data extracted was from a blog dataset. In order to train the model, the data first had to be split in X and Y features. Trials were conducted for character, and word based prediction, however word based prediction performed better.

The dataset is essentially transformed where the input was the collection of every 10 word sequence in the dataset while output was the upcoming words for input sequences

Get In Touch

Feel free to get in touch with me to discuss a potential collaboration or any of my projects. Alternatively, you can email me at: me@ahmedhourani.com