<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>A News Recommender Engine with a Killer Sequence</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Pieter Bons</string-name>
          <email>pieter.bons@ortec.com</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Nick Evans</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Peter Kampstra</string-name>
          <email>peter.kampstra@ortec.com</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Timo van Kessel</string-name>
          <email>timo.vankessel@ortec.com</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>ORTEC - Houtsingel 5</institution>
          ,
          <addr-line>2719 EA Zoetermeer</addr-line>
          ,
          <country country="NL">The Netherlands</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>Our submission to the CLEF NewsREEL 2107 News Recommendation Evaluation Lab attempts to apply the concept of storytelling to the participating news domains. The goal is to guide the user through a series of related articles where each transition from one article to the next provides an opportunity to steer the storyline in a certain direction using recommendations. The approach employs collaborative filtering to discover an optimal sequence of articles - a killer sequence. The choices that were made by users reading two or more successive articles were stored in the graph database Neo4J. The recommendations were generated by querying this database for the most popular historic sequences containing the concerning article. For articles that were not yet part of any sequence we generated the recommendations from a dynamic set of the most recently changed publications for that domain. The performance of our combined algorithm was approximately 79% better for Click Through Rate (CTR) than the competition baseline. We investigated whether this top performance was due to unwanted behavior of the recommender, such as only answering on certain domains or times, but could not conclude that this was the case.</p>
      </abstract>
      <kwd-group>
        <kwd>Recommender Systems</kwd>
        <kwd>News Recommender Engine</kwd>
        <kwd>Graph Database</kwd>
        <kwd>Sequence</kwd>
        <kwd>Evaluation</kwd>
        <kwd>Collaborative filtering</kwd>
        <kwd>Real-time recommendations</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>The holy grail for (online) publishers is reader engagement. The more engaging the
user's experience, the more likely that they will come back, increasing their loyalty to
the domain during each visit until they may even become brand ambassadors. Once
the consumer has crossed the barrier to enter the domain, the goal is to keep him there
as long as possible. One of the important strategies to achieve this is storytelling. On
the content side this requires rich and interactive media to retain the reader's attention.
This can be reinforced by artificial intelligence and automation tools providing
relevant personalized content to individual readers.</p>
      <p>Many types of algorithms could be considered for this job. However, traditional
news recommendation algorithms rarely consider the time sequence characteristic of
user browsing behaviors. Also, using strategies from other domains such as movies or
music offers no solution as in these cases the order in which items are consumed is
hardly relevant, while this is crucial for news articles which are much less
independent from each other. Text mining may be employed to classify the articles into topics
or to calculate similarities but this approach is also symmetric under the order in
which articles are read.</p>
      <p>To tackle this subtle issue, we have chosen to go with a collaborative filtering
approach where the wisdom of the crowds will provide the information in which order
the articles are best presented. The collective behavior of the users will uncover
dominant sequences of articles that together form a powerful story. This sequence can
then be suggested to new users via the recommendations causing them to stay more
engaged and consume more content from the domain.</p>
      <p>
        There is some related work which uses the timestamps of user-item interaction
events [
        <xref ref-type="bibr" rid="ref11">11, 13</xref>
        ]. We have not based our work specifically on these papers but followed
a pragmatic approach based on our experience in the online news industry.
2
      </p>
    </sec>
    <sec id="sec-2">
      <title>Approach</title>
      <p>
        The Living Lab Evaluation [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] was performed using the open recommendation
platform (ORP) provided by plista. By redirecting some of the live traffic, the ORP
allows participants to test algorithms in a real environment. There are four types of
events that are sent from ORP: Recommendation requests, Impressions, Item Updates,
and Error Messages (such as timeout).
      </p>
      <p>
        Our infrastructure choices were dictated by two main requirements: 1) the system
should answer recommendation requests as fast as possible, and 2) the system should
be extensible and support many different algorithms running in parallel. In order to
satisfy both these requirements it was necessary to decouple the processing of
recommendation requests from the processing of impressions, clicks and item updates.
We settled on Apache Kafka [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] to implement this decoupling. As can be seen in
      </p>
    </sec>
    <sec id="sec-3">
      <title>Errore. L'origine riferimento non è stata trovata. all requests are first</title>
      <p>
        processed by a Node.js [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] server. All requests are stored in MongoDB [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] for
