{"id":19938,"date":"2019-11-08T13:59:03","date_gmt":"2019-11-08T12:59:03","guid":{"rendered":"https:\/\/relaunch.striped-giraffe.com\/?p=19938"},"modified":"2021-04-22T11:36:06","modified_gmt":"2021-04-22T09:36:06","slug":"creating-test-data-with-machine-learning","status":"publish","type":"post","link":"https:\/\/www.striped-giraffe.com\/en\/blog\/creating-test-data-with-machine-learning\/","title":{"rendered":"Creating Test Data with Machine Learning"},"content":{"rendered":"<section class=\"wpb-content-wrapper\"><p>[vc_row][vc_column width=&#8221;1\/3&#8243;][\/vc_column][vc_column width=&#8221;2\/3&#8243;][vc_column_text]<\/p>\n<h3 style=\"color: #ef6c00; font-weight: bold;\">When it comes to Data Science algorithm design, real production data is always a must. However, one can imagine software engineering and development scenarios requiring data that only resembles the real one, while being artificially generated.<\/h3>\n<p>&nbsp;<\/p>\n<h2><strong>So why would you use fake data?<\/strong><\/h2>\n<p>For a variety of reasons. One example may be the development of a financial Business Intelligence dashboard by a third party not supposed to see the actual sales figures. Another scenario could be making a predictive model prototype operational at scale by a Data Engineering team not eligible to have access to the actual input data.<\/p>\n<p>&nbsp;<\/p>\n<h2><strong>Generative machine learning<\/strong><\/h2>\n<p>Machine learning has been traditionally divided into supervised and unsupervised branches. However, modern machine learning use cases often go beyond this basic classification. Generative machine learning is about generating datapoints rather than labeling or grouping them. In one of the projects carried out for\u00a0<a href=\"https:\/\/www.ratioform.de\/\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>Ratioform<\/strong><\/a>, we used generative machine learning to simulate invoice data in order to test the scalability of our other machine learning algorithms as well as to estimate the noise level of their output.<\/p>\n<p>&nbsp;<\/p>\n<h2><strong>Problem break-down<\/strong><\/h2>\n<p>We simulated invoice data as money spent by customers on products in a predefined time window. This constitutes a simple dataset of three variables \u2014\u00a0<strong>Customer ID<\/strong>,\u00a0<strong>Product ID<\/strong>\u00a0and\u00a0<strong>Sales Amount<\/strong>. This is the PRODUCT-CUSTOMER matrix, an extremely useful basic structure for e-commerce advanced analytics:<\/p>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.striped-giraffe.com\/wp-content\/uploads\/2019\/11\/creating-test-data-with-machine-learning-figure-1-customer-product-matrix.png\" alt=\"Creating Test Data with Machine Learning - Product-Customer sales matrix\" width=\"900\" height=\"1000\" class=\"alignnone size-full wp-image-24146\" srcset=\"https:\/\/www.striped-giraffe.com\/wp-content\/uploads\/2019\/11\/creating-test-data-with-machine-learning-figure-1-customer-product-matrix.png 900w, https:\/\/www.striped-giraffe.com\/wp-content\/uploads\/2019\/11\/creating-test-data-with-machine-learning-figure-1-customer-product-matrix-270x300.png 270w, https:\/\/www.striped-giraffe.com\/wp-content\/uploads\/2019\/11\/creating-test-data-with-machine-learning-figure-1-customer-product-matrix-768x853.png 768w\" sizes=\"(max-width: 900px) 100vw, 900px\" \/><\/p>\n<p>Figure 1 \u2014 Product-Customer sales matrix.<\/p>\n<p>&nbsp;<\/p>\n<p>Raw IDs have no predictive value. For this reason they are replaced with\u00a0<strong>normalized ranks<\/strong>:<\/p>\n<ul>\n<li><strong>Normalized Customer Rank (NCR)<\/strong>\u00a0is the rank of a customer after sorting by customer revenue.<\/li>\n<li><strong>Normalized Product Rank (NPR)<\/strong>\u00a0is the rank of a product after sorting by product revenue.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.striped-giraffe.com\/wp-content\/uploads\/2019\/11\/creating-test-data-with-machine-learning-figure-2-product-customer-sales-matrix-ids-replaced-with-ranks.png\" alt=\"Product-Customer sales matrix with IDs replaced with ranks\" width=\"800\" height=\"1600\" class=\"alignnone size-full wp-image-24155\" srcset=\"https:\/\/www.striped-giraffe.com\/wp-content\/uploads\/2019\/11\/creating-test-data-with-machine-learning-figure-2-product-customer-sales-matrix-ids-replaced-with-ranks.png 800w, https:\/\/www.striped-giraffe.com\/wp-content\/uploads\/2019\/11\/creating-test-data-with-machine-learning-figure-2-product-customer-sales-matrix-ids-replaced-with-ranks-150x300.png 150w, https:\/\/www.striped-giraffe.com\/wp-content\/uploads\/2019\/11\/creating-test-data-with-machine-learning-figure-2-product-customer-sales-matrix-ids-replaced-with-ranks-512x1024.png 512w, https:\/\/www.striped-giraffe.com\/wp-content\/uploads\/2019\/11\/creating-test-data-with-machine-learning-figure-2-product-customer-sales-matrix-ids-replaced-with-ranks-768x1536.png 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/p>\n<p>Figure 2 \u2014 Product-Customer sales matrix:\u00a0<strong>IDs<\/strong>\u00a0are replaced with normalized\u00a0<strong>ranks<\/strong>. In addition, both Products and Customers are sorted by their ranks.<\/p>\n<p>&nbsp;<\/p>\n<p>Our generative machine learning task is about simulating datapoints in a 3-dimensional space of\u00a0<strong>NCR<\/strong>,\u00a0<strong>NPR<\/strong>\u00a0and\u00a0<strong>Sales Amount<\/strong>. In a na\u00efve approach, we would fit a predictive model to all combinations of\u00a0<strong>NCR<\/strong>\u00a0and\u00a0<strong>NPR<\/strong>\u00a0under certain granularity in order to predict the\u00a0<strong>Sales Amount<\/strong>. This is unrealistic for a number of reasons. First of all, real PRODUCT-CUSTOMER matrices are extremely sparse. In our real-world situation, i.e. at\u00a0<a href=\"https:\/\/www.ratioform.de\/\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>Ratioform<\/strong><\/a>, only 0,04% of matrix entries had values greater than zero. Secondly, two input variables don\u2019t hold enough information to reliably model the distinction between zero and non-zero when running regression. Lastly, a model trained this way would be either huge and overfitted or wouldn\u2019t provide the necessary output granularity.<\/p>\n<p>A general solution to these types of challenges is multivariate probability density estimation. In a nutshell, the whole space is divided into areas with different probabilities for datapoints to appear. Each new datapoint is then placed in an area of this space based on a set of generated random numbers. There are multiple probability density estimation techniques available. Generally speaking, the more dimensions there are, the more complicated and computationally intensive they become.<\/p>\n<p>In our generative approach, we break-down the whole problem into two following models:<\/p>\n<ul>\n<li>a 2-D probability density model that generates non-zero\u00a0<strong>NCR-NPR<\/strong>\u00a0combinations based on real data, and<\/li>\n<li>a predictive model based on real data that sets sales values to the generated datapoints.<\/li>\n<\/ul>\n<p>Example of our 2-D density we used in the project for\u00a0<a href=\"https:\/\/www.ratioform.de\/\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>Ratioform<\/strong><\/a>\u00a0is shown in Figure 3. The more violet the color is, the bigger the chance of a datapoint for a given\u00a0<strong>NCR-NPR<\/strong>\u00a0pair appearing. An arbitrary number of datapoints can be created this way. In a second step, a regression Random Forest is trained on the real data, treating\u00a0<strong>NCR<\/strong>\u00a0and\u00a0<strong>NPR<\/strong>\u00a0as input variables and\u00a0<strong>Sales Amount<\/strong>\u00a0as the target variable. Only records with values of the target variable which are greater than zero are considered.<\/p>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.striped-giraffe.com\/wp-content\/uploads\/2019\/11\/creating-test-data-figure-3-probability-density-ncr-npr.png\" alt=\"Creating Test Data with Machine Learning - Probability density with NCR and NPR ranks\" width=\"1040\" height=\"1000\" class=\"alignnone size-full wp-image-24161\" srcset=\"https:\/\/www.striped-giraffe.com\/wp-content\/uploads\/2019\/11\/creating-test-data-figure-3-probability-density-ncr-npr.png 1040w, https:\/\/www.striped-giraffe.com\/wp-content\/uploads\/2019\/11\/creating-test-data-figure-3-probability-density-ncr-npr-300x288.png 300w, https:\/\/www.striped-giraffe.com\/wp-content\/uploads\/2019\/11\/creating-test-data-figure-3-probability-density-ncr-npr-1024x985.png 1024w, https:\/\/www.striped-giraffe.com\/wp-content\/uploads\/2019\/11\/creating-test-data-figure-3-probability-density-ncr-npr-768x738.png 768w, https:\/\/www.striped-giraffe.com\/wp-content\/uploads\/2019\/11\/creating-test-data-figure-3-probability-density-ncr-npr-24x24.png 24w\" sizes=\"(max-width: 1040px) 100vw, 1040px\" \/><\/p>\n<p>Figure 3 \u2014 Bivariate probability density used to generate datapoints.<\/p>\n<p>&nbsp;<\/p>\n<p>This way, the predictive model only needs to fit positive sales values allowing for better accuracy.<\/p>\n<p>In the final step, the Random Forest regressor is applied to the fake datapoints, thus obtaining the fake dataset.<\/p>\n<p>Because of fixed output values in leaves of Random Forest, generated fake data has less distinct values than the real data. This can be corrected by capturing the distribution of differences between real and predicted values and using it to noise up the model output.<\/p>\n<p>&nbsp;<\/p>\n<h2><strong>Results on real data<\/strong><\/h2>\n<p>Figure 4 shows the results of running mentioned algorithm on a real PRODUCT-CUSTOMER matrix. For readability, only a sample of all of the generated datapoints is displayed.<\/p>\n<ul>\n<li>Displayed sales values are the logarithm of actual sales divided by mean sales.<\/li>\n<li><strong>ORIGINAL SALES<\/strong>\u00a0is the original sales data.<\/li>\n<li><strong>MODELED SALES<\/strong>\u00a0shows the results of fitting trained regressor to real data.<\/li>\n<li><strong>GENERATED SALES POINTS<\/strong>\u00a0shows raw generated datapoints.<\/li>\n<li>Finally,\u00a0<strong>GENERATED SALES VALUES<\/strong>\u00a0show the results of fitting the regression model to datapoints generated.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.striped-giraffe.com\/wp-content\/uploads\/2019\/11\/creating-test-data-figure-4-results-on-real-data-ncr-npr.png\" alt=\"Creating Test Data with Machine Learning - Final results on real data\" width=\"1040\" height=\"1000\" class=\"alignnone size-full wp-image-24167\" srcset=\"https:\/\/www.striped-giraffe.com\/wp-content\/uploads\/2019\/11\/creating-test-data-figure-4-results-on-real-data-ncr-npr.png 1040w, https:\/\/www.striped-giraffe.com\/wp-content\/uploads\/2019\/11\/creating-test-data-figure-4-results-on-real-data-ncr-npr-300x288.png 300w, https:\/\/www.striped-giraffe.com\/wp-content\/uploads\/2019\/11\/creating-test-data-figure-4-results-on-real-data-ncr-npr-1024x985.png 1024w, https:\/\/www.striped-giraffe.com\/wp-content\/uploads\/2019\/11\/creating-test-data-figure-4-results-on-real-data-ncr-npr-768x738.png 768w, https:\/\/www.striped-giraffe.com\/wp-content\/uploads\/2019\/11\/creating-test-data-figure-4-results-on-real-data-ncr-npr-24x24.png 24w\" sizes=\"(max-width: 1040px) 100vw, 1040px\" \/><\/p>\n<p>Figure 4 \u2014 Results on real data.<\/p>\n<p>&nbsp;<\/p>\n<h2><strong>Summary<\/strong><\/h2>\n<p>Generated fake data can be used for development purposes and handled less carefully than the original real data. It can also be scaled up or down in terms of volume to empirically simulate scalability of dependent data pipelines. Of course, it cannot be used for Data Science as it is missing interactions between pairs of customers and pairs of products \u2013 they are broken and not regenerated.<\/p>\n<p>On a more general level, a similar approach could be taken to simulate other data entities. Unfortunately, each case might be different and the simulation would get more difficult with each new constraint such as new variable, values for the new variable, relationships between the tables, etc. More conservative approaches such as data masking might be the preferred option for more complex scenarios.[\/vc_column_text][\/vc_column][\/vc_row]<\/p>\n<p>[vc_row][vc_column width=&#8221;1\/4&#8243;][\/vc_column][vc_column width=&#8221;3\/4&#8243;][vc_btn title=&#8221;ALL BLOG ARTICLES&#8221; align=&#8221;center&#8221; link=&#8221;url:https%3A%2F%2Fwww.striped-giraffe.com%2Fen%2Fblog%2F|title:All blog articles&#8221;][\/vc_column][\/vc_row]<\/p>\n<\/section>","protected":false},"excerpt":{"rendered":"<p>[vc_row][vc_column width=&#8221;1\/3&#8243;][\/vc_column][vc_column width=&#8221;2\/3&#8243;][vc_column_text] When it comes to Data Science algorithm design, real production data is always a must. However, one [&hellip;]<\/p>\n","protected":false},"author":12,"featured_media":19939,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[61],"tags":[],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v20.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Creating Test Data with Machine Learning - Striped Giraffe<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.striped-giraffe.com\/en\/blog\/creating-test-data-with-machine-learning\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Creating Test Data with Machine Learning\" \/>\n<meta property=\"og:description\" content=\"[vc_row][vc_column width=&#8221;1\/3&#8243;][\/vc_column][vc_column width=&#8221;2\/3&#8243;][vc_column_text] When it comes to Data Science algorithm design, real production data is always a must. However, one [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.striped-giraffe.com\/en\/blog\/creating-test-data-with-machine-learning\/\" \/>\n<meta property=\"og:site_name\" content=\"Striped Giraffe\" \/>\n<meta property=\"article:published_time\" content=\"2019-11-08T12:59:03+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-04-22T09:36:06+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.striped-giraffe.com\/wp-content\/uploads\/2021\/01\/creating-test-data-with-machine-learning.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Striped Giraffe Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Striped Giraffe Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.striped-giraffe.com\/en\/blog\/creating-test-data-with-machine-learning\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.striped-giraffe.com\/en\/blog\/creating-test-data-with-machine-learning\/\"},\"author\":{\"name\":\"Striped Giraffe Team\",\"@id\":\"https:\/\/www.striped-giraffe.com\/de\/#\/schema\/person\/21314fc1f246d9b252c9fa2fbb6e85fa\"},\"headline\":\"Creating Test Data with Machine Learning\",\"datePublished\":\"2019-11-08T12:59:03+00:00\",\"dateModified\":\"2021-04-22T09:36:06+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.striped-giraffe.com\/en\/blog\/creating-test-data-with-machine-learning\/\"},\"wordCount\":1004,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.striped-giraffe.com\/de\/#organization\"},\"articleSection\":[\"Machine Learning\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.striped-giraffe.com\/en\/blog\/creating-test-data-with-machine-learning\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.striped-giraffe.com\/en\/blog\/creating-test-data-with-machine-learning\/\",\"url\":\"https:\/\/www.striped-giraffe.com\/en\/blog\/creating-test-data-with-machine-learning\/\",\"name\":\"Creating Test Data with Machine Learning - Striped Giraffe\",\"isPartOf\":{\"@id\":\"https:\/\/www.striped-giraffe.com\/de\/#website\"},\"datePublished\":\"2019-11-08T12:59:03+00:00\",\"dateModified\":\"2021-04-22T09:36:06+00:00\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.striped-giraffe.com\/en\/blog\/creating-test-data-with-machine-learning\/\"]}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.striped-giraffe.com\/de\/#website\",\"url\":\"https:\/\/www.striped-giraffe.com\/de\/\",\"name\":\"Striped Giraffe\",\"description\":\"Ihr zuverl\u00e4ssiger Anbieter f\u00fcr digitale Enterprise-L\u00f6sungen\",\"publisher\":{\"@id\":\"https:\/\/www.striped-giraffe.com\/de\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.striped-giraffe.com\/de\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.striped-giraffe.com\/de\/#organization\",\"name\":\"Striped Giraffe\",\"url\":\"https:\/\/www.striped-giraffe.com\/de\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.striped-giraffe.com\/de\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.striped-giraffe.com\/wp-content\/uploads\/2021\/01\/giraffe_white.svg\",\"contentUrl\":\"https:\/\/www.striped-giraffe.com\/wp-content\/uploads\/2021\/01\/giraffe_white.svg\",\"caption\":\"Striped Giraffe\"},\"image\":{\"@id\":\"https:\/\/www.striped-giraffe.com\/de\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.striped-giraffe.com\/de\/#\/schema\/person\/21314fc1f246d9b252c9fa2fbb6e85fa\",\"name\":\"Striped Giraffe Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.striped-giraffe.com\/de\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.striped-giraffe.com\/wp-content\/uploads\/2021\/01\/avatar_giraffe_v2-96x96.jpg\",\"contentUrl\":\"https:\/\/www.striped-giraffe.com\/wp-content\/uploads\/2021\/01\/avatar_giraffe_v2-96x96.jpg\",\"caption\":\"Striped Giraffe Team\"},\"url\":\"https:\/\/www.striped-giraffe.com\/en\/blog\/author\/striped-giraffe\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Creating Test Data with Machine Learning - Striped Giraffe","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.striped-giraffe.com\/en\/blog\/creating-test-data-with-machine-learning\/","og_locale":"en_US","og_type":"article","og_title":"Creating Test Data with Machine Learning","og_description":"[vc_row][vc_column width=&#8221;1\/3&#8243;][\/vc_column][vc_column width=&#8221;2\/3&#8243;][vc_column_text] When it comes to Data Science algorithm design, real production data is always a must. However, one [&hellip;]","og_url":"https:\/\/www.striped-giraffe.com\/en\/blog\/creating-test-data-with-machine-learning\/","og_site_name":"Striped Giraffe","article_published_time":"2019-11-08T12:59:03+00:00","article_modified_time":"2021-04-22T09:36:06+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/www.striped-giraffe.com\/wp-content\/uploads\/2021\/01\/creating-test-data-with-machine-learning.jpg","type":"image\/jpeg"}],"author":"Striped Giraffe Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Striped Giraffe Team","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.striped-giraffe.com\/en\/blog\/creating-test-data-with-machine-learning\/#article","isPartOf":{"@id":"https:\/\/www.striped-giraffe.com\/en\/blog\/creating-test-data-with-machine-learning\/"},"author":{"name":"Striped Giraffe Team","@id":"https:\/\/www.striped-giraffe.com\/de\/#\/schema\/person\/21314fc1f246d9b252c9fa2fbb6e85fa"},"headline":"Creating Test Data with Machine Learning","datePublished":"2019-11-08T12:59:03+00:00","dateModified":"2021-04-22T09:36:06+00:00","mainEntityOfPage":{"@id":"https:\/\/www.striped-giraffe.com\/en\/blog\/creating-test-data-with-machine-learning\/"},"wordCount":1004,"commentCount":0,"publisher":{"@id":"https:\/\/www.striped-giraffe.com\/de\/#organization"},"articleSection":["Machine Learning"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.striped-giraffe.com\/en\/blog\/creating-test-data-with-machine-learning\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.striped-giraffe.com\/en\/blog\/creating-test-data-with-machine-learning\/","url":"https:\/\/www.striped-giraffe.com\/en\/blog\/creating-test-data-with-machine-learning\/","name":"Creating Test Data with Machine Learning - Striped Giraffe","isPartOf":{"@id":"https:\/\/www.striped-giraffe.com\/de\/#website"},"datePublished":"2019-11-08T12:59:03+00:00","dateModified":"2021-04-22T09:36:06+00:00","inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.striped-giraffe.com\/en\/blog\/creating-test-data-with-machine-learning\/"]}]},{"@type":"WebSite","@id":"https:\/\/www.striped-giraffe.com\/de\/#website","url":"https:\/\/www.striped-giraffe.com\/de\/","name":"Striped Giraffe","description":"Ihr zuverl\u00e4ssiger Anbieter f\u00fcr digitale Enterprise-L\u00f6sungen","publisher":{"@id":"https:\/\/www.striped-giraffe.com\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.striped-giraffe.com\/de\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.striped-giraffe.com\/de\/#organization","name":"Striped Giraffe","url":"https:\/\/www.striped-giraffe.com\/de\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.striped-giraffe.com\/de\/#\/schema\/logo\/image\/","url":"https:\/\/www.striped-giraffe.com\/wp-content\/uploads\/2021\/01\/giraffe_white.svg","contentUrl":"https:\/\/www.striped-giraffe.com\/wp-content\/uploads\/2021\/01\/giraffe_white.svg","caption":"Striped Giraffe"},"image":{"@id":"https:\/\/www.striped-giraffe.com\/de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.striped-giraffe.com\/de\/#\/schema\/person\/21314fc1f246d9b252c9fa2fbb6e85fa","name":"Striped Giraffe Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.striped-giraffe.com\/de\/#\/schema\/person\/image\/","url":"https:\/\/www.striped-giraffe.com\/wp-content\/uploads\/2021\/01\/avatar_giraffe_v2-96x96.jpg","contentUrl":"https:\/\/www.striped-giraffe.com\/wp-content\/uploads\/2021\/01\/avatar_giraffe_v2-96x96.jpg","caption":"Striped Giraffe Team"},"url":"https:\/\/www.striped-giraffe.com\/en\/blog\/author\/striped-giraffe\/"}]}},"_links":{"self":[{"href":"https:\/\/www.striped-giraffe.com\/en\/wp-json\/wp\/v2\/posts\/19938"}],"collection":[{"href":"https:\/\/www.striped-giraffe.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.striped-giraffe.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.striped-giraffe.com\/en\/wp-json\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/www.striped-giraffe.com\/en\/wp-json\/wp\/v2\/comments?post=19938"}],"version-history":[{"count":5,"href":"https:\/\/www.striped-giraffe.com\/en\/wp-json\/wp\/v2\/posts\/19938\/revisions"}],"predecessor-version":[{"id":25526,"href":"https:\/\/www.striped-giraffe.com\/en\/wp-json\/wp\/v2\/posts\/19938\/revisions\/25526"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.striped-giraffe.com\/en\/wp-json\/wp\/v2\/media\/19939"}],"wp:attachment":[{"href":"https:\/\/www.striped-giraffe.com\/en\/wp-json\/wp\/v2\/media?parent=19938"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.striped-giraffe.com\/en\/wp-json\/wp\/v2\/categories?post=19938"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.striped-giraffe.com\/en\/wp-json\/wp\/v2\/tags?post=19938"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}