Smart Contact List

Présentation du projet

Un scénario d'illustration du Projet

L’idée de ce projet est de réaliser une application capable de trouver et de proposer à un utilisateur les contacts les plus probables qu’il souhaite appeler à un instant donné. Par exemple, en tant que Bob, commercial ayant beaucoup de contacts et énormément d'appels à passer dans la journée, je veux que mon téléphone me propose une liste de contact favoris au moment où je souhaite passer un appel. Pour cela, l’application aura accès au journal d’appel de Bob et utilisera un algorithme d'apprentissage supervisé. De même, Bob pourra effectuer un appel depuis l’application.

Matériel disponible

Cible Mobile utilisée :

Étant donné, qu'Android est l'un des leaders du marché des OS pour les applications mobiles, nous allons nous orienter vers une application compatible avec un os de type Android. Nous prendrons comme cible un téléphone Samsung Galaxy S4 mini avec OS Android et une version 5.0.3

Accelerometer, Geomagnetic Sensor, Gyro Sensor, Light Sensor, Proximity Sensor

Environnement logiciel :

Dans le but d'optimiser les performances de notre application et étant donné que nous ciblons des plateformes mobiles de type Android, nous avons choisi de réaliser une application mobile native Android. De ce fait, nous avons choisi d’utiliser Android studio comme environnement logiciel pour développer dans un environnement natif.

Architecture logicielle de la solution :

Notre architecture logicielle sera découpée en deux parties distinctes :

  1. Une partie serveur en charge du traitement des données. Dans notre cas, l’algorithme d’apprentissage sera situé sur celui-ci.
  2. Une partie cliente, l’application mobile permettant :

La communication entre le client et le serveur sera effectué à l’aide de requête de type REST.

Reconnaissance de l'activité :

Cette application permettra de prédire vers quels contacts un appel va être émis et ce en fonction de l'heure et de la date à laquelle l’utilisateur souhaite passer un appel.

Ressources utilisées dans le Projet

Pour ce projet, nous allons principalement nous intéresser aux sondes téléphoniques de l’appareil cible. Pour réaliser notre algorithme d’apprentissage, nous avons besoin de récupérer plusieurs informations :

Faisabilité des choix

Sous Android, l’accès au journal d’appel peux être réaliser en utilisant l’API CallLog.Calls (https://developer.android.com/reference/android/provider/CallLog.Calls.html#CallLog.Calls()). Cette API nous permettra de récupérer tous les informations de l’utilisateur concernant son journal d’appel. Par contre cette API impose bien évidement de demander le droit d’accès au journal d’appel de l’utilisateur.

Nous avons de même la possibilité d’accéder à la liste de contact de l’utilisateur en utilisant l’API Android Read_Contacts (https://developer.android.com/training/contacts-provider/retrieve-names.html).

Algorithme mis en œuvre :

Afin de réaliser ce projet, nous allons mettre en œuvre un algorithme supervisé de type Random forest.

Pour ce faire, nous définiront un vecteur composé d’un grand nombre de données sans quoi l'algorithme serait totalement inefficace.

Avec quelles données ?

Le vecteur sera composé de la date, de l'heure d'appel, de tous les contacts présents sur le téléphone, du nombre d'appel par contact ainsi que de l'identifiant du contact qui constituera notre cible (la classe à reconnaître).

Cet algorithme nous parait tout à fait pertinent du fait du nombre de contact que l'on peut avoir sur un téléphone. Les données engendrées seront donc normalement assez importantes pour fournir un résultat cohérent quant à la prédiction de l'appel que l'on veut passer.

Pour réaliser cela, nous nous inspirerons d’un exemple d’utilisation de cette algorithme disponible à l’adresse suivante : https://www.kaggle.com/vankads/titanic/a-journey-through-titanic/notebook.  

Planning et Test

  1. Choix et implémentation de la composition définitive du vecteur et des classes pour l’utilisation de l’algorithme d’apprentissage Random Forest.
  2. Création de l’application mobile
  3. Mises-en en place de différents services REST pour l’échange de données entre le client et le serveur.
  4. Phase de test et d’analyse

Pour réaliser la phase de test de notre application, nous utiliserons le jeu de données de nos téléphones personnelles.

RENDU FINAL

Code source

Ci-dessous le lien pour accéder au code source de la partie backend (serveur Python) et la partie mobile (projet android studio) : https://github.com/gatienchapon/SmartContactList

Sécurité et vie privée

Pour assurer la confidentialité des données échangées entre l'application cliente et le serveur gérant l’algorithme d'apprentissage, nous avons choisi d'affecter un identifiant unique à chaque contact.

De ce fait, le nom des contacts ou les numéros de téléphones de ceux-ci restent privés et ne sont pas envoyés et bien sûr non stockés sur le serveur distant. Seuls les identifiants des contacts transitent entre l'application et le serveur, ce qui permet de rendre les contacts non identifiables en dehors de l'application.

Nous avons choisi de fournir à nos utilisateurs deux versions de l'application :

Fonctionnement de la machine Serveur

Notre serveur reçoit en entrée plusieurs vecteurs (envoyé par l'application mobile et de type POST) correspondants aux appels d'un utilisateur (pour une question de “vie privée” les numéros de téléphone ainsi que le nom des contacts ne sont pas transférés, seuls les identifiants des contacts sont transférés) .

Après un processus de traitement réalisé par le serveur pour augmenter la taille des vecteurs, un appel à une bibliothèque implémentant Random Forest est réalisé.

Le serveur renvoi par la suite ces prédictions concernant les identifiants des contacts que l'utilisateur souhaitera potentiellement appeler à un instant donné.

Produit 1 : Une Version "Local"

Dans cette version, nous fournissons la machine serveur et l'application cliente Android. Attention : dans cette version votre ordinateur et votre smartphone doivent être sur le même réseau local.

1) Installation de la machine serveur sous Windows

2) Installation de l'application mobile sur cible Android

3) Utilisation et synchronisation avec votre machine local

Produit 2 : Une Version "Cloud"

Pour cette version, il suffit d'installer l'application mobile sur votre smartphone Android

Installation de l'application mobile sur cible Android

Utilisation de l'application mobile Android