tracking and debugging. If the request is a recommendation request, the recommendations
are gathered and returned. If the request is an impression, a click or an item update,
the request is published to a Kafka topic. The recommendation algorithms can
subscribe to this topic and process the necessary information as it becomes available.
This decoupling ensures that the time to answer a recommendation request is not
affected by the number or nature of the recommendation algorithms. We found that a
single Node.js process was enough to adequately handle all the recommendation
requests (note that Node.js processes are always single threaded).
      </p>
      <p>The setup we used for this contest relied only on two recommendation algorithms:
most recent (the baseline) and killer sequence. Recommendations were taken from
killer sequence if available and otherwise from most recent. In the future, once more
recommendation algorithms have been implemented, we would like to experiment
with a meta-algorithm for selecting the algorithm from which recommendations
should be used for a particular request. Therefore, our infrastructure already takes
multiple algorithms into account.
2.1</p>
      <sec id="sec-3-1">
        <title>Killer sequence algorithm</title>
        <p>
          For each new item update event an article node is generated in the Neo4J graph
database [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ]. A flag is also set to indicate whether the article is available for
recommendations. This flag can be altered by later item updates with the same id.
        </p>
        <p>
          Based on the impression events we keep track of user sessions. When an
impression event is received, a new session is created containing the user ID and the article
ID in the REDIS [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ] database with an expiration time of 60 seconds. When a second
impression with the same id is handled within these 60 seconds, the session is updated
with the new article ID and a relation is set in Neo4J between the first and the second
article nodes signifying that these two articles were read in this specific order by the
user. The sequence can grow to as many articles as the user consumes as long as there
is less than 60 seconds between the events so the session does not expire.
        </p>
        <p>The replies to the recommendation requests are generated by querying the Neo4J
graph database for the strongest sequence containing the concerning article. The top X
results are returned and the ID's are sent to the ORP. We employ a breadth-first search
of only one layer deep because it could be undesirable to skip an article in the
sequence that forms a news story. To make the recommendation more personalized, we
would like to incorporate the historical sequence of a user into the search but in the
current implementation this information is no longer available since the we store the
sum of all interactions and not the individual actions.</p>
        <p>When the graph query does not return any recommendations because the article is
not yet part of a sequence, a fallback recommendation is used randomly taken from a
dynamic set of the most recently changed articles per domain, as implemented in the
example code provided for the challenge.</p>
        <p>The expiration time of 60 seconds was chosen arbitrarily and we expect that
optimizing it will improve the performance of the algorithm.
3</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Results and analysis</title>
      <p>By participating in the CLEF NewsREEL 2107 Task 1 we were able to test our
algorithm in a real-life environment and compare our algorithm to other algorithms.
Originally, multiple test periods were planned and a single evaluation period was available
at the end. However, due to technical issues on both sides, given by corporate
environments, we started straight into the final evaluation period.</p>
      <p>
        In Table 1 we show the overall results of CLEF NewsREEL 2107 Task 1. Our
algorithm is ORLY_KS and is shown in bold, while the baseline algorithm is shown as
BL2Beat. Our algorithm performs 79% better than the baseline, and scores the highest
CTR of all algorithms with more than 1000 widget impressions. Overall, the CTRs
are higher than during CLEF NewsREEL 2016, where the highest CTR reported was
1.23% [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]. One recommendation widget could contain multiple items, with the
numbers of items not always being the same. Only one recommendation item per page
could be clicked for a refresh to trigger, hence the CTR for items is always lower than
for widgets. Because the item/widget ratio for our recommender is the lowest of all
recommenders, the per item CTR is even slightly higher being 82% better than the
baseline. However, the amount of widgets impressions for our recommender is quite a
bit lower than the baseline and some other algorithms.
      </p>
      <p>
        From previous years of CLEF NewsREEL (e.g. [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]) it is known that CTR ratios
