chèque d’innovation 2013-2016 - Conseils en recherche et en innovation pour PME
Jusqu’à présent la technologie utilisée dans la chaîne alimentaire a été principalement orientée vers l’augmentation de la rentabilité par l’usage de plus de machines et plus de chimie. Aujourd’hui, la principale révolution technologique s'axe autour de l’organisation de l’information et peut mener au remplacement d’un modèle vertical (top-down) a un modèle latéral (bottom-up). Nous pensons que la chaîne alimentaire n’est plus nécessairement tributaire d’une structure verticale pour organiser, valoriser et distribuer son travail. Le petit commerce local peut se réinventer tout en conservant son autonomie, mutualiser une logistique en flux tendu et offrir au consommateur des outils transparents pour (re)créer les liens entre production et alimentation. La start-up karibou.ch est née de ce constat, elle est organisée en un marketplace de e-commerce alimentaire fonctionnant en peer to peer (P2P) qui met en relation les agriculteurs, artisans et boutiques de commerce de proximité avec leurs clients. Selon le mode P2P, chaque boutique est autonome et effectue la vente directement auprès de ses clients. Cette inversion de hiérarchie de la logistique réinvente la distribution alimentaire en faisant diminuer drastiquement les coûts de la logistique.
Dans ce contexte peer-to-peer (décentralisé) et sans contrôle central, la mesure de la qualité du service et des produits est un élément crucial. C’est le premier enjeu de cette recherche.
Comment déterminer une valeur objective à un produit, un commerçant, à la livraison ? Comment
détecter rapidement une variation de qualité ?
Notre objectif est de trouver un ou N algorithmes qui pourront évaluer la qualité du réseau, d'un individu, d'un produit et d'une boutique
Required knowledge: machine learning, deep learning, computer science, nodejs, npm, mongodb
Difficulty level: intermediate
Mentors: Florent Gluck, Olivier Evalet
- Joel Cavat (https://github.com/jcavat)
- Olivier Evalet, https://github.com/evaletolab
- Florent Gluck @HEPIA, https://github.com/florentgluck
- Noria Foukia Enseignante en mathématiques @HEPIA
- From an initial set of possible models and hypothesis, what is the most appropriate model to fit our data
- Based on our data, generate a subset of training data, postive prediction and negative prediction
- Implement a learing process that could be embeded in the karibou.ch project. For exemple, user place an order and the machine will learn what is relvant or not based on the prediction for the user.
- Create a a simple prototype that displays a prediction product list for a user.
- Based on training data, it will be awesome to get clusters of customers (based on the distance between each)
Orders (size ~1200) contains all information about user, products, time, etc. Here a small description:
{
"oid": 2000002,
"shipping": {
"postalCode": "1205",
"when": "2014-12-12T15:00:00.000Z",
"bags": 2 /** Number of shipped bags for this order */
},
"customer": {
"id": 2180215629900685,
"pseudo": "f**i",
"created": "2014-12-09T23:28:45.138Z"
"likes":[] /** prefered SKU */
},
"vendors": [{
"slug": "les-fromages-de-gaetan",
"discount":2.90
},
...
],
"items": [
{
"title": "Hommos",
"sku": 1000013,
"vendor": "crocorient",
"image": "",
"estimatedprice": 5,
"finalprice": 5,
"qty": 1,
"category": "Traiteur",
"status": "failure",
"issue": {
"name": "issue_missing_product",
"missing_product": 1,
"quality_collect": 0,
"quality_feedback": 0
},
...
- un client aime des produits
order.cutomer.likes
- un article d'une commande
items.status
à le statut"failure", "fulfilled"
- lors d'une annulation, il peut y avoir le problème
items.issue.name
suivant- undefined == pas grâve/0 ,
"issue_missing_product"
== problématique/1,"issue_wrong_product_quality"
et"items.status===failure"
== très problématique/2,"issue_wrong_product_quality"
et"items.status===fulfilled"
== létal/4,
discount
is the amount the seller offer to the customer for this order
- Be passionate, reactive and technically brilliant :-)
- Interested in food as a major paradigm to improve health, protect our environment and all the species with whom we share this planet
- Participate in regular meetings with your mentor.
- Deliver code before the deadline
- Get in contact with your mentors or the admins if any even remotely potential problems arise.
Experience and familiarity with most/all of these:
- nodejs, npm, mongodb,
- mocha for unit testing,
- Git, GitHub and submit pull request process,
- Deeplearning or Machine learning skills,
- Bash
General understanding of any of these:
- TravisCI & continuous integration
- NPM packaging systems
Project runs from 1st of May 2017 to 2nd of June 2017 approximately (~5 weeks to 40%)
- Information retrieval ~ 1 week
- state of the art, analysis of existing systems, ...
- Analysis of the problem ~ 1 week
- analysing data structure, define useful input and output variables/attributes
- Implementation of a mapping function ~ 1 week
- from existing data structure to generic matrix based structure
- readable from Weka
- Use machine learning algorithms with Weka ~ min 2 weeks
- define rules
- define score
A wiki is provide for more details.
A prototype is developed to illustrate statistics from JSON data with JS ecosystem technologies:
- MongoDB 3.4 to import JSON and exploit the power of aggragation queries (See Development documentation).
- API Rest with node and express to extract mapped data (See API documentation).
- Angular 4 and Chart.js to plots statistics (See Development documentation).
These technologies are closed to those used by production current solution.
- npm and node (Installation of Node on Ubuntu 16.04)
- docker (Installation of docker on Ubuntu 16.04)
- docker-compose (Installing Docker Compose on Ubuntu 16.04)
You can skip this step if you already have docker configured. This command allows you to start docker without root rights.
sudo systemctl start docker
Simulate the mongodb 3.4 database in a Docker container (more details here)
The build import the JSON into the MongoDB database and update dates in a string format to ISODate format. In the
tests
folder, run:
cd karibou-quad/tests
docker-compose build
docker-compose up -d
Start Rest API (more details here)
Start the Rest API for the statistics requests. In the server
folder, run:
cd karibou-quad/server
npm install
node server.js
Start the dashboard (more details here)
Start the client dashboard. In the client
folder, run:
cd karibou-quad/client
npm install
./node_modules/@angular/cli/bin/ng serve
If Angular CLI is installed on your machine, you can simply run ng serve
.
Watch the stats on localhost:4200. Enjoy! See the wiki for more documentation.