portaldacalheta.pt
  • Principal
  • Procédé De Design
  • Interface Web
  • Hausse Des Revenus
  • Processus Financiers
La Technologie

Créez des données à partir de bruit aléatoire avec des réseaux contradictoires génératifs



Depuis que j'ai découvert les réseaux antagonistes génératifs (GAN), je suis fasciné par eux. Un GAN est un type de réseau neuronal capable de générer de nouvelles données à partir de zéro. Vous pouvez lui donner un peu de bruit aléatoire en entrée, et il peut produire des images réalistes de chambres à coucher, d'oiseaux ou de tout ce qu'il est entraîné à générer.

Une chose sur laquelle tous les scientifiques peuvent s'entendre, c'est que nous avons besoin de plus de données.



Les GAN, qui peuvent être utilisés pour produire de nouvelles données dans des situations limitées en données, peuvent s'avérer vraiment utiles. Les données peuvent parfois être difficiles, coûteuses et longues à générer. Pour être utiles, cependant, les nouvelles données doivent être suffisamment réalistes pour que les informations que nous obtenons à partir des données générées s'appliquent toujours aux données réelles. Si vous entraînez un chat à chasser des souris et que vous utilisez de fausses souris, vous feriez mieux de vous assurer que les fausses souris ressemblent réellement à des souris.



Une autre façon d'y penser est que les GAN découvrent une structure dans les données qui leur permet de créer des données réalistes. Cela peut être utile si nous ne pouvons pas voir cette structure par nous-mêmes ou si nous ne pouvons pas la retirer avec d'autres méthodes.



Réseaux d

Dans cet article, vous apprendrez comment les GAN peuvent être utilisés pour générer de nouvelles données. Pour garder ce tutoriel réaliste, nous utiliserons le ensemble de données de détection de fraude par carte de crédit de Kaggle.



Dans mes expériences, j'ai essayé d'utiliser cet ensemble de données pour voir si je pouvais obtenir un GAN pour créer des données suffisamment réalistes pour nous aider à détecter les cas frauduleux. Cet ensemble de données met en évidence le problème des données limitées: sur 285 000 transactions, seulement 492 sont des fraudes. 492 cas de fraude n'est pas un ensemble de données volumineux sur lequel s'entraîner, en particulier lorsqu'il s'agit de tâches d'apprentissage automatique où les gens aiment avoir des ensembles de données de plusieurs ordres de grandeur plus grands. Bien que les résultats de mon expérience n'aient pas été étonnants, j'ai appris beaucoup de choses sur les GAN en cours de route que je suis heureux de partager.

Avant de commencer

Avant de plonger dans ce domaine des GAN, si vous souhaitez rafraîchir rapidement vos compétences en apprentissage automatique ou en apprentissage profond, vous pouvez jeter un œil à ces deux articles de blog connexes:



  • Une introduction à la théorie de l'apprentissage automatique et à son application: un didacticiel visuel avec des exemples
  • Un tutoriel d'apprentissage en profondeur: des perceptrons aux réseaux profonds

Pourquoi les GAN?

Les réseaux antagonistes génératifs (GAN) sont une architecture de réseau neuronal qui a montré des améliorations impressionnantes par rapport aux méthodes génératives précédentes, telles que encodeurs automatiques variationnels ou des machines boltzman restreintes. Les GAN ont été en mesure de générer des images plus réalistes (par exemple, DCGAN ), activez le transfert de style entre les images (voir Ici et Ici ), générez des images à partir de descriptions textuelles ( StackGAN ) et apprenez à partir d'ensembles de données plus petits via apprentissage semi-supervisé . En raison de ces réalisations, elles génèrent de nombreux intérêt dans les secteurs académique et commercial.

Le directeur de la recherche sur l'IA chez Facebook, Yann LeCunn, les a même appelés le développement le plus passionnant de l'apprentissage automatique au cours de la dernière décennie.



principe gestalt du destin commun

Les bases

Pensez à la façon dont vous apprenez. Vous essayez quelque chose, vous obtenez des commentaires. Vous ajustez votre stratégie et essayez à nouveau.

La rétroaction peut prendre la forme de critiques, de douleur ou de profit. Cela peut provenir de votre propre jugement sur vos performances. Souvent, les commentaires les plus utiles sont les commentaires d’une autre personne, car il ne s’agit pas simplement d’un chiffre ou d’une sensation, mais d’une évaluation intelligente de la façon dont vous avez exécuté la tâche.