can differ hugely between different times and different domains. Therefore,
answering a selective number of recommendation requests or having a different sampling of
the available requests could make the CTR ratios incomparable. We will therefore
focus our analysis on finding out if we inadvertently achieved a high CTR by
answering selectively.
One of the properties of a good real-time news recommendation system is having a
fast response time, preferably within 100 milliseconds. Also, since the ORP might
drop recommendations after 100 ms, we decided to log the performance of our
response times. The results are shown on a density plot in Fig. 3. In 99.9% of the cases
Widgets
shown
we responded within 90 milliseconds, and on average we responded in 7 milliseconds.
Given that our recommender was located at the same hosting provider (Hetzner
Online GmbH), 10 milliseconds is more than enough for transfer times. Therefore it is
very unlikely that response time problems played a role in having less widget
recommendations.
      </p>
      <p>average response time (ms)
ORP provided us with an API to query the weekly results during the contest. The
results are shown in Table 2. While our error ratios (in bold) for both weeks are
higher than most recommenders, other recommenders like RIADI_nehyb have even higher
error ratios but are able to produce more impressions.</p>
      <p>The most likely explanation for the connection problems was that our corporate
policy asked for a firewall of the TCP port in case an insecure connection was used.
As the connection was insecure, the port was firewalled and whitelisted only certain
IP addresses. However, in week 1 certain IP addresses were not whitelisted, while in
the second week servers were added by plista, which were whitelisted only after a
small delay.</p>
      <p>In Table 3 we show the error notifications received by our server. The amount of
content errors received exactly matches with 1415 instances. Probably, these content
errors were caused by a deploy on 2017-06-28. Strangely, connection errors also seem
to match somewhat, while it is usually impossible for a server to communicate such
an error in case of a firewall blocking the connection. The number of timeouts errors
is negligible.</p>
      <p>Overall, the number of errors is still quite low and does not prevent other
recommenders from achieving high numbers of impressions. Also, the errors are not only
related to recommendation requests, but also to other requests. We therefore assume
that the impact from these errors was quite low.</p>
      <sec id="sec-4-1">
        <title>Returning the wrong (number of) recommendations</title>
        <p>A possible cause for not having the lowest number of recommendation items per
widget is that our recommender simply does not return enough recommendations. As
we stored almost all recommendations our recommender did in MongoDB, it was
possible to investigate these. We also record which algorithm did the
recommendation. In Table 4 the results of this analysis are shown. It is clearly visible that
something went wrong during a deploy with a re-implementation of the baseline
recommender (Most recent) in Redis. The idea of this re-implementation was to be able to
restart the recommender without losing state, however it contained an off-by-one
error. Therefore, it usually returned a recommendation more than requested.</p>
        <p>We however expect that returning one recommendation too many is not a huge
problem, as ORP usually requests more recommendations than it needs anyway. Most
likely the extra recommendation was simply ignored.</p>
        <p>It is also shown that our killer sequence recommender more frequently gives less
recommendation than requested. In some cases it handed out 0 recommendations
which was fixed later on and probably explains the difference between outgoing and
incoming recommendations. In case both recommenders cannot obtain a result, no
result was returned. In case the killer sequence recommender had fewer than
requested recommendations, we did not add results from the baseline recommender. This
might explain why our algorithm had the lowest item/widget ratio.</p>
        <p>In case an article is received from ORP it also contains a flag indication whether
this article is recommendable. Articles with a flag other than 0 are not considered
recommendable, however the baseline implementation ignores this flag when
recommending, in both the Java and Node.js versions of the example code supplied by the
organization. Also it does not check whether it recommends the same article multiple
times.</p>
        <p>In Table 5 we show an analysis of whether a recommendation contains an
unrecommendable article or a duplicated recommendation. Especially the baseline
recommender almost always does this. This is no surprise, as it does not check the
commendable flag and returns from a set of recently updated articles. Out of 698340
received article updates, 460743 (66%) contain an non-recommendable article. If
selecting 6 or 7 from these updates the probability of getting a non-recommendable article
is quite high. Also, it is likely that the same article is updated multiple times within a
short period, resulting in duplicate recommendations in 22% of the cases.</p>
        <p>While our killer sequence never returned duplicates, it also failed to check the
status flag which we did store in Neo4J. Therefore, it did return non-recommendable
articles in 23% of the cases.</p>
        <p>All in all there is a huge room for improvement in returning valid recommendation
