<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Adam Gajtkowski on Medium]]></title>
        <description><![CDATA[Stories by Adam Gajtkowski on Medium]]></description>
        <link>https://medium.com/@adam-gajtkowski?source=rss-ca8e382fc78a------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*zlwEwWI_06YRx-sAZ1kb5Q.jpeg</url>
            <title>Stories by Adam Gajtkowski on Medium</title>
            <link>https://medium.com/@adam-gajtkowski?source=rss-ca8e382fc78a------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 14 Nov 2026 06:02:28 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@adam-gajtkowski/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Predicting FT Trending Topics]]></title>
            <link>https://medium.com/ft-product-technology/predicting-ft-trending-topics-7eda85ece727?source=rss-ca8e382fc78a------2</link>
            <guid isPermaLink="false">https://medium.com/p/7eda85ece727</guid>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[data-science]]></category>
            <category><![CDATA[financial-times]]></category>
            <category><![CDATA[signal-processing]]></category>
            <category><![CDATA[time-series-model]]></category>
            <dc:creator><![CDATA[Adam Gajtkowski]]></dc:creator>
            <pubDate>Mon, 29 Mar 2021 08:04:28 GMT</pubDate>
            <atom:updated>2021-04-01T22:01:37.392Z</atom:updated>
            <content:encoded><![CDATA[<p>Identifying signals using time-series analysis and unsupervised machine learning.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*AWrLet-tCxztsyQ4" /><figcaption><a href="https://unsplash.com/@lukechesser?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Luke Chesser</a> on Unsplash</figcaption></figure><p>Understanding the preferences of Financial Times readers is crucial for improving user experience and maintaining engagement with our products. Having accurate indicators showing which area is increasingly important can augment journalists’ work, by helping them to focus on topics of interest.</p><p>Trending topics prediction is a data science model built using machine learning and time-series analysis. We define article topics by an unsupervised machine learning algorithm and use time-series analysis to flag anomalies in data.</p><h3>1. How can we help journalists write more relevant stories</h3><h4>Introduction</h4><p>Over time, different topics arise reflecting the changing interests in society. The streams of data we have available across the FT contain rich information and immediate feedback about what people currently pay attention to and how they feel about certain topics. Such trending topics can be associated with a subject and experience sudden increases in user popularity (“trending”). They usually correspond to real world events such as health events, incidents and political movements. Awareness of trending topics enables the newsroom to anticipate changing information needs of users ahead of time and make decisions around where to allocate resources.</p><h4>Data</h4><p>A time-series is a series of data-points observed over time. We define ‘signal’ as any deviation from the historical time-series pattern. To detect time-series signals, we use various in-house data sets. The biggest benefit of an in-house data set is that it is easily accessible, marginal costs are small, the data set is clean, and entries include high-quality information about our users’ activity.</p><p>The main drawback of using an in-house data set is that it does not include external signals about wider reading trends. We are not going to use search engine/social media trending insights. For instance, we won’t use information about what’s popular on Twitter, or Facebook.</p><p>Another drawback is that using external data sets for signal detection is widely discussed in finance literature, where companies use social media traffic to track trends, and Natural Language Processing (NLP) to determine sentiment concerning a given topic and to try to forecast stock market movements. With in-house data we don’t have this body of work to help us.</p><p>Overall, however, we believe that predicting trends using in-house data will still help us to retain existing users, as Editorial will have the information to invest in stories more relevant to user preferences.</p><h3>2. Model overview</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/712/0*AHwcnHZbENr0_1uk" /><figcaption><strong>Figure 1: Trending topics model run</strong></figcaption></figure><p>The main model run as shown in <strong>figure 1</strong> can be summarised in 5 steps</p><ol><li>Gather features.</li><li>Get assignment of articles to topic groups defined by unsupervised machine learning and NLP.</li><li>Collect features into 2 data sets, one on the day level, another on the day/topic cluster level.</li><li>Derive Bollinger Bands, detect M/L shape signals, flag these signals.</li><li>Surface data to stakeholders using Slack. Write signals data to Big Query.</li></ol><p>The model scans through thousands of data points every day. We gather referrer pageviews from various social media platforms, search engines, new subscriptions, people who interact with the comment sections, and many more. We also break down some of this traffic by topic groups that were derived using unsupervised machine learning and NLP.</p><p>The model then seeks for an M shape, or inverted L shape signals in the time-series. These shapes are derived based on exponential moving-average and confidence intervals, to identify consistent outliers — we call these outliers ‘signals’.</p><p>Once the signal is identified for a given data set, we flag it and surface it to stakeholders in the form of graphs and text. The model doesn’t make any direct suggestions. It simply automates the signal detection and flags these signals to stakeholders. Journalists then may check the graph, decide if the signal is relevant, and investigate the story manually.</p><h3>3. Initial analysis and backtesting</h3><p>The project has been created in collaboration between the Data Science and Insights Team. The Insights Team first researched the sources of possible signals and backtested the model based on a simple moving average. Then they backtested the model on events such as George Floyd’s murder, COVID-19 waves, US Elections, and the UK Budget. This allowed to limit the total number of data sources, eliminated redundant signals, and checked the sensitivity of the signal.</p><p>During backtesting, Insights looked at daily pageviews (PVs) from multiple sources and checked to what extent the moving average was exceeded during relevant periods before the event.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*vaZ3GxSMLeIHFaYK" /><figcaption><strong>Figure 2: Backtesting simple moving-average model</strong></figcaption></figure><p><strong>Figure 2</strong> shows the anonymous PVs (red solid line) against PVs moving average (dotted line). The Insights Team looked at the instances where the solid line exceeded the dotted line. If that happened several times in a row, we interpreted that as a signal. We also looked at days without any breaking news — especially weekends and public holidays — to determine the sensitivity of this approach: we wanted to avoid false positives. A model that surfaced a large number of false-positive signals to our stakeholders would lose their trust, and could simply end up being ignored. We discovered that sometimes we pick-up signals from low-volume data. Hence, we introduced volume filters to filter-out small data sets.</p><h3>4. Time series algorithm</h3><p>The Insights Team performed backtesting and threshold analysis manually. We didn’t begin with a metric to measure success or a threshold at which we should classify a result as a signal or dismiss it as a false positive. Insights’s analysis helped us to narrow-down useful data sets, check the sensitivity of data sources, as well as validate our choice of moving averages as a benchmark.</p><p>Before we fed variables into our model, we conducted a time series correlation analysis to remove collinear data sets. We made sure that the time-series is stationary, meaning the progression of time is not a confounding variable, which was quite easy given we analysed short time intervals. We then checked cross-correlations using a heat-map and used our domain knowledge to eliminate redundant variables.</p><p>The next step was deciding how to count signals. We decided to use exponential moving average and confidence intervals. This methodology is widely used in algorithmic trading, where signals are detected once the value falls outside pre-defined moving average confidence intervals. The confidence intervals are called Bollinger Bands (Bollinger, John. <em>Bollinger on Bollinger Bands</em>. McGraw Hill, 2002). A Bollinger Band is defined as a line above and below the exponential moving average of the given time-series. It tells us the degree of certainty that a given value will fall between, or outside these bands. For instance, if we have drawn Bollinger Bands with a parameter of 2 standard deviations from the simple 5-day moving average, it means that we would expect 95% of our data to fall within these bands (given our data is normally distributed).</p><p>Using Bollinger Bands (rather than percentage deviation) reduced the number of arbitrary choices and helped us to mitigate the danger that initial sensitivity analysis performed by the Insights team may become irrelevant.</p><p>Once we drew Bollinger Bands, we identified cases where the daily value of a given data set exceeded the upper band. We looked at the most recent 3 days, and if the sum of signals was either 2 (for M shape signal), or 3 (for inverted L shape signal), we flagged this data set and surfaced it to our stakeholders.</p><p>We decided on M/L shape signals to reduce the number of false positives. Having 2, or 3 signals within 3-day windows gives us more certainty that there is some unusual traffic. It is also in-line with financial theory, where <a href="https://en.wikipedia.org/wiki/Double_top_and_double_bottom">M shape signals are quite common due to human psychology</a> . We adjusted parameters and data for our model by backtesting the model variations through historical events.</p><h3>5. Productionizing data science model</h3><p>Our trending topics model relies on 2 jobs deployed on the server:</p><ol><li>API article vectorization and article-cluster assignment for topic modeling (AWS Lambda).</li><li>Batch deployment of the main model run which gathers data and detects signals (RStudio Connect).</li></ol><h4>API deployment</h4><p>We use a task scheduler called AWS Lambda for near real-time article vectorization. This task scheduler transforms article texts into column vectors. It also assigns newly published articles to topic clusters. If you want to know more about how we approached topic clustering, we have described architecture and infrastructure in <a href="https://medium.com/ft-product-technology/ft-article-clustering-ffce1e8e32d0">our previous article</a>.</p><h4>Batch deployment</h4><p>The main model run is deployed using R Markdown notebook and R Studio Connect server. The batch job gathers data from the past 3 weeks, computes Bollinger Bands based on moving average, and sends these signals through the Slack API.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/655/1*mMdoV0XErA1Y51CxueAvYg.png" /><figcaption><strong>Figure 3: Monitoring dashboard of a model deployed on the server</strong></figcaption></figure><p>Our team has written an R library to send clean messages and graphs to our stakeholders in Slack<strong> </strong>directly from the job deployed on the server.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/410/1*hPVeBYmfiEbAVOFCz_biiA.png" /><figcaption><strong>Figure 4: Notifications bot on the Slack channel</strong></figcaption></figure><h3>6. Summary and next steps</h3><p>The scheduled model will scan through 1000s of data points every day. Using an unsupervised machine learning algorithm ensures that we surface hard to spot and unique data points to the stakeholders. Then, Bollinger Bands are generalisable enough to account for the volatility of each time-series, at the same time giving us the flexibility to choose how often and how strong signals should be.</p><p>This model is the first step for predicting trending topics. There is a lot of scope for adding extensions. In the future, we may derive a more complex model, which will include external data such as tweets and Google trends. Once we collect more historical data, we may also use them to forecast trending topics using data science techniques such as ARIMA models, regression, or Long-Short-Term Memory models (LSTMs).</p><p><em>Integrated Data Science (IDS) team</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7eda85ece727" width="1" height="1" alt=""><hr><p><a href="https://medium.com/ft-product-technology/predicting-ft-trending-topics-7eda85ece727">Predicting FT Trending Topics</a> was originally published in <a href="https://medium.com/ft-product-technology">FT Product &amp; Technology</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[FT Article Clustering]]></title>
            <link>https://medium.com/ft-product-technology/ft-article-clustering-ffce1e8e32d0?source=rss-ca8e382fc78a------2</link>
            <guid isPermaLink="false">https://medium.com/p/ffce1e8e32d0</guid>
            <category><![CDATA[nlp]]></category>
            <category><![CDATA[financial-times]]></category>
            <category><![CDATA[unsupervised-learning]]></category>
            <category><![CDATA[data-science]]></category>
            <dc:creator><![CDATA[Adam Gajtkowski]]></dc:creator>
            <pubDate>Tue, 09 Feb 2021 13:56:53 GMT</pubDate>
            <atom:updated>2021-02-10T20:58:07.850Z</atom:updated>
            <content:encoded><![CDATA[<p>Using unsupervised machine learning to label FT articles</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*e5Vf07_3j_IfELV2mhiDRg.jpeg" /><figcaption>Photo by <a href="https://unsplash.com/@pietrozj?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Pietro Jeng</a> on <a href="https://unsplash.com/s/photos/data?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></figcaption></figure><h3>Why article clustering is important</h3><p>FT is one of the largest providers of financial news in the world. We publish hundreds of articles every day. One of the most challenging tasks is consistently categorising these articles.</p><p>While FT journalists tag the articles manually, it is hard to ensure that similar articles will have the same tag. Having consistent labels attached to articles is very important when we want to use them for machine learning models and analysis of customer reading trends.</p><h3>Labeling problem</h3><p>To make these classifications, the only data available to us is article text. We do not have a fixed set of labels indicating how articles should be classified.</p><p>Even if we were to label these articles manually, new tags emerge organically over time. A story such as the Coronavirus pandemic may begin as a health concern and mutate into a geopolitical topic. It would be time consuming to manually prepare the training data set, train it every time new trends emerge, monitor reading trends, and add relevant new labels.</p><h3>Solutions</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/512/1*DWtwjaGpOrj1jTfezk7tOw.png" /><figcaption>Figure 1: Dendrogram of hierarchical clustering</figcaption></figure><p>We decided to use unsupervised machine learning to resolve the above issues. The idea was to allow a model to find similarities between stories that may be difficult or impossible for a human to identify, and to assign articles into groups that will be useful for both Editorial and Data Analytics.</p><p>Before we started experimenting with different methods, we set the following criteria for success:</p><ul><li>Clusters are labeled in a consistent manner</li><li>New trends can be captured by the labeling algorithm</li><li>There is little/no delay between cluster publication and labeling</li><li>There is some control over how clusters are labeled</li></ul><p>We experimented with many approaches, such as keyword extraction, topic modeling, and vector representation. After considering the pros and cons and analysing our results, we decided to label articles by first representing each article as a column vector with 30 elements and based on that, group articles for which vectors are close to one another.</p><p>Both of these steps are based on unsupervised machine learning. Using this type of machine learning means that it’s hard to assess the quality of models with standard metrics such as confusion matrices. Therefore, at each step, we performed a qualitative analysis of results to make sure that we used the correct methodology and hyperparameters.</p><h3>Representing article as a vector</h3><p>As the only input to our model is article text, we needed to find a way to group it into similar content. Clustering algorithms require numerical inputs. We have decided to use paragraph vectorization to represent each article as a column vector.</p><p>We treat each article as a separate data point and train the algorithm on the set of historical FT articles.</p><p>To vectorise articles, we used the document embedding generator doc2vec proposed by Le and Mikolov (2014). In particular, we use the Distributed Memory version of the Paragraph Vector (PV-DM) version of the model. Put simply, this algorithm transforms the vectorisation problem into a classification problem. It samples a word from a sentence, treats the sampled word as a predicted variable, and nearby sampled words as predictors.</p><p>We have tuned the following hyperparameters: type of algorithm, vector size, number of epochs, and minimum number of words within each article. We tested the model performance by assessing the number of keywords shared by nearest neighbour articles, with nearest neighbours determined by shortest euclidean distance between vectors. Accuracy was calculated through both shared keyword analysis and manual spot-checking and calculated at 80%.</p><p>API deployment</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/512/1*s-zwQrFU9Le1QrFMHwy-Fg.png" /><figcaption>Figure 2: Article vectorisation pipeline</figcaption></figure><p>The trained doc2vec model is placed in an AWS S3 bucket. We vectorize newly published articles using an AWS Lambda. Once the new article is published, we get a notification through a notifications API, which triggers doc2vec execution. We obtain article text using Enrichment Content API and get the latest model from the AWS bucket. The AWS Lambda includes a Python script, which uses the trained model and article text, vectorises the article, and loads it to the BigQuery table for further analysis.</p><h3>Finding groups of similar articles</h3><p>Initial clustering</p><p>We perform initial clustering based on the vectorised articles, using top-down hierarchical clustering. We compared different types of clustering algorithms, such as k-means, hierarchical, hybrid, density clustering, as well as tuning hyperparameters for each. We decided to use hierarchical top-down clustering which performed best in categories such as connectivity, Dunn, Silhouette statistics, and qualitative validation of clusters.</p><p>Continuous updates</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*QBUL-3rOgpvUYtesWES3BQ.png" /><figcaption>Figure 3: Flowchart of cluster updates</figcaption></figure><p>The next step was to find a way to continuously update clusters. As the content of articles changes over time, new clusters should be created, and old clusters can become either irrelevant or change their content.</p><p>We used the following algorithm to detect new trends/update existing clusters (Figure 3)</p><ol><li>Find articles that are outliers to existing clusters</li><li>Create new clusters from outliers using hierarchical clustering. Determine the number of clusters based on the height cut-off point of the dendrogram</li></ol><p>This approach seemed the most intuitive, as we used a similar methodology for initial clustering. The only difference is determining the number of clusters. Initially, we have to determine a fixed number of clusters recommended by stakeholders. For updates, we decided to use height, which we determined by parameter tuning during back-testing and distance distribution analysis.</p><p>We also experimented with updates of the existing cluster by</p><ul><li>Running k-means reclustering, where we initialized centroids with the past centroids</li><li>Re-computing cluster centroids with newly added articles</li></ul><p>When validating results and tuning parameters, we were not able to find a version that meets our requirements of clusters stability and consistency over time. Hence, we decided to keep the column vectors of old clusters fixed and only add new clusters that are outliers.</p><h3>Does it work?</h3><p>We have been continuously validating and backtesting our model at each stage of development. However, it does not ensure final success. Our final test was checking if the clusters react as expected to given news events. For instance, did most of the articles with COVID-19 tags made by journalists end up being in a reasonable cluster?</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*RRzfs2u-fHqgj4A2k6X9gg.png" /><figcaption>Figure 4: Share articles with COVID-19 tag by article clusters</figcaption></figure><p>Figure 4 shows the proportion of articles with COVID-19 tags published within the first wave of the pandemic. We found that clusters related to health and trade are the clusters with the highest proportion of COVID-19 articles. This looks reasonable, given that the FT has mostly financial focus. We repeated this exercise for other big events and tags, which validated our clusters.</p><h3>Quality monitoring</h3><p>A very important element of all data science models are bots that monitor if jobs are running correctly, check the quality of outputs, and notify developers/stakeholders if there’s something unusual.</p><p>We set up three notifications for our article clustering bot</p><ol><li>Check if new clusters have been added</li><li>Check the quality of clusters</li><li>Check that job is running on schedule</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*gIY3SEcJr1XwdqsltMU7Ng.png" /><figcaption>Figure 5: Cluster notification bot</figcaption></figure><p>We set-up a separate slack channel that notifies our Editorial stakeholders if new clusters have been created (Figure 5). In that case, our stakeholders are prompted to go to the relevant tool, check cluster content and use it to update cluster names. Stakeholders use their judgment for naming clusters, which is augmented by automated suggested labels that are created using NLP techniques.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*45D5ODTktky0Yipy4cI0uw.png" /><figcaption>Figure 6: Cluster quality monitoring dashboard</figcaption></figure><p>Another monitoring point is the cluster quality monitoring dashboard (Figure 6). It checks the number of overlapping words between cluster labels and articles within the cluster, summary statistics of the goodness of clusters such as average Euclidean distance between centroids, and the stability of cluster vectors over time. If any of these statistics differ from their expected outputs, the data science team gets a notification in the slack channel and one of our team members goes and investigates the issue.</p><p><strong>Integrated Data Science, FT Product &amp; Tech</strong></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ffce1e8e32d0" width="1" height="1" alt=""><hr><p><a href="https://medium.com/ft-product-technology/ft-article-clustering-ffce1e8e32d0">FT Article Clustering</a> was originally published in <a href="https://medium.com/ft-product-technology">FT Product &amp; Technology</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Implementing a Trading Algorithm with R]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/data-science/implementing-a-trading-algorithm-with-r-315a175538bd?source=rss-ca8e382fc78a------2"><img src="https://cdn-images-1.medium.com/max/2600/1*NHSuUIWAF95oZhFBvF_IKQ.jpeg" width="4032"></a></p><p class="medium-feed-snippet">This story explains how to implement the moving average trading algorithm with R. If you&#x2019;re interested in setting up your automated&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/data-science/implementing-a-trading-algorithm-with-r-315a175538bd?source=rss-ca8e382fc78a------2">Continue reading on TDS Archive »</a></p></div>]]></description>
            <link>https://medium.com/data-science/implementing-a-trading-algorithm-with-r-315a175538bd?source=rss-ca8e382fc78a------2</link>
            <guid isPermaLink="false">https://medium.com/p/315a175538bd</guid>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[statistics]]></category>
            <category><![CDATA[algorithmic-trading]]></category>
            <category><![CDATA[trading]]></category>
            <category><![CDATA[data-science]]></category>
            <dc:creator><![CDATA[Adam Gajtkowski]]></dc:creator>
            <pubDate>Mon, 08 Jun 2020 16:18:07 GMT</pubDate>
            <atom:updated>2020-09-16T23:19:01.619Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Automated Stock Trading with R]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/data-science/automated-stock-trading-with-r-part-1-5a1020831096?source=rss-ca8e382fc78a------2"><img src="https://cdn-images-1.medium.com/max/2600/1*4w0C9YbEkMeelCuYFnMBhw.jpeg" width="6000"></a></p><p class="medium-feed-snippet">This article describes how to create a stock trading pipeline with R and Robinhood API.</p><p class="medium-feed-link"><a href="https://medium.com/data-science/automated-stock-trading-with-r-part-1-5a1020831096?source=rss-ca8e382fc78a------2">Continue reading on TDS Archive »</a></p></div>]]></description>
            <link>https://medium.com/data-science/automated-stock-trading-with-r-part-1-5a1020831096?source=rss-ca8e382fc78a------2</link>
            <guid isPermaLink="false">https://medium.com/p/5a1020831096</guid>
            <category><![CDATA[trading]]></category>
            <category><![CDATA[robinhood-app]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[data-science]]></category>
            <category><![CDATA[stock-market]]></category>
            <dc:creator><![CDATA[Adam Gajtkowski]]></dc:creator>
            <pubDate>Sun, 31 May 2020 13:31:44 GMT</pubDate>
            <atom:updated>2020-09-22T17:01:26.386Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Writing Professsional Data Science Documentation]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/data-science/writing-professsional-data-science-documentation-1141737836fa?source=rss-ca8e382fc78a------2"><img src="https://cdn-images-1.medium.com/max/2600/1*orfZwCGX_tV7x2rVlhq9ZA.jpeg" width="7465"></a></p><p class="medium-feed-snippet">Powering-up R Markdown with LaTeX can help you to professionaly document technical details about your data science models.</p><p class="medium-feed-link"><a href="https://medium.com/data-science/writing-professsional-data-science-documentation-1141737836fa?source=rss-ca8e382fc78a------2">Continue reading on TDS Archive »</a></p></div>]]></description>
            <link>https://medium.com/data-science/writing-professsional-data-science-documentation-1141737836fa?source=rss-ca8e382fc78a------2</link>
            <guid isPermaLink="false">https://medium.com/p/1141737836fa</guid>
            <category><![CDATA[r-markdown]]></category>
            <category><![CDATA[technical-documentation]]></category>
            <category><![CDATA[data-science]]></category>
            <category><![CDATA[documentation]]></category>
            <category><![CDATA[latex]]></category>
            <dc:creator><![CDATA[Adam Gajtkowski]]></dc:creator>
            <pubDate>Mon, 25 May 2020 13:37:52 GMT</pubDate>
            <atom:updated>2020-05-25T15:46:40.979Z</atom:updated>
        </item>
    </channel>
</rss>