We were inspired by the recent surge in crypto currency as well as our general interest in crypto. We wanted to have a place where we could see the general user sentiment towards certain coins, and possibly use the data later in a machine learning model.

We build this system to scrape Reddit (and other platforms later) using PRAW, then after getting user submissions passing them to the google cloud entity sentiment analysis. This then returns the sentiment towards entities in user posts. We filter out for crypto currency sentiments, and run some data aggregation on it, this is then uploaded to our database, and displayed on our website

We are overall happy we came out with a functional site which more or less includes all of the base features we wanted. We would have liked to include twitter, but sadly we did not have verified developer accounts

Next we would like to start feeding this information to a machine learning model and see if this could be a functional predictor.

Tech Stack

Language: Python3

Front End: Dash + Plotly + CSS + HTML

Deploy: Heroku

Database: Redis
## Inspiration

For cryptocurrency investors and even people who are simply interested in cryptocurrencies, it is a pain to have to manually navigate to different places to check for all kinds of information about them every day. That is why we were prompted to create this intelligent virtual assistant for people to obtain all that they need with a single click.

## What it does and How we built it

Cryptant offers all-around daily feeds for subscribers on the currencies that they are interested in, and conducts checks on the prices hourly so that the users will be alerted via email and text message, should there be any significant fluctuation of the price of a cryptocurrency. The more interesting part is the text messaging system (powered by Twilio), which acts as a responsive chat-bot since the user can also query information (e.g. pricing, news, forum updates, or advice from AI) by sending keywords about a currency the other way around. Using Google's translation API and Google Cloud's Dialogflow, I enabled the system to recognize user "intents" represented in any natural language and provide feedback ("fulfillments") accordingly, and in the same language that the user uses. In addition, we applied Google Cloud's natural language API/library to analyze the sentiment of the content of all hot news articles and Reddit posts that we collect, so that if we detect some strong sentiment, we will mark the post as "Has a higher chance of containing important information".

Individuals interested in Cryptant can simply subscribe with first and last names, and phone numbers at the official site, which has been deployed to the internet using GCP's App Engine: <https://cryptant.uc.r.appspot.com>. The "daily feed" and "hourly check and alert" functionalities require that the Python scripts be executed on a regular basis, even when our own computers are shut down. In this case we set up a Linux virtual machine (a Compute Engine) in Google Cloud's console and used the [Crontab](https://opensource.com/article/17/11/how-use-cron-linux) utility in Linux operating system to schedule tasks.

Information collected and shared with users is powered by a cryptocurrency price and AI prediction API, a news API, and the "praw" (Reddit scraper) library in Python. We bought an idle mobile phone number configured Twilio so that we can let valuable messages be sent automatically from that number. We also used Ngrok to set up webhooks with Twilio SMS and Dialogflow, so that when the user sends a message for querying, the backend system will know that it receives a message, a callback function will be triggered, the query is parsed and pertinent answers be sent back. Twilio enables the entire system and process to be incredibly smooth and convenient. Twilio also allowed us to implement a subscriber verification system based on a randomly generated 5-digit code, so as to steer clear of malicious subscriptions. We used Google's Cloud Firestore to store miscellaneous information and their verification codes.

## Challenges we ran into & What we learned

We needed to learn how to set up a webhook with Twilio (to make the system responsive), and some other libraries very quickly and almost all from blank. We also needed to correctly parse the large payload sent from a bunch of endpoints. Finally, some companies such as Reddit have adjusted their sites in an advanced way so that scrapping via traditional means (using beautiful soup or selenium) turned out to be impossible, and so we were forced to opt for alternative approaches.

## Accomplishments that we were proud of

As a half-sized team, we were able to create, debug, and maintain hundreds of lines of code in around a day, and we made some sophisticated functionalities (especially the SMS messaging assistant and information collection from various sources) working as intended.

## What's next for Cryptant

I wish to turn Cryptant into Investment Assistant to provide virtual assistance on not only cryptocurrencies but also all kinds of other investments (e.g. stocks and normal currencies). I also envision developing an AI of our own with some advanced machine learning techniques such as neural networks to optimize predictive accuracy.
## Inspiration

With the ubiquitous and readily available ML/AI turnkey solutions, the major bottlenecks of data analytics lay in the consistency and validity of datasets.
**This project aims to enable a labeller to be consistent with both their fellow labellers and their past self while seeing the live class distribution of the dataset.**

## What it does

The UI allows a user to annotate datapoints from a predefined list of labels while seeing the distribution of labels this particular datapoint has been previously assigned by another annotator. The project also leverages AWS' BlazingText service to suggest labels of incoming datapoints from models that are being retrained and redeployed as it collects more labelled information. Furthermore, the user will also see the top N similar data-points (using Overlap Coefficient Similarity) and their corresponding labels.

In theory, this added information will motivate the annotator to remain consistent when labelling data points and also to be aware of the labels that other annotators have assigned to a datapoint.

## How we built it

The project utilises Google's Firestore realtime database with AWS Sagemaker to streamline the creation and deployment of text classification models.
For the front-end we used Express.js, Node.js and CanvasJS to create the dynamic graphs. For the backend we used Python, AWS Sagemaker, Google's Firestore and several NLP libraries such as SpaCy and Gensim. We leveraged the realtime functionality of Firestore to trigger functions (via listeners) in both the front-end and back-end. After K detected changes in the database, a new BlazingText model is trained, deployed and used for inference for the current unlabeled datapoints, with the pertinent changes being shown on the dashboard

## Challenges we ran into

The initial set-up of SageMaker was a major timesink, the constant permission errors when trying to create instances and assign roles were very frustrating. Additionally, our limited knowledge of front-end tools made the process of creating dynamic content challenging and time-consuming.

## Accomplishments that we're proud of

We actually got the ML models to be deployed and predict our unlabelled data in a pretty timely fashion using a fixed number of triggers from Firebase.

## What we learned

Clear and effective communication is super important when designing the architecture of technical projects. There were numerous times where two team members were vouching for the same structure but the lack of clarity lead to an apparent disparity.
We also realized Firebase is pretty cool.

## What's next for LabelLearn

Creating more interactive UI, optimizing the performance, have more sophisticated text similarity measures.