results. However, given that the baseline recommender makes the same mistakes a lot
of the time, we do not believe this is the cause for having less widget impressions.
The above analysis did not yield a conclusive result into the cause of having fewer
impressions. Also, some recommenders in Table 1 do significantly more impressions
than the baseline recommender does. We therefore assume that the variation of
impressions between different recommenders is probably also the result of some
nonrandom preference within the ORP platform.
4</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Discussion</title>
      <p>Currently the killer sequence algorithm behaves the same for every user. Given that
not all users will have the same preferences, it is probably beneficial to personalize
the algorithm towards certain user behavioral patterns. For example, instead of giving
all follow relations the same weight, it is likely beneficial to give follow relations of
similar users a higher weight. This would of course require a metric of similarity
between users or a grouping of the users, where relations from the same user group are
given more weight for the current user. We expect that a personalized version of the
killer sequence will increase the performance.</p>
      <p>It is also likely that trends are not static over time. Currently we do not take into
account temporal trends in the data, but it is likely that it would be better to take the
time when paths occurred into account. For example, it would be possible to use a
decay function which gives less weight to paths that have taken place a long time ago.</p>
      <p>
        In many machine learning problems, an ensemble multiple algorithms performs
better than a single algorithm [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]. Our infrastructure already takes into account the
possibility of using an ensemble of algorithms and using a meta-algorithm, however
currently it uses just two algorithms and a very simple meta-algorithm. This of course
offers many possibilities for using a better ensemble.
      </p>
      <p>
        Due to the test setup, it was unfortunately impossible to track which sub-algorithm
leaded to which results. In the world of Real Time Bidding [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ], it is commonplace to
have a unique identifier for a certain impression, which is used throughout the whole
interaction, for example also when an impression is clicked. In this case it would have
been quite beneficial for the evaluation to have both a unique identifier, and the
recommender used to give the impression as attributes in the protocol. As this was not
the case, we can only estimate the performance of the Killer Sequence sub-algorithm.
Fortunately our algorithm did not require a direct feedback loop of how well the
recommendations where doing, as such would have been impossible. Debugging and
click attribution would be greatly improved if a future version of the ORP supported
attributes for unique identifiers.
5
      </p>
    </sec>
    <sec id="sec-6">
      <title>Conclusion</title>
      <p>The CLEF NewsREEL 2107 Task 1 provided a unique opportunity to test our killer
sequence recommender in a real-life situation, and compare the results with other
recommenders. It turned out that our killer sequence recommender performed 79%
better than the baseline recommender. This resulted in the top position among the
recommenders with more than 1000 recommendations. That could have been caused
due to bad behavior, such as only answering requests only for certain high CTR
domains or times. We investigated whether this higher than expected performance was
due to unwanted behavior of the recommender, but could not conclude that this was
the case. Therefore, it appears that our algorithm performs very well in the test
environment.</p>
      <p>There are still many ideas left for improvement of the results. A future version of