Lorsqu'un ordinateur est formé pour une tâche, l'humain fournit généralement la rétroaction sous la forme de paramètres ajustés ou d'algorithmes. Cela fonctionne bien lorsque la tâche est bien définie, comme apprendre à multiplier deux nombres. Vous pouvez facilement et exactement dire à l'ordinateur en quoi il s'est trompé.

Avec une tâche plus compliquée, comme la création d'une image de chien, il devient plus difficile de fournir des commentaires. L'image est-elle floue, ressemble-t-elle plus à un chat ou à quoi que ce soit? Des statistiques complexes pourraient être mises en œuvre, mais il serait difficile de capturer tous les détails qui donnent l'impression qu'une image semble réelle.



Un humain peut donner une certaine estimation, car nous avons beaucoup d'expérience dans l'évaluation des entrées visuelles, mais nous sommes relativement lents et nos évaluations peuvent être très subjectives. Nous pourrions plutôt former un réseau de neurones pour apprendre la tâche de discrimination entre les images réelles et générées.

Ensuite, en laissant le générateur d'images (également un réseau de neurones) et le discriminateur apprendre à tour de rôle, ils peuvent s'améliorer avec le temps. Ces deux réseaux, jouant ce jeu, sont un réseau antagoniste génératif.

différence entre s corp et c corp

Vous pouvez entendre l'inventeur des GAN, Ian Goodfellow, explique comment une dispute dans un bar sur ce sujet a conduit à une nuit fébrile de codage qui a abouti au premier GAN. Et oui, il reconnaît la barre dans son papier . Pour en savoir plus sur les GAN, consultez Le blog d'Ian Goodfellow sur ce sujet.

Schéma du GAN

Il existe un certain nombre de défis lorsque l'on travaille avec des GAN. La formation d'un seul réseau de neurones peut être difficile en raison du nombre de choix impliqués: architecture, fonctions d'activation, méthode d'optimisation, taux d'apprentissage et taux d'abandon, pour n'en nommer que quelques-uns.

Les GAN doublent tous ces choix et ajoutent de nouvelles complexités. Le générateur et le discriminateur peuvent oublier les astuces qu'ils ont utilisées plus tôt dans leur formation. Cela peut conduire les deux réseaux à se retrouver pris dans un cycle stable de solutions qui ne s'améliorent pas avec le temps. Un réseau peut dominer l'autre réseau, de sorte qu'aucun des deux ne peut plus apprendre. Ou bien, le générateur peut ne pas explorer une grande partie de l'espace de solution possible, juste assez pour trouver des solutions réalistes. Cette dernière situation est connue sous le nom d'effondrement de mode.

L'effondrement de mode se produit lorsque le générateur n'apprend qu'un petit sous-ensemble des modes réalistes possibles. Par exemple, si la tâche consiste à générer des images de chiens, le générateur pourrait apprendre à créer uniquement des images de petits chiens bruns. Le générateur aurait manqué tous les autres modes composés de chiens d'autres tailles ou couleurs.

De nombreuses stratégies ont été mises en œuvre pour résoudre ce problème, y compris la normalisation des lots, l'ajout d'étiquettes dans les données d'apprentissage ou en modifiant la façon dont le discriminateur juge les données générées.

Les gens ont remarqué que l'ajout d'étiquettes aux données, c'est-à-dire de les diviser en catégories, améliore presque toujours les performances des GAN. Au lieu d'apprendre à générer des images d'animaux de compagnie en général, il devrait être plus facile de générer des images de chats, de chiens, de poissons et de furets, par exemple.

Peut-être que les avancées les plus importantes dans le développement du GAN sont venues en termes de changement de la façon dont le discriminateur évalue les données, alors examinons cela de plus près.

Dans la formulation originale des GAN en 2014 par Goodfellow et coll. , le discriminateur génère une estimation de la probabilité qu'une image donnée soit réelle ou générée. Le discriminateur recevrait un ensemble d'images composé à la fois d'images réelles et générées et il générerait une estimation pour chacune de ces entrées. L'erreur entre la sortie du discriminateur et les étiquettes réelles serait alors mesurée par la perte d'entropie croisée. La perte d'entropie croisée peut être assimilée à la métrique de distance Jensen-Shannon, et elle a été montrée au début de 2017 par Arjovsky et coll. que cette métrique échouerait dans certains cas et ne pointerait pas dans la bonne direction dans d'autres cas. Ce groupe a montré que la métrique de distance de Wasserstein (également connue sous le nom de déplacement de la terre ou distance EM) fonctionnait mieux dans de nombreux autres cas.