the recommender should avoid non-recommendable articles, duplicate articles within
the recommendation, or returning fewer results than needed. Also, personalization of
the killer sequence recommender and ensemble recommendation is expected to yield
better results.
13. Zhou, B., Hui, S. C., &amp; Chang, K.: An intelligent recommender system using sequential
web access patterns. In: Cybernetics and Intelligent Systems, 2004 IEEE Conference on,
Vol. 1, pp. 393-398, IEEE (2004).</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <given-names>Apache</given-names>
            <surname>Kafka</surname>
          </string-name>
          , https://kafka.apache.org/,
          <source>last accesed</source>
          <year>2017</year>
          /06/01.
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Azzopardi</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          , &amp;
          <string-name>
            <surname>Balog</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          :
          <article-title>Towards a living lab for information retrieval research and development</article-title>
          .
          <source>In: International Conference of the Cross-Language Evaluation Forum for European Languages</source>
          , pp.
          <fpage>26</fpage>
          -
          <lpage>37</lpage>
          . Springer, Heidelberg (
          <year>2011</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Banker</surname>
            ,
            <given-names>K</given-names>
          </string-name>
          ,:
          <article-title>MongoDB in action</article-title>
          .
          <source>Manning Publications Co</source>
          .
          <article-title>(</article-title>
          <year>2011</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Carlson</surname>
            ,
            <given-names>J. L.</given-names>
          </string-name>
          : Redis in Action. Manning Publications Co.
          <article-title>(</article-title>
          <year>2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Corsini</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Larson</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>CLEF</surname>
          </string-name>
          <article-title>NewsREEL 2016: Image based Recommendation</article-title>
          . In: Working Notes of CLEF 2016 -
          <article-title>Conference and Labs of the Evaluation forum</article-title>
          , Évora, Portugal,
          <fpage>5</fpage>
          -
          <lpage>8</lpage>
          September,
          <year>2016</year>
          , pp.
          <fpage>618</fpage>
          -
          <lpage>827</lpage>
          (
          <year>2016</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Dietterich</surname>
          </string-name>
          , T. G.:
          <article-title>Ensemble methods in machine learning</article-title>
          .
          <source>In: International workshop on multiple classifier systems</source>
          , pp.
          <fpage>1</fpage>
          -
          <lpage>15</lpage>
          , Springer, Heidelberg (
          <year>2000</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Kille</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lommatzsch</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Gebremeskel</surname>
            ,
            <given-names>G. G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hopfgartner</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Larson</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Seiler</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Malagoli</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Serény</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Brodt</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Vries</surname>
          </string-name>
          , A. P. de: Overview of NewsREEL'16:
          <article-title>Multidimensional Evaluation of Real-Time Stream-Recommendation Algorithms</article-title>
          . In: Experimental IR Meets Multilinguality, Multimodality, and Interaction - 7th
          <source>International Conference of the CLEF Association, CLEF</source>
          <year>2016</year>
          , Évora, Portugal, September 5-
          <issue>8</issue>
          ,
          <year>2016</year>
          , Proceedings, pp.
          <fpage>311</fpage>
          -
          <lpage>331</lpage>
          (
          <year>2016</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Kille</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lommatzsch</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Turrin</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Serény</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Larson</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Brodt</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Seiler</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hopfgartner</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          :
          <article-title>Overview of CLEF newsreel 2015: News recommendation evaluation lab (</article-title>
          <year>2015</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Tilkov</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          , &amp;
          <string-name>
            <surname>Vinoski</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          : Node.
          <article-title>js: Using JavaScript to build high-performance network programs</article-title>
          .
          <source>IEEE Internet Computing</source>
          ,
          <volume>14</volume>
          (
          <issue>6</issue>
          ),
          <fpage>80</fpage>
          -
          <lpage>83</lpage>
          (
          <year>2010</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Webber</surname>
            ,
            <given-names>J.:</given-names>
          </string-name>
          <article-title>A programmatic introduction to neo4j</article-title>
          .
          <source>In: Proceedings of the 3rd annual conference on Systems, programming, and applications: software for humanity</source>
          , pp.
          <fpage>217</fpage>
          -
          <lpage>218</lpage>
          , ACM (
          <year>2012</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Xiang</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Yuan</surname>
            ,
            <given-names>Q.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Zhao</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Chen</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Zhang</surname>
            ,
            <given-names>X.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Yang</surname>
            ,
            <given-names>Q.</given-names>
          </string-name>
          , &amp;
          <string-name>
            <surname>Sun</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          :
          <article-title>Temporal recommendation on graphs via long-and short-term preference fusion</article-title>
          .
          <source>In: Proceedings of the 16th ACM SIGKDD international conference on Knowledge discovery and data mining</source>
          , pp.
          <fpage>723</fpage>
          -
          <lpage>732</lpage>
          , ACM (
          <year>2010</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Yuan</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wang</surname>
            ,
            <given-names>J.,</given-names>
          </string-name>
          &amp;
          <string-name>
            <surname>Zhao</surname>
            ,
            <given-names>X.</given-names>
          </string-name>
          :
          <article-title>Real-time bidding for online advertising: measurement and analysis</article-title>
          .
          <source>In: Proceedings of the Seventh International Workshop on Data Mining for Online Advertising</source>
          , p.
          <fpage>3</fpage>
          .
          <string-name>
            <surname>ACM</surname>
          </string-name>
          (
          <year>2013</year>
          ).
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>