La perte d'entropie croisée est une mesure de la précision avec laquelle le discriminateur a identifié les images réelles et générées. La métrique de Wasserstein examine plutôt la distribution de chaque variable (c'est-à-dire, chaque couleur de chaque pixel) dans les images réelles et générées, et détermine à quelle distance les distributions sont pour les données réelles et générées. La métrique de Wasserstein regarde combien d'efforts, en termes de masse multipliée par la distance, il faudrait pour pousser la distribution générée sous la forme de la distribution réelle, d'où le nom alternatif «distance de déplacement de la terre». Étant donné que la métrique de Wasserstein n'évalue plus si une image est réelle ou non, mais fournit plutôt une critique de la distance entre les images générées et les images réelles, le réseau «discriminateur» est appelé réseau «critique» dans le Wasserstein architecture.

Pour une exploration un peu plus complète des GAN, dans cet article, nous explorerons quatre architectures différentes:

  • GAN: Le GAN original («vanille»)
  • CGAN: une version conditionnelle du GAN d'origine qui utilise des étiquettes de classe
  • WGAN: The Wasserstein GAN (avec gradient-penalty)
  • WCGAN: une version conditionnelle du Wasserstein GAN

Mais regardons d'abord notre ensemble de données.

Un regard sur les données de fraude par carte de crédit

Nous travaillerons avec le ensemble de données de détection de fraude par carte de crédit de Kaggle.

L'ensemble de données comprend environ 285 000 transactions, dont seulement 492 sont frauduleuses. Les données se composent de 31 caractéristiques: «temps», «montant», «classe» et 28 caractéristiques supplémentaires anonymisées. La caractéristique de classe est l'étiquette indiquant si une transaction est frauduleuse ou non, 0 indiquant normal et 1 indiquant une fraude. Toutes les données sont numériques et continues (à l'exception de l'étiquette). L'ensemble de données n'a aucune valeur manquante. L'ensemble de données est déjà en assez bon état pour commencer, mais je vais faire un peu plus de nettoyage, principalement en ajustant simplement les moyennes de toutes les entités à zéro et les écarts-types à un. J'ai décrit plus en détail mon processus de nettoyage dans le bloc-notes Ici . Pour l'instant, je vais juste montrer le résultat final :

Graphiques de caractéristiques et de classes

On peut facilement repérer les différences entre les données normales et les données de fraude dans ces distributions, mais il y a aussi beaucoup de chevauchements. Nous pouvons appliquer l'un des algorithmes d'apprentissage automatique les plus rapides et les plus puissants pour identifier les fonctionnalités les plus utiles pour identifier la fraude. Cet algorithme, xgboost , est un algorithme d'arbre de décision boosté par gradient. Nous allons l'entraîner sur 70% de l'ensemble de données et le tester sur les 30% restants. Nous pouvons configurer l'algorithme pour qu'il continue jusqu'à ce qu'il n'améliore pas le rappel (la fraction d'échantillons de fraude détectée) sur l'ensemble de données de test. Cela atteint 76% de rappel sur l'ensemble de test, ce qui laisse clairement une marge d'amélioration. Il atteint une précision de 94%, ce qui signifie que seulement 6% des cas de fraude prévus étaient en fait des transactions normales. De cette analyse, nous obtenons également une liste de fonctionnalités triées par leur utilité dans la détection des fraudes. Nous pouvons utiliser les fonctionnalités les plus importantes pour vous aider à visualiser nos résultats plus tard.

Encore une fois, si nous avions plus de données sur la fraude, nous pourrions peut-être mieux les détecter. Autrement dit, nous pourrions obtenir un rappel plus élevé. Nous allons maintenant essayer de générer de nouvelles données de fraude réalistes en utilisant les GAN pour nous aider à détecter les fraudes réelles.

Génération de nouvelles données de carte de crédit avec des GAN

Pour appliquer diverses architectures GAN à cet ensemble de données, je vais utiliser GAN-Sandbox , qui a un certain nombre d'architectures GAN populaires implémentées en Python à l'aide de la bibliothèque Keras et d'un back-end TensorFlow. Tous mes résultats sont disponibles sous forme de notebook Jupyter Ici . Toutes les bibliothèques nécessaires sont incluses dans l'image Docker Kaggle / Python, si vous avez besoin d'une configuration simple.

Les exemples dans GAN-Sandbox sont configurés pour le traitement d'image. Le générateur produit une image 2D avec 3 canaux de couleur pour chaque pixel, et le discriminateur / critique est configuré pour évaluer ces données. Des transformations convolutives sont utilisées entre les couches des réseaux pour tirer parti de la structure spatiale des données d'image. Chaque neurone dans une couche convolutionnelle ne fonctionne qu'avec un petit groupe d'entrées et de sorties (par exemple, des pixels adjacents dans une image) pour permettre l'apprentissage des relations spatiales. Notre ensemble de données de carte de crédit ne contient aucune structure spatiale parmi les variables, j'ai donc converti les réseaux convolutifs en réseaux avec des couches densément connectées. Les neurones dans les couches densément connectées sont connectés à chaque entrée et sortie de la couche, permettant au réseau d'apprendre ses propres relations entre les caractéristiques. J'utiliserai cette configuration pour chacune des architectures.

comment fixer le prix d'une introduction en bourse

Le premier GAN que j’évaluerai oppose le réseau du générateur au réseau du discriminateur, en utilisant la perte d’entropie croisée du discriminateur pour former les réseaux. Il s'agit de l'architecture GAN originale, «vanille». Le deuxième GAN que j'évaluerai ajoute des étiquettes de classe aux données à la manière d'un GAN conditionnel (CGAN). Ce GAN a une autre variable dans les données, l'étiquette de classe. Le troisième GAN utilisera la métrique de distance de Wasserstein pour former les réseaux (WGAN), et le dernier utilisera les étiquettes de classe et la métrique de distance de Wasserstein (WCGAN).

Architectures GAN

Nous formerons les différents GAN à l'aide d'un ensemble de données de formation comprenant les 492 transactions frauduleuses. Nous pouvons ajouter des classes à l'ensemble de données de fraude pour faciliter les architectures GAN conditionnelles. J'ai exploré quelques méthodes de clustering différentes dans le notebook et je suis allé avec une classification KMeans qui trie les données de fraude en 2 classes.

Je vais entraîner chaque GAN pendant 5000 tours et examiner les résultats en cours de route. Dans la figure 4, nous pouvons voir les données de fraude réelles et les données de fraude générées à partir des différentes architectures GAN au fur et à mesure de la formation. Nous pouvons voir les données de fraude réelles divisées en 2 classes KMeans, tracées avec les 2 dimensions qui distinguent le mieux ces deux classes (fonctionnalités V10 et V17 des fonctionnalités transformées PCA). Les deux GAN qui n'utilisent pas les informations de classe, le GAN et le WGAN, ont leur sortie générée en une seule classe. Les architectures conditionnelles, CGAN et WCGAN, affichent leurs données générées par classe. À l'étape 0, tous les les données générées montrent la distribution normale de l'entrée aléatoire fournie aux générateurs.

Comparaison des sorties GAN

Nous pouvons voir que l'architecture GAN originale commence à apprendre la forme et la plage des données réelles, puis s'effondre vers une petite distribution. Il s'agit de la réduction de mode évoquée précédemment. Le générateur a appris une petite plage de données que le discriminateur a du mal à détecter comme étant fausses. L'architecture CGAN fait un peu mieux, étalant et se rapprochant des distributions de chaque classe de données de fraude, mais ensuite l'effondrement du mode s'installe, comme on peut le voir à l'étape 5000.

Le WGAN ne subit pas l'effondrement de mode présenté par les architectures GAN et CGAN. Même sans informations de classe, il commence à supposer la distribution non normale des données de fraude réelles. L'architecture WCGAN fonctionne de la même manière et est capable de générer les classes de données séparées.

Nous pouvons évaluer le caractère réaliste des données en utilisant le même algorithme xgboost utilisé précédemment pour la détection des fraudes. Il est rapide et puissant et fonctionne dans le commerce sans trop de réglages. Nous allons former le classificateur xgboost en utilisant la moitié des données de fraude réelles (246 échantillons) et un nombre égal d'exemples générés par le GAN. Ensuite, nous testerons le classificateur xgboost en utilisant l'autre moitié des données de fraude réelles et un ensemble différent de 246 exemples générés par le GAN. Cette méthode orthogonale (au sens expérimental) nous donnera quelques indications sur le succès du générateur dans la production de données réalistes. Avec des données générées parfaitement réalistes, l'algorithme xgboost devrait atteindre une précision de 0,50 (50%) - en d'autres termes, ce n'est pas mieux que de deviner.

Précision

nous pouvons voir la précision xgboost sur le GAN, les données générées diminuent au début, puis augmentent après l'étape d'apprentissage 1000 lorsque l'effondrement de mode s'installe. L'architecture CGAN permet d'obtenir des données un peu plus réalistes après 2000 étapes, mais l'effondrement de mode s'installe également pour ce réseau. Les architectures WGAN et WCGAN permettent d'obtenir des données plus réalistes plus rapidement et continuent à apprendre à mesure que la formation progresse. Le WCGAN ne semble pas avoir beaucoup d'avantage sur le WGAN, ce qui suggère que ces classes créées peuvent ne pas être utiles pour les architectures Wasserstein GAN.

Vous pouvez en savoir plus sur l'architecture WGAN sur Ici et Ici .

Le réseau critique dans les architectures WGAN et WCGAN apprend à calculer la distance de Wasserstein (Earth-mover, EM) entre un ensemble de données donné et les données de fraude réelles. Idéalement, il mesurera une distance proche de zéro pour un échantillon de données de fraude réelles. Le critique, cependant, est en train d'apprendre à effectuer ce calcul. Tant qu'il mesure une plus grande distance pour les données générées que pour les données réelles, le réseau peut s'améliorer. Nous pouvons observer comment la différence entre les distances de Wasserstein pour les données générées et réelles change au cours de la formation. S'il s'agit de plateaux, une formation supplémentaire peut ne pas aider. On peut voir sur la figure 6 que là semble être une amélioration supplémentaire à avoir pour le WGAN et le WCGAN sur cet ensemble de données.

Estimation de distance EM

Qu'avons-nous appris?

Nous pouvons maintenant tester si nous sommes en mesure de générer de nouvelles données sur la fraude suffisamment réalistes pour nous aider à détecter les données de fraude réelles. Nous pouvons prendre le générateur formé qui a obtenu le score de précision le plus bas et l'utiliser pour générer des données. Pour notre ensemble de formation de base, nous utiliserons 70% des données de non-fraude (199 020 cas) et 100 cas de données de fraude (environ 20% des données de fraude). Nous allons ensuite essayer d'ajouter différentes quantités de données de fraude réelles ou générées à cet ensemble de formation, jusqu'à 344 cas (70% des données de fraude). Pour l'ensemble de tests, nous utiliserons les 30% restants des cas de non-fraude (85 295 cas) et des cas de fraude (148 cas). Nous pouvons essayer d'ajouter des données générées à partir d'un GAN non entraîné et du GAN le mieux formé pour tester si les données générées sont meilleures que le bruit aléatoire. D'après nos tests, il semble que notre meilleure architecture était le WCGAN à l'étape d'entraînement 4800, où il a atteint une précision xgboost de 70% (rappelez-vous, idéalement, la précision serait de 50%). Nous utiliserons donc cette architecture pour générer de nouvelles données sur la fraude.

Nous pouvons voir dans la figure 7 que le rappel (la fraction des échantillons de fraude réels identifiés avec précision dans l'ensemble de test) n'augmente pas car nous utilisons davantage de données de fraude générées pour la formation. Le classificateur xgboost est capable de conserver toutes les informations qu'il a utilisées pour identifier la fraude à partir des 100 cas réels et de ne pas être dérouté par les données supplémentaires générées, même en les sélectionnant parmi des centaines de milliers de cas normaux. Les données générées par le WCGAN non formé n’aident ni ne font de mal, sans surprise. Mais les données générées par le WCGAN formé n’aident pas non plus. Il semble que les données ne soient pas suffisamment réalistes. Nous pouvons voir sur la figure 7 que lorsque des données de fraude réelles sont utilisées pour compléter l'ensemble de formation, le rappel augmente considérablement. Si le WCGAN venait d'apprendre à dupliquer les exemples de formation, sans faire preuve de créativité, il aurait pu atteindre des taux de rappel plus élevés car nous voir avec les données réelles .

Effet des données supplémentaires

À l'infini et au-delà

Bien que nous n'ayons pas été en mesure de générer des données de fraude par carte de crédit suffisamment réalistes pour nous aider à détecter une fraude réelle, nous avons à peine effleuré la surface avec ces méthodes. Nous pourrions nous entraîner plus longtemps, avec des réseaux plus grands, et régler les paramètres des architectures que nous avons essayées dans cet article. Les tendances de la précision xgboost et de la perte de discriminateur suggèrent qu'une formation plus poussée aidera les architectures WGAN et WCGAN. Une autre option consiste à revoir le nettoyage des données que nous avons effectué, peut-être créer de nouvelles variables ou modifier si et comment nous traitons l'asymétrie des fonctionnalités. Des systèmes de classification différents des données sur la fraude seraient peut-être utiles.

Nous pourrions également essayer d'autres architectures GAN. La DRAGAN a des preuves théoriques et expérimentales montrant qu'il s'entraîne plus rapidement et de manière plus stable que les GAN de Wasserstein. Nous pourrions intégrer des méthodes utilisant un apprentissage semi-supervisé, qui se sont révélées prometteuses dans l'apprentissage à partir d'ensembles de formation limités (voir ' Techniques améliorées pour la formation des GAN ”). Nous pourrions essayer une architecture qui nous donne des modèles compréhensibles par l'homme, afin de pouvoir mieux comprendre la structure des données (voir InfoGAN ).

Nous devons également garder un œil sur les nouveaux développements dans le domaine et, enfin, mais non des moindres, nous pouvons travailler à la création de nos propres innovations dans cet espace en développement rapide.

Vous pouvez trouver tout le code pertinent pour cet article dans ce Dépôt GitHub .

lequel des éléments suivants est le centre du modèle des cinq forces du porteur discuté dans la conférence ?
En relation: Les nombreuses applications de la descente de gradient dans TensorFlow

Comprendre les bases

Qu'est-ce qu'un GAN?

Un GAN est un algorithme d'apprentissage automatique dans lequel un réseau neuronal génère les données tandis qu'un autre détermine si la sortie semble réelle. Les deux réseaux s'affrontent pour améliorer le réalisme des données générées.

Introduction à PHP 7: Nouveautés et nouveautés

Back-End

Introduction à PHP 7: Nouveautés et nouveautés
Évolution de la gestion de projet: startups vs entreprises

Évolution de la gestion de projet: startups vs entreprises

Personnes Et Équipes

Articles Populaires
Comment créer une culture dans des équipes distantes
Comment créer une culture dans des équipes distantes
Guide du développeur sur les licences Open Source
Guide du développeur sur les licences Open Source
Comment organiser une conférence technique réussie: l'événement CordobaJS
Comment organiser une conférence technique réussie: l'événement CordobaJS
Astuces et astuces avancées pour les présentations PowerPoint
Astuces et astuces avancées pour les présentations PowerPoint
Un didacticiel pour les futurs développeurs Google Glass: créer votre première application Glass
Un didacticiel pour les futurs développeurs Google Glass: créer votre première application Glass
 
Vol d'identité des pigistes: ça m'est arrivé - voici ce que vous devez savoir
Vol d'identité des pigistes: ça m'est arrivé - voici ce que vous devez savoir
Les 9 erreurs les plus courantes commises par les développeurs ioniques
Les 9 erreurs les plus courantes commises par les développeurs ioniques
Ray Dalio de Bridgewater: pionnier silencieux du Big Data, du Machine Learning et de la Fintech
Ray Dalio de Bridgewater: pionnier silencieux du Big Data, du Machine Learning et de la Fintech
Le guide ultime pour créer un plugin WordPress
Le guide ultime pour créer un plugin WordPress
Reconnaissance des numéros d'apprentissage automatique - De zéro à l'application
Reconnaissance des numéros d'apprentissage automatique - De zéro à l'application
Articles Populaires
  • laquelle des expressions suivantes est valable pour l'élasticité-prix de la demande ?
  • comment créer un prototype
  • quels sont les principaux types de risques de change
  • comment écrire un algorithme d'apprentissage automatique
  • les chemins par lesquels les produits ou services parviennent aux clients sont appelés
Catégories
  • Procédé De Design
  • Interface Web
  • Hausse Des Revenus
  • Processus Financiers
  • © 2022 | Tous Les Droits Sont Réservés

    portaldacalheta.pt