Patent Publication Number: US-10789357-B2

Title: System and method for detecting fraudulent software installation activity

Description:
CROSS-REFERENCE TO RELATED APPLICATIONS 
     This application claims the benefit of U.S. Provisional Patent Application No. 62/566,057, filed Sep. 29, 2017, the entire contents of which are incorporated by reference herein. 
    
    
     BACKGROUND 
     The present disclosure relates generally to anomaly detection and, in certain examples, to systems and methods for detecting and managing software installation fraud associated with digital content presentations on client devices. 
     In general, client devices are capable of presenting a wide variety of content, including images, video, audio, and combinations thereof. Such content can be stored locally on client devices and/or can be sent to the client devices from server computers over a network (e.g., the Internet). To watch an online movie, for example, a user of a client device can download a copy of the movie and/or can stream the movie from a content provider. Online content can be provided to client devices by publishers, such as websites and software applications. 
     Users can interact with content in various ways. A user can, for example, view images, listen to music, or play computer games. With certain online content, a user can select the content or a portion thereof and be directed to a website where further content can be presented or obtained. In some instances, users can download or receive content in the form of software applications. 
     SUMMARY 
     In general, the subject matter of this disclosure relates to detecting and managing anomalies related to user interactions with content presented on client devices. Particular examples relate to detecting and managing software installation fraud, in which content publishers (e.g., websites or software applications) or other system components generate fake or phony software installations on client devices and/or attempt to win credit or attribution for legitimate software installations. In preferred implementations, the systems and methods described herein detect installation fraud using a combination of real-time detection and batch anomaly detection. The real-time detection can involve, for example, monitoring a real-time stream of installation data for a plurality of client devices. When the real-time stream indicates that installations are occurring on low-reputation client devices, an alert can be generated and appropriate action can be taken to prevent further installations on the devices. The low-reputation devices can be, for example, devices that were previously associated with fraudulent installations and/or are listed in a device blacklist. Additionally or alternatively, the batch detection can involve, for example, processing batches of installation data for individual content publishers to look for patterns associated with installation fraud. When such a pattern is discovered, the blacklist can be updated to list any client devices associated with the fraud and/or appropriate action can be taken to stop or prevent additional installation fraud on the device or by a fraudulent publisher. 
     Advantageously, the anomaly detection systems and methods described herein can leverage novel algorithms and/or big data platforms to extract actionable insights and help content users, buyers, publishers, or distributors take action in the event of anomalous or fraudulent installation behavior. The algorithmic-based approach described herein is particularly important and valuable, given a constantly evolving nature of online fraud and a consequent need for anomaly detection processes to be auto-adaptive. More particularly, the examples described herein can include an installation fraud detection architecture that marries the strengths of real-time and batch anomaly detection algorithms. A framework is provided in which two branches of installation fraud detection can work together to surface installation fraud while enabling the anomaly detection system to be timely updated and extensible. 
     Advantageously, the systems and methods described herein can achieve an improved ability to detect and diagnose installation fraud activity. Real-time detection allows installation fraud from low-reputation sources to be identified and stopped quickly. Batch detection can detect a variety of installation fraud patterns and identify any new devices and/or publishers that are engaging in installation fraud. Additionally or alternatively, the use of multiple detection algorithms can greatly improve detection accuracy and efficiency. In general, the approach represents a substantial improvement in the ability of a computer to detect and/or prevent installation fraud and other installation anomalies. 
     In one aspect, the subject matter described in this specification relates to a computer-implemented method. The method includes: obtaining a stream of data including a record of software installations on a plurality of client devices, at least a portion of the software installations having been derived from user exposure to content provided on the client devices by a plurality of publishers; processing the stream of data using a real-time anomaly detector to detect a first anomaly indicating that at least one of the client devices was previously associated with fraudulent software installation activity; aggregating the stream of data to generate a batch record of software installations for each publisher in the plurality of publishers; processing each batch record of software installations using a batch anomaly detector to detect a second anomaly indicating that at least one of the publishers is associated with fraudulent software installation activity; and facilitating an adjustment of content presentations on the client devices, based on at least one of the detected first anomaly and the detected second anomaly. 
     In certain examples, the record of software installations can include a timestamp, a client device identifier, and a publisher identifier. Processing the stream of data can include sending each software installation record to the real-time anomaly detector when the software installation record is obtained. Processing the stream of data can include determining that a device blacklist identifies the at least one of the client devices. The batch anomaly detector can include a plurality of detection algorithms, and each detection algorithm can be configured to detect at least one distinct anomaly from a plurality of detectable anomalies. Processing each batch record can include selecting, for each batch record, at least one detection algorithm from the plurality of detection algorithms. 
     In some instances, processing each batch record can include aggregating the batch record into a first record of organic software installations, a second record of non-incentivized software installations, and a third record of incentivized software installations. Processing each batch record can include processing the first record, the second record, and the third record using respective collections of detection algorithms, wherein each collection of detection algorithms is configured to detect a distinct set of anomalies. Facilitating the adjustment can include preventing at least one publisher from presenting content on the client devices. The method can include: identifying at least one of the client devices as being associated with the second anomaly; and adding the identified at least one of the client devices to a blacklist. 
     In another aspect, the subject matter described in this specification relates to a system having one or more computer processors programmed to perform operations including: obtaining a stream of data including a record of software installations on a plurality of client devices, at least a portion of the software installations having been derived from user exposure to content provided on the client devices by a plurality of publishers; processing the stream of data using a real-time anomaly detector to detect a first anomaly indicating that at least one of the client devices was previously associated with fraudulent software installation activity; aggregating the stream of data to generate a batch record of software installations for each publisher in the plurality of publishers; processing each batch record of software installations using a batch anomaly detector to detect a second anomaly indicating that at least one of the publishers is associated with fraudulent software installation activity; and facilitating an adjustment of content presentations on the client devices, based on at least one of the detected first anomaly and the detected second anomaly. 
     In certain implementations, the record of software installations can include a timestamp, a client device identifier, and a publisher identifier. Processing the stream of data can include sending each software installation record to the real-time anomaly detector when the software installation record is obtained. Processing the stream of data can include determining that a device blacklist identifies the at least one of the client devices. The batch anomaly detector can include a plurality of detection algorithms, and each detection algorithm can be configured to detect at least one distinct anomaly from a plurality of detectable anomalies. Processing each batch record can include selecting, for each batch record, at least one detection algorithm from the plurality of detection algorithms. 
     In some examples, processing each batch record can include aggregating the batch record into a first record of organic software installations, a second record of non-incentivized software installations, and a third record of incentivized software installations. Processing each batch record can include processing the first record, the second record, and the third record using respective collections of detection algorithms, wherein each collection of detection algorithms is configured to detect a distinct set of anomalies. Facilitating the adjustment can include preventing at least one publisher from presenting content on the client devices. The operations can include: identifying at least one of the client devices as being associated with the second anomaly; and adding the identified at least one of the client devices to a blacklist. 
     In another aspect, the subject matter described in this specification relates to an article. The article includes a non-transitory computer-readable medium having instructions stored thereon that, when executed by one or more computer processors, cause the computer processors to perform operations including: obtaining a stream of data including a record of software installations on a plurality of client devices, at least a portion of the software installations having been derived from user exposure to content provided on the client devices by a plurality of publishers; processing the stream of data using a real-time anomaly detector to detect a first anomaly indicating that at least one of the client devices was previously associated with fraudulent software installation activity; aggregating the stream of data to generate a batch record of software installations for each publisher in the plurality of publishers; processing each batch record of software installations using a batch anomaly detector to detect a second anomaly indicating that at least one of the publishers is associated with fraudulent software installation activity; and facilitating an adjustment of content presentations on the client devices, based on at least one of the detected first anomaly and the detected second anomaly. 
     Elements of embodiments described with respect to a given aspect of the invention can be used in various embodiments of another aspect of the invention. For example, it is contemplated that features of dependent claims depending from one independent claim can be used in apparatus, systems, and/or methods of any of the other independent claims 
    
    
     
       DESCRIPTION OF THE DRAWINGS 
         FIG. 1  is a schematic diagram of an example system for detecting and managing anomalies associated with software installations. 
         FIG. 2  is a schematic data flow diagram of an example system for detecting and managing fraudulent software installation activity. 
         FIG. 3  is a flowchart of an example method of detecting and managing anomalies associated with software installations. 
     
    
    
     DETAILED DESCRIPTION 
     In general, the subject matter of this disclosure relates to detecting and managing anomalies related to digital content presented by a group of publishers (e.g., websites and/or software applications) on client devices. Users of the client devices can be exposed to or can interact with the content and can install a software application in response to the content. When such an installation is attributed to a specific publisher, the publisher can receive compensation. This can incentivize publishers to engage in fraudulent activity (referred to herein as “software installation fraud”) in an effort to obtain the attribution and compensation. For example, a publisher or other component or entity can generate fake or phony clicks on one or more client devices, and/or provide an indication that such fake or phony clicks have occurred on the one or more client devices. Such fraud is estimated to result in losses of about $8 billion annually, and these losses are projected to increase. 
     In various examples, a software installation can occur when a user obtains a copy of software (e.g., via a download) and installs the software on the user&#39;s client device and/or begins using the installed software. The installed software can be or include, for example, a software program for a computer game (e.g., a multiplayer online game), business productivity (e.g., a word processor), weather, news, or any other purpose. The software program can be downloaded from a website, such as an app store. When a software application is first installed and/or used, a record of the software installation can be provided (e.g., by the client device) to one or more server computers or similar components. The record can include, for example, a client device identifier (also referred to as device ID), an IP address (e.g., for the client device), a device geographical location (e.g., city, state, and/or country), a user agent identifier (e.g., a browser identifier), a timestamp (e.g., corresponding to a time at which the installation occurred), a publisher identifier (e.g., identifying the publisher that presented content related to the installation, such as content that the user selected to initiate the installation), a content identifier (e.g., an identification of a specific video or image), a content type (e.g., image, video, and/or audio), a website identifier (e.g., identifying an app store or other website from which the software was obtained), a history of user interactions with content presentations (e.g., a record of clicks or other user selections on the client device), a dupe IP address percentage, a conversion distribution, and any combination thereof. The record can identify or include other information. In some instances, records for multiple software installations can be provided in a stream of data. For example, one or more server computers can collect records from multiple client devices and/or publishers and distribute the records in a stream of data to other computer components, as described herein, preferably in real-time. 
     In certain instances, users can interact with websites and software applications through a variety of commands on the user client devices. For example, users can select items on a touch screen for a graphical user interface or can enter characters using a keyboard. In some examples, a “click” can refer to an action taken by a user to select an item presented on a display, such as a computer screen, a computer monitor, or a mobile device display. A click can be, for example, a mouse click, a tap on a touch screen (e.g., with a finger or stylus), or a press of a button (e.g., on a keyboard or other input device). Other types of clicks are possible. Likewise, “click data” can refer to a record of clicks that have occurred on one or more client devices. The click data can identify, for example, a time for each click and a device on which each click occurred. Additionally, a “stream” of click data can refer to a sequence of click records for one or more client devices. The records in a click stream can be presented in a sequential or chronological order. 
       FIG. 1  illustrates an example system  100  for detecting and managing anomalies associated with software installations for a plurality of client devices. A server system  112  provides functionality for collecting and processing a stream of installation data and for detecting anomalies present in the data. The server system  112  includes software components and databases that can be deployed at one or more data centers  114  in one or more geographic locations, for example. In certain instances, the server system  112  is, includes, or utilizes a content delivery network (CDN). The server system  112  software components can include a collection module  116 , a processing module  118 , a real-time detection module  120 , a batch detection module  122 , a report generator  124 , a publisher A module  125 , and a publisher B module  126 . The software components can include subcomponents that can execute on the same or on different individual data processing apparatus. The server system  112  databases can include a content data  128  database, an installation data  130  database, and a blacklist data  132  database. The databases can reside in one or more physical storage systems. The software components and data will be further described below. 
     An application, such as, for example, a web-based application, can be provided as an end-user application to allow users to interact with the server system  112 . The client application or components thereof can be accessed through a network  133  (e.g., the Internet) by users of client devices, such as a smart phone  134 , a personal computer  136 , a tablet computer  138 , and a laptop computer  140 . Other client devices are possible. In alternative examples, the content data  128  database, the installation data  130  database, the blacklist data  132  database, or any portions thereof can be stored on one or more client devices. Additionally or alternatively, software components for the system  100  (e.g., the collection module  116 , the processing module  118 , the real-time detection module  120 , the batch detection module  122 , the report generator  124 , the publisher A module  125 , and the publisher B module  126 ) or any portions thereof can reside on or be used to perform operations on one or more client devices. 
       FIG. 1  depicts the collection module  116 , the processing module  118 , the real-time detection module  120 , the batch detection module  122 , the report generator  124 , the publisher A module  125 , and the publisher B module  126  as being able to communicate with the content data  128  database, the installation data  130  database, and the blacklist data  132  database. The content data  128  database generally includes digital content that can be presented on the client devices. The digital content can be or include, for example, images, videos, audio, computer games, text, messages, offers, and any combination thereof. The installation data  130  database generally includes information related to software installations by users who interact with content presented on client devices. Such information, also referred to as installation data, can include, for example, a client device identifier (also referred to as device ID), an IP address (e.g., for the client device), a device geographical location (e.g., city, state, and/or country), a user agent identifier (e.g., a browser identifier), a timestamp (e.g., corresponding to a time at which the installation occurred), a publisher identifier (e.g., identifying the publisher that presented content related to the installation, such as content that the user selected to initiate the installation), a content identifier (e.g., an identification of a specific video or image), a content type (e.g., image, video, and/or audio), a website identifier (e.g., identifying an app store or other website from which the software was obtained), a history of user interactions with content presentations (e.g., a record of clicks or other user sections on the client device), a dupe IP address percentage, a conversion distribution, and any combination thereof. For example, when a user installs and/or begins using a software application on a client device, information related to the installation (e.g., the device identifier, the content identifier, the timestamp, etc.) can be received by and stored in the installation data  130  database. The blacklist data  132  database generally includes a listing of client devices, publishers, and other sources that have been previously associated with fraudulent installation activity. Information in the listing can include, for example, a device identifier, a publisher identifier, a date or time of previous fraudulent activity, a device geographical location, an IP address, and any combination thereof. 
     In general, digital content (e.g., from the content data  128  database) can be presented on the client devices using a plurality of publishers, which can include the publisher A module  125  and the publisher B module  126 . Any suitable number of publishers and publisher modules are possible. Each publisher can be or include, for example, a website and/or a software application configured to present the content. When an item of content is presented on a client device, the user can interact with the content in multiple ways. For example, the user can view the content, select or click one or more portions of the content, play a game associated with the content, and/or take an action associated with the content. In certain instances, the action can be or include, for example, watching a video, viewing one or more images, selecting an item (e.g., a link) in the content, playing a game, visiting a website, downloading additional content, and/or installing a software application. In some instances, the content can offer the user a reward in exchange for taking the action. The reward can be or include, for example, a credit to an account, a virtual item or object for an online computer game, free content, or a free software application. Other types of rewards are possible. In general, content that offers users a reward for taking an action (e.g., installing a software application or finishing an application tutorial) can be referred to herein as “incentivized content,” and a software installation that results from incentivized content can be referred to herein as an “incentivized installation.” Additionally or alternatively, content that does not offer users a reward for taking an action can be referred to herein as “non-incentivized content,” and a software installation that results from non-incentivized content can be referred to herein as a “non-incentivized installation.” In some examples, a user can install a software application without having been exposed to any incentivized or non-incentivized content. Such installations can be referred to herein as “organic installations.” 
     Additionally or alternatively, in some instances, the publishers can be rewarded based on actions taken by users in response to the displayed content. For example, when a user clicks or selects an item of content or takes a certain action (e.g., installs or begins using a software application) in response to the content, the publisher can receive a reward or compensation from an entity (e.g., a person or a company) associated with the content or the action. The reward or compensation can provide an incentive for the publisher to display the content. 
     In some instances, for example, a publisher can receive compensation when it presents an item of content on a client device and a user installs a software application (or takes a different action) in response to the content. The publisher can provide information to the collection module  116  indicating that the content was presented on the client device. Alternatively or additionally, the collection module  116  can receive an indication that the user selected the content and/or that the software application was installed. Based on the received information, the collection module  116  can attribute the software application installation to the item of content presented by the publisher. The publisher can receive the compensation based on this attribution. 
     In various examples, the collection module  116  can be, include, or utilize an attribution service provider. The attribution service provider can receive information from publishers related to the presentation of content and user actions in response to the content. The attribution service provider can determine, based on the information received, how to attribute the user actions to individual publishers. In some instances, for example, a user can visit or use websites or software applications provided by publishers that present an item of content at different times on the user&#39;s client device. When the user takes an action (e.g., installs a software application) in response to the content presentations, the attribution service provider may select one of the publishers to receive the credit or attribution for the action. The selected publisher may be, for example, the publisher that was last to receive a click on the content before the user took the action. The selected publisher can receive compensation from an entity associated with the content or the action. Other publishers that presented the item of content and or received clicks on the content may receive no such compensation. 
     This scheme in which publishers can receive compensation based on attribution for user actions can result in fraudulent publisher activity. For example, a fraudulent publisher can send incorrect or misleading information to the collection module  116  (or attribution server provider) in an effort to fool the collection module  116  into attributing user action to content presented by the publisher. The fraudulent publisher can, for example, provide information to the collection module  116  indicating that the content was displayed on the user&#39;s client device when the content was not in fact displayed. Additionally or alternatively, the fraudulent publisher can provide information to the collection module  116  indicating that the user interacted with the content (e.g., clicked on the content, or installed software in response to the content) when such interactions did not occur. Based on this incorrect information, the collection module  116  (or attribution service provider) can erroneously attribute user action (e.g., a software application installation) to the fraudulent publisher, which may be rewarded (e.g., with money) for its deceitful activity. 
     Fraudulent or false clicks or installations can occur in various scenarios. For example, technical integration issues among computer systems can result in false clicks or installations. Such integration issues can cause, for example, a presentation of content to be erroneously counted as a click on the content. Alternatively or additionally, a fraudulent publisher can generate a high volume of false random clicks or evenly spaced clicks in an effort to steal attribution from legitimate publishers. Fraudulent publishers can also drive fake attribution postbacks with machine-generated device IDs or fingerprints in an effort to win attributions by chance. Fraudulent publishers can also use bots or automated machines to click on content, with little or no human interaction. Bots can also be used to drive fraudulent installs from the same geographical location, via a virtual private network (VPN), via mobile device emulators on desktop, and/or with cheap and obsolete devices. In some cases, malicious software can be used to hijack a client device and use cookies to mimic the user&#39;s viewing and clicking behavior. Alternatively or additionally, publishers can hide content (e.g., under other displayed content) and can count user clicks on visible items as clicks on the hidden content. 
     Fraudulent or false clicks or installations can occur in other scenarios. For example, a fraudulent publisher can mix or mislabel incent traffic (e.g., records of incentivized software installations) into non-incent traffic (e.g., records of non-incentivized software installations) in an effort to make non-incentivized content presentations show relatively decent but short-term only post-install engagements. Additionally or alternatively, a fraudulent publisher can use bots to complete minimum software engagement requirements associated with incentivized content presentations (e.g., for an online game application). This can allow the publisher to receive a reward when the minimum engagement requirements are met. In some instances, a fraudulent publisher can retarget and incentivize old users to complete certain levels of engagement for rewards. Such users can be of limited value to software developers and providers. 
     Referring to  FIG. 2 , in various examples, a system  200  for detecting fraudulent installation activity includes the collection module  116 , the processing module  118 , the real-time detection module  120 , the batch detection module  122 , and the report generator  124 . The collection module  116  can receive installation data from one or more data sources  202 . The installation data can be or include, for example, a stream of data including a record of software installations, clicks, and related activity on the client devices. The stream of data can be a live data stream, such that data for an installation can be received immediately or shortly (e.g., within seconds or minutes) after the installations are completed and/or after the user begins using the installed software application. The data sources  202  can be or include, for example, one or more publishers, such as the publisher A module  125  and the publisher B module  126 , and/or one or more client devices. The installation data can be stored in the installation data  130  database. 
     The installation data can be provided from the collection module  116  or the installation data  130  database to the processing module  118 . The processing module  118  can cleanse the installation data to remove any erroneous data or handle any missing or inaccurate data. Additionally or alternatively, the data processing module  118  can aggregate the installation data by client device and/or by publisher, such that installation data for each individual client device and/or each publisher can be extracted and/or separated from other installation data. The processing module  118  uses the installation data to generate a real-time installation stream  204  and a batch installation stream  206 , which can be processed using the real-time detection module  120  and the batch detection module  122 , respectively, as described herein. 
     In general, the real-time installation stream  204  can be or include, for example, the installation data received from the data sources  202 , which can be cleansed or processed by the processing module  118 . The real-time installation stream  204  can be or include, for example, a live record of installations that are occurring on the client devices, as reported by the data sources  202 . Alternatively or additionally, the real-time installation stream  204  can be or include a record of installations that have recently occurred or been reported for the client devices, for example, within about the last 0.1 seconds, 1 second, 5 seconds, 30 seconds, 1 minute, 5 minutes, 30 minutes, or other time period. For each installation, the record can include, for example, a device identifier, a timestamp, an IP address, a user agent (e.g., a web browser) identifier, an identification of device geographical location, an identification of an item of content associated with the installation, and/or an identification or a publisher associated with the installation. The real-time installation stream  204  can include other installation data. 
     The real-time installation stream  204  can be provided to the real-time detection module  120  (alternatively referred to herein as a real-time anomaly detector), which can identify installation fraud or similar anomalies present in the real-time installation stream  204 . In one example, the real-time detection module  120  can process the real-time installation stream  204  by filtering and storing installation data from low-reputation data sources (e.g., devices or publishers), based on, for example, device IP address, user agent, device ID, device geographical location, publisher identifier, and/or other factors. Low-reputation sources can be identified through historical analysis of previous installation data streams. For example, client devices, publishers, and other sources that have been previously associated with installation fraud (e.g., during an earlier time period) can be included in a blacklist in the blacklist data  132  database. Any such sources identified in the blacklist can be considered to be low-reputation sources and/or more likely to be associated with installation fraud in the future. In some instances, the real-time detection module  120  can monitor the real-time installation stream  204  to look for any recent installation data from sources identified in the blacklist. If any such installation data is present, the real-time detection module  120  can generate an alert of possible or likely installation fraud. For example, the real-time detection module  120  can inform other components (e.g., the report generator  124 ) or users of the system  200  that low-reputation devices are continuing to generate installations, and that such installations are likely fraudulent, based on the blacklist. In some examples, any installation data in the real-time installation stream  204  for low-reputation sources can be filtered, flagged, or removed from the real-time installation stream  204 . Other installation data from more reputable sources can be allowed to pass through for further processing. 
     Likewise, the batch installation stream  206  can be or include a separate batch of installation data for each publisher during a previous time period (e.g., a previous hour, day, week, or any portion thereof). The processing module  118  can create the separate batches of installation data by collecting installation data for all publishers during the time period and then aggregating the installation data by publisher. The processing module  118  can further aggregate the installation data for each publisher into separate batches according to, for example, installation type. For example, the installation data for each publisher can be further aggregated into a batch of installation data for organic installations, a batch of installation data for non-incentivized installations, and a batch of installation data for incentivized installations. Each batch of installation data can include a record of installations that were generated by or for the publisher during the time period. The record for each installation can include, for example, a device identifier, a timestamp, an IP address, a user agent identifier, a device geographical location identifier, a content identifier, a publisher identifier, a dupe IP address percentage (e.g., a percentage of installations generated by a single IP address), and a conversion distribution (e.g., a click time-to-install distribution). 
     The batch installation stream  206  can be provided to the batch detection module  122  (alternatively referred to herein as a batch anomaly detector), which can use one or more collections of algorithms to detect installation fraud and similar anomalies in the installation data. In the depicted example, the batch detection module  122  includes an organic detector  210  for processing a batch of installation data for organic installations, a non-incentivized detector  212  for processing a batch of installation data for non-incentivized installations, and an incentivized detector  214  for processing a batch of installation data for incentivized installations. Each of these detectors  210 ,  212 ,  214  includes a collection of one or more algorithms configured to detect installation fraud, for example, by comparing the installation data to one or more predetermined baselines, thresholds, or acceptable ranges. For example, the organic detector  210  includes X separate algorithms, including a first algorithm  210 - 1 , a second algorithm  210 - 2 , . . . , and an Xth algorithm  210 -X The number of available algorithms X can be any integer, preferably greater than or equal to two (e.g., 2, 3, 5, 10, 15, or more). Likewise, the non-incentivized detector  212  includes Y separate algorithms, including a first algorithm  212 - 1 , a second algorithm  212 - 2 , . . . , and an Yth algorithm  212 -Y. The number of available algorithms Y can be any integer, preferably greater than or equal to two (e.g., 2, 3, 5, 10, 15, or more). The incentivized detector  214  includes Z separate algorithms, including a first algorithm  214 - 1 , a second algorithm  214 - 2 , . . . , and an Zth algorithm  214 -Z. The number of available algorithms Z can be any integer, preferably greater than or equal to two (e.g., 2, 3, 5, 10, 15, or more). 
     Each algorithm can include a separate or distinct anomaly detection model, which can utilize, for example, suitable machine-learning techniques or the like. In certain instances, for example, the algorithms can use one or more trained classifiers to detect installation fraud. The trained classifiers can be or include, for example, one or more linear classifiers (e.g., Fisher&#39;s linear discriminant, logistic regression, Naive Bayes classifier, and/or perceptron), support vector machines (e.g., least squares support vector machines), quadratic classifiers, kernel estimation models (e.g., k-nearest neighbor), boosting (meta-algorithm) models, decision trees (e.g., random forests), neural networks, and/or learning vector quantization models. Other classifiers can be used. Once trained, the one or more classifiers can receive a batch of installation data as input and can provide an indication of installation fraud as output. The output can be or include, for example, a probability that the batch of installation data includes or is associated with installation fraud. 
     In preferred implementations, each batch of installation data can be processed separately by one or more of the algorithms in the batch detection module  122 , and each algorithm can be tailored to detect a specific type of installation fraud, which can occur in many different forms and patterns. The algorithms can employ multiple fraud detection metrics or pattern recognition techniques to detect various installation patterns. Within the organic detector  210 , the non-incentivized detector  212 , and/or the incentivized detector  214 , for example, a batch of installation data can be processed by multiple algorithms that can independently detect fraud and/or generate multiple fraud alerts for the batch. Additionally or alternatively, each algorithm can be configured to detect a distinct type of fraud, for example, by calculating and/or analyzing one or more key performance indicators (KPIs), as described herein. 
     For example, one or more algorithms can be configured to detect fraudulent dupe IP installs, fraudulent VPN installs, limited ad tracking (LAT) fraud, payer fraud, and/or other types of fraud. Fraudulent dupe IP installs are, in general, a type of fraud in which multiple installations (or a record thereof) occur on the exact same IP address. To detect fraudulent dupe IP installs, an algorithm can calculate a percentage of total installs (e.g., for a publisher or other entity) that occurred on a single IP address, during a previous time period. A high dupe IP installation percentage (e.g., compared to a baseline value) can indicate that a publisher has been fraudulently driving or generating installations through a single IP address. 
     Fraudulent VPN installs are, in general, a type of fraud in which a user clicks on content at one IP address (e.g., a click IP address) and subsequently installs software related to the content at a different IP address (e.g., an install IP address). To detect fraudulent VPN installs, an algorithm can calculate a percentage of total installs (e.g., for a publisher or other entity) that have a click IP address that does not match the install IP address. A high VPN installation percentage (e.g., compared to a baseline value) can indicate that a publisher has been generating fraudulent installations. 
     LAT fraud can be perpetrated by publishers that leverage LAT functionality (e.g., on iOS systems) by spamming clicks and/or winning more fingerprint-matched installations. To detect LAT fraud, an algorithm can calculate a percentage of total installs (e.g., for a publisher or other entity) that were LAT installs. A high LAT installation percentage (e.g., compared to a baseline) can be indicative of LAT fraud. 
     Payer fraud can occur when users are financially incentivized (e.g., by a publisher or other entity) to reach a particular software application engagement event, such as a certain level of accomplishment (e.g., level 10) in an online game. In a typical example, users reach the engagement event, receive compensation, and then either stop using the installed software application or significantly reduce engagement with the software application. To detect payer fraud, an algorithm can calculate a percentage of total incentivized installations (e.g., for a publisher) that involved (i) reaching an engagement event and (ii) a significant decrease (e.g., 50% or more) in user engagement following the engagement event. A high percentage of such installations (referred to herein as “payer fraud percentage”) for a publisher or other entity can be indicative of payer fraud. 
     Additionally or alternatively, the conversion distribution can provide information related to how software installations were generated, for example, by a publisher or other entity. When the conversion distribution indicates that a click time-to-install (e.g., a time between a click on content and a subsequent software installation) for a publisher is anomalous, one or more algorithms in the batch detection module  122  can determine that the publisher has been generating fraudulent software installations. 
     In certain examples, one or more of the algorithms in the batch detection module  122  can be configured to analyze KPIs related to client devices and/or publishers. For example, an algorithm can receive one or more KPIs as input and provide as output a score indicating a likelihood of fraudulent activity. The KPIs can be calculated (e.g., by the processing module  118 ) based on data collected for the content presentations and/or software installations. Each KPI can be compared with a respective baseline or range of expected values. The baseline can be or include, for example, a predicted value for the KPI or a predicted time series for the KPI based on historical data or trends. In some instances, the baseline is generated based on data for the KPI during a recent time period, such as a previous day, week, or month, though other time periods can be used. In general, a statistically significant deviation between a KPI and a corresponding baseline can indicate fraudulent installation activity or a different anomaly. The KPIs can be or include, for example, a number of content presentations (also referred to as impressions), a number of content selections (also referred to as clicks), a number of engagements with a software application, a number of software application installs, a number of conversions (e.g., purchases or offer acceptances), a time-to-install (e.g., an elapsed time between a content presentation and a software installation), and/or any combination thereof. Other KPIs are possible. For example, the KPIs can be or include dupe IP address percentage, VPN installation percentage, LAT installation percentage, payer fraud percentage, a conversion distribution, a consecutive install IP percentage (e.g., a percentage of installs for a publisher that are from consecutive IP addresses or IP addresses that are separated by a consistent numerical interval), a device ID reset percentage (e.g., a percentage of installs for a publisher that are from the same user but different device IDs), and/or other relevant KPIs. For example, a high consecutive install IP percentage can indicate fraud and can occur when there are multiple software installations from the same publisher at consecutive IP addresses, such as 153.94.124.20, 153.94.124.21, 153.94.124.22, 153.94.124.23, and so on. Additionally or alternatively, a high device ID reset percentage can indicate that a fraudulent publisher or other entity is attempting to win another installation using a device ID that is different from the device ID used for the initial installation. 
     In some examples, certain derived metrics can be used as KPIs for an application related to an online game. Such KPIs can include, for example, a rate of player advancement in a game, a percentage of users who change or drop one or more levels in the game, and/or a percentage of users who make purchases in the game. In some instances, a ratio, product, sum, or difference of two or more KPIs can be informative, such as a ratio of the number of clicks to the number of content presentations (referred to as click-through rate), or the ratio of the number of clicks to the number of installs (referred to as click-to-install ratio). Each KPI is typically calculated for a period of time, such as a previous hour, day, or week. The KPIs can be updated or recalculated as additional information is collected over time. Some KPIs can be specific to client devices, while other KPIs can be specific to publishers. As new forms of fraud are developed by fraudsters, additional KPIs can be calculated and/or monitored to detect the fraudulent activity. 
     In some instances, install fraud can be detected by analyzing a record of clicks or other user actions on client devices. For example, “fast clicks” are rapid clicks that occur in short time intervals on the same device, while “space clicks” are clicks that occur at evenly spaced time intervals (e.g., every 10 seconds) on the same device. Appropriate baselines or thresholds to identify these and other click patterns can be determined by statistical analysis and/or sequence mining (e.g., anomaly detection in sequence mining, evenly spaced sequence mining, frequency cap analysis, or the like). Such clicks can be introduced by publishers in an effort to win attribution for software installations. 
     Installation fraud can be perpetrated using many different forms and patterns of clicks, including patterns that appear to be random. For example, while the click rate with space clicks can be substantially constant, the click rate in other forms of click fraud can vary over time, in a wide variety of functional forms, such as linear, quadratic, parabolic, sinusoidal, exponential, logarithmic, or any combination thereof. New forms of installation fraud are constantly being developed by fraudsters in an ongoing effort to avoid detection. 
     In some instances, the detection algorithms can detect installation fraud by measuring a number of clicks for a client device over a time period, such as, for example, 1 second, 1 minute, or 1 hour. When the number of clicks during the time period exceeds a threshold value T, the detection algorithms can conclude that there is a high likelihood (e.g., more than 50% or 90%) of click fraud. The threshold value T can be determined based on, for example, a historical analysis of click histories on client devices. The threshold value T can be, for example, T=X+(C)(S), where X is a median or average click rate, S is a standard deviation, and C is any positive number, such as 1, 1.5, 2, or 3. In general, the goal in such a case is to identify instances where the click rate (or other click parameter, such as click spacing) deviates in a statistically significant manner from a median or average historical value. Statistical tests, such as, for example, a t-test, a p-test, and so forth, can be used to define or identify deviations as being statistically significant. 
     Alternatively or additionally, the threshold (e.g., the threshold value T) can be based on a statistical quantile of data from a corresponding previous time period, preferably for all publishers and client devices. A large quantile can be chosen as the threshold, so that any data that crosses the threshold can be considered to have a statistically significant deviation from other data. For any fraud metric, when a source (e.g., a publisher or client device) is statistically significantly deviated from a baseline (e.g., a threshold is exceeded), the source can be identified as exhibiting installation fraud or as having a high likelihood of being associated with installation fraud. Information related to each installation from the identified source can be stored for further downstream aggregation, summary, or troubleshooting. In some instances, for example, data related to installation fraud can be used to identify devices associated with other forms of fraud, such as software installation fraud. 
     Referring again to  FIG. 2 , in some examples, the batch detection module  122  can achieve dynamic anomaly detection by taking into account variable factors, such as, for example, seasonality and trend, and/or by making use of dynamic baselines or thresholds to identify statistically significant outliers. In general, a dynamic threshold or baseline can account for variations or changes that occur over time, for example, during an hour, a day, a week, a month, or longer. For example, user interactions with client devices (e.g., clicks and software application installs) can exhibit daily or weekly seasonality in which the interactions can vary in a repetitive manner (e.g., more activity during evenings or on weekends). By using dynamic thresholds that can change over time, the system  200  can account for such variations and achieve more accurate click fraud detections with fewer false positives. By comparison, constant or static thresholds can fail to detect new forms of installation fraud that can appear on an ongoing basis. A robust, dynamic baseline or threshold can be generated by considering the most recent installation data and/or by performing data-cleansing, such as, for example, outlier removal, robust metric selection, and the like. Additionally or alternatively, for any fraud metric, if a source (e.g., a publisher) is statistically significantly deviated from a baseline, the source can be identified as exhibiting such deviation. In such an instance, information on every single fraud install from the identified source can also be stored for further downstream aggregation or summary. Additionally or alternatively, the threshold that can be used to trigger alerts can be set up based on statistical hypothesis testing or the like. A small, critical value can be chosen as the threshold, so that any p-value that falls below the threshold can be considered statistically significantly deviated from a baseline distribution. 
     In certain examples, distribution similarity can be used to capture publishers that are driving fast installs via click injection or latent installs via click spamming. Fast installs can occur, for example, when a time between clicking on content and installing a related software application is suspiciously short or below a threshold time. Latent installs can occur when a time between clicking on content and installing the related software application is suspiciously long or above a threshold time. Appropriate rules for identifying such example patterns can be determined by statistical analysis and/or unsupervised learning (e.g., hypothesis testing, anomaly detection in time series, correlation analysis, clustering, or the like). 
     Advantageously, by aggregating and analyzing installation data according to installation type (e.g., organic installations, non-incentivized installations, and/or incentivized installations), the batch detection module  122  is able to detect and identify a wider variety of installation fraud and/or can associate fraud in one installation domain (e.g., the organic installation domain) with fraud in another installation domain (e.g., the incentivized installation domain). For example, when a spike in fraudulent organic installations occurs at a same time and/or geographical location as a spike in non-incentivized and/or incentivized installations, it is likely that the spikes are being caused by the same entity (e.g., a fraudulent publisher). The approach can therefore help diagnose sources of installation fraud occurring across multiple installation domains. This can be particularly beneficial for diagnosing fraud associated with organic installations, for which there is generally less data available for fraud detection. Additionally or alternatively, the baselines for KPIs or other fraud indicators can vary significantly according to installation type. By analyzing the different installation types separately (e.g., using the organic detector  210 , the non-incentivized detector  212 , and the incentivized detector  214 ), false positives can be reduced significantly and overall system accuracy and efficiency can be improved. 
     Outputs from the real-time detection module  120  and the batch detection module  122  can be provided to the report generator  124 , which can generate a fraud report  216  of any installation fraud activity. In some instances, for example, the report generator  124  can collect reports of fraudulent installations from the real-time detection module  120  and the batch detection module  122  and provide the fraud report  216  to users of the system  200 . The users can use the report to optimize future content presentations, for example, by avoiding or shutting down certain users or publishers who have engaged in installation fraud. The report can also be used to request or obtain refunds from any publishers that received compensation based on fraudulent activity. The fraud report  216  can be or include an electronic file that is generated or updated on a periodic basis, such as every hour, day, or week. The fraud report  216  can include, for example, an identification of any client devices and/or publishers associated with installation fraud. The fraud report  216  can include fraudulent installation counts and/or an identification of any different types of installation fraud (e.g., dupe IP installs or VPN installs). In preferred examples, the report generator  124  can update the blacklist data  132  database to include a current listing of any client devices and/or publishers that have been associated with installation fraud, for example, as determined by the batch detection module  122 . 
     Given that the real-time detection module  120  and the batch detection module  122  analyze installation data derived from a common data stream received from the data sources  202 , the real-time detection module  120  and the batch detection module  122  can, in some instances, generate duplicate alerts of installation fraud. In general, the real-time detection module  120  can detect installation fraud in real-time, while the batch detection module  122  can detect fraud periodically (e.g., daily). The resulting fraud report  216  can include summaries of the real-time and periodic fraud detections. In some instances, the fraud report  216  can utilize or include a fraud scoring system in which sources (e.g., publisher or client device) can be sorted according to fraud severity, where the severity can be evaluated and aggregated over outputs from all detectors. 
     Advantageously, the ability to perform real-time installation fraud detection can allow the system  200  and/or users thereof to identify a fraud source (e.g., a fraudulent publisher) as soon as possible, such that the source can be shut down quickly and further financial losses due to the fraud can be avoided. Additionally or alternatively, stopping fraudulent installations in real-time can help achieve a more accurate attribution of user activity (e.g., application installs) to content presented on client devices. 
     In various instances, the systems and methods described herein can perform installation fraud detection at a device level and/or at a publisher level. Such device-level and/or publisher-level granularity can assist with resolving disputes and/or selecting publishers for further content presentations. For example, refund amounts can be calculated fractionally, based on the fraudulent devices. Additionally or alternatively, the anomaly can be more deeply investigated (e.g., at a device level), which can allow publishers to troubleshoot installation fraud or technical integration issues more efficiently. 
     Several different actions can be taken, preferably automatically, in response to identified installation fraud or other installation anomalies. When a publisher is identified to have engaged in installation fraud activity, for example, the publisher can be added to a blacklist (e.g., the blacklist data  132  database) and/or can be prevented from presenting content on client devices in the future. In some instances, the fraudulent activity can be brought to the publisher&#39;s attention and/or the publisher may provide a refund of any compensation earned from the fraudulent activity. Alternatively or additionally, when an installation anomaly is identified as being associated with positive (e.g., not fraudulent) publisher activity, the publisher can be used to present additional content or a higher volume of content in the future. In general, the report generator  124  and/or users of the system  200  can use the installation fraud results to make decisions regarding how and where to present content going forward. Publishers who are identified as performing well can be used more in the future, and publishers who are identified as performing poorly or fraudulently can be used less in the future or not at all. 
     Additionally or alternatively, the installation fraud results can be used to properly attribute user action to content presentations. As mentioned above, when a user takes an action (e.g., installs a software application) in response to a content presentation, a publisher may be selected to receive credit or attribution for the action, and the selected publisher may receive compensation for such attribution. Advantageously, the systems and methods described herein can be used to prevent or correct any attribution due to fraudulent installations. Additionally or alternatively, the systems and methods can be used to determine a proper attribution, by considering only installations that are not fraudulent. In some instances, the systems and methods can be used to revoke or not authorize a prior attribution that was based on fraudulent installations, or to withhold any requested compensation based on fraudulent installations. 
     To extract actionable insights from big data, it can be important in some examples to leverage big data technologies, so that there is sufficient support for processing large volumes of data. Examples of big data technologies that can be used with the systems and methods described herein include, but are not limited to, APACHE HIVE and APACHE SPARK. In general, APACHE HIVE is an open source data warehousing infrastructure built on top of HADOOP for providing data summarization, query, and analysis. APACHE HIVE can be used, for example, as part of the processing module  118  to generate and/or process the real-time installation stream  204  and/or the batch installation stream  206 . APACHE SPARK is, in general, an open source processing engine built around speed, ease of use, and sophisticated analytics. APACHE SPARK can be leveraged to detect abnormal deviations in a scalable and timely manner. APACHE SPARK can be used, for example, to process the real-time installation stream  204  and/or the batch installation stream  206  and any batches of installation data handled by the batch detection module  122 . In general, the real-time capabilities of the systems and methods described herein can be achieved or implemented using APACHE SPARK or other suitable real-time platforms that are capable of processing large volumes of real-time data. 
     The systems and methods described herein are generally configured in a modular fashion, so that extending underlying algorithms to new sources and modifying or adding underlying algorithms can be done with minimal effort. This allows the anomaly detection systems and methods to be refined and updated, as needed, to keep up with new forms of installation fraud being created by fraudsters on an ongoing basis. The algorithms in the batch detection module  122  can operate independently from one another, which can allow new algorithms to be implemented and used, without adversely impacting predictive capabilities of existing algorithms. As additional novel algorithms are developed for installation fraud detection, an overall capability and accuracy of the systems and methods can grow monotonically. 
       FIG. 3  illustrates an example computer-implemented method  300  of detecting and managing installation fraud. A stream of data is obtained (step  302 ) that includes a record of software installations on a plurality of client devices. At least a portion of the software installations were derived from user exposure to content provided on the client devices by a plurality of publishers. The stream of data is processed (step  304 ) using a real-time anomaly detector to detect a first anomaly indicating that at least one of the client devices was previously associated with fraudulent software installation activity. The stream of data is aggregated (step  306 ) to generate a batch record of software installations for each publisher in the plurality of publishers. Each batch record of software installations is processed (step  308 ) using a batch anomaly detector to detect a second anomaly indicating that at least one of the publishers is associated with fraudulent software installation activity. An adjustment of content presentations is facilitated (step  310 ) on the client devices, based on at least one of the detected first anomaly and the detected second anomaly. 
     Implementations of the subject matter and the operations described in this specification can be implemented in digital electronic circuitry, or in computer software, firmware, or hardware, including the structures disclosed in this specification and their structural equivalents, or in combinations of one or more of them. Implementations of the subject matter described in this specification can be implemented as one or more computer programs, i.e., one or more modules of computer program instructions, encoded on computer storage medium for execution by, or to control the operation of, data processing apparatus. Alternatively or in addition, the program instructions can be encoded on an artificially generated propagated signal, e.g., a machine-generated electrical, optical, or electromagnetic signal, that is generated to encode information for transmission to suitable receiver apparatus for execution by a data processing apparatus. A computer storage medium can be, or be included in, a computer-readable storage device, a computer-readable storage substrate, a random or serial access memory array or device, or a combination of one or more of them. Moreover, while a computer storage medium is not a propagated signal, a computer storage medium can be a source or destination of computer program instructions encoded in an artificially-generated propagated signal. The computer storage medium can also be, or be included in, one or more separate physical components or media (e.g., multiple CDs, disks, or other storage devices). 
     The operations described in this specification can be implemented as operations performed by a data processing apparatus on data stored on one or more computer-readable storage devices or received from other sources. 
     The term “data processing apparatus” encompasses all kinds of apparatus, devices, and machines for processing data, including by way of example a programmable processor, a computer, a system on a chip, or multiple ones, or combinations, of the foregoing. The apparatus can include special purpose logic circuitry, e.g., an FPGA (field programmable gate array) or an ASIC (application-specific integrated circuit). The apparatus can also include, in addition to hardware, code that creates an execution environment for the computer program in question, e.g., code that constitutes processor firmware, a protocol stack, a database management system, an operating system, a cross-platform runtime environment, a virtual machine, or a combination of one or more of them. The apparatus and execution environment can realize various different computing model infrastructures, such as web services, distributed computing and grid computing infrastructures. 
     A computer program (also known as a program, software, software application, script, or code) can be written in any form of programming language, including compiled or interpreted languages, declarative or procedural languages, and it can be deployed in any form, including as a stand-alone program or as a module, component, subroutine, object, or other unit suitable for use in a computing environment. A computer program may, but need not, correspond to a file in a file system. A program can be stored in a portion of a file that holds other programs or data (e.g., one or more scripts stored in a markup language document), in a single file dedicated to the program in question, or in multiple coordinated files (e.g., files that store one or more modules, sub-programs, or portions of code). A computer program can be deployed to be executed on one computer or on multiple computers that are located at one site or distributed across multiple sites and interconnected by a communication network. 
     The processes and logic flows described in this specification can be performed by one or more programmable processors executing one or more computer programs to perform actions by operating on input data and generating output. The processes and logic flows can also be performed by, and apparatus can also be implemented as, special purpose logic circuitry, e.g., an FPGA (field programmable gate array) or an ASIC (application-specific integrated circuit). 
     Processors suitable for the execution of a computer program include, by way of example, both general and special purpose microprocessors, and any one or more processors of any kind of digital computer. Generally, a processor will receive instructions and data from a read-only memory or a random access memory or both. The essential elements of a computer are a processor for performing actions in accordance with instructions and one or more memory devices for storing instructions and data. Generally, a computer will also include, or be operatively coupled to receive data from or transfer data to, or both, one or more mass storage devices for storing data, e.g., magnetic disks, magneto-optical disks, optical disks, or solid state drives. However, a computer need not have such devices. Moreover, a computer can be embedded in another device, e.g., a mobile telephone, a personal digital assistant (PDA), a mobile audio or video player, a game console, a Global Positioning System (GPS) receiver, or a portable storage device (e.g., a universal serial bus (USB) flash drive), to name just a few. Devices suitable for storing computer program instructions and data include all forms of non-volatile memory, media and memory devices, including, by way of example, semiconductor memory devices, e.g., EPROM, EEPROM, and flash memory devices; magnetic disks, e.g., internal hard disks or removable disks; magneto-optical disks; and CD-ROM and DVD-ROM disks. The processor and the memory can be supplemented by, or incorporated in, special purpose logic circuitry. 
     To provide for interaction with a user, implementations of the subject matter described in this specification can be implemented on a computer having a display device, e.g., a CRT (cathode ray tube) or LCD (liquid crystal display) monitor, for displaying information to the user and a keyboard and a pointing device, e.g., a mouse, a trackball, a touchpad, or a stylus, by which the user can provide input to the computer. Other kinds of devices can be used to provide for interaction with a user as well; for example, feedback provided to the user can be any form of sensory feedback, e.g., visual feedback, auditory feedback, or tactile feedback; and input from the user can be received in any form, including acoustic, speech, or tactile input. In addition, a computer can interact with a user by sending documents to and receiving documents from a device that is used by the user; for example, by sending web pages to a web browser on a user&#39;s client device in response to requests received from the web browser. 
     Implementations of the subject matter described in this specification can be implemented in a computing system that includes a back-end component, e.g., as a data server, or that includes a middleware component, e.g., an application server, or that includes a front-end component, e.g., a client computer having a graphical user interface or a Web browser through which a user can interact with an implementation of the subject matter described in this specification, or any combination of one or more such back-end, middleware, or front-end components. The components of the system can be interconnected by any form or medium of digital data communication, e.g., a communication network. Examples of communication networks include a local area network (“LAN”) and a wide area network (“WAN”), an inter-network (e.g., the Internet), and peer-to-peer networks (e.g., ad hoc peer-to-peer networks). 
     The computing system can include clients and servers. A client and server are generally remote from each other and typically interact through a communication network. The relationship of client and server arises by virtue of computer programs running on the respective computers and having a client-server relationship to each other. In some implementations, a server transmits data (e.g., an HTML page) to a client device (e.g., for purposes of displaying data to and receiving user input from a user interacting with the client device). Data generated at the client device (e.g., a result of the user interaction) can be received from the client device at the server. 
     While this specification contains many specific implementation details, these should not be construed as limitations on the scope of any inventions or of what can be claimed, but rather as descriptions of features specific to particular implementations of particular inventions. Certain features that are described in this specification in the context of separate implementations can also be implemented in combination in a single implementation. Conversely, various features that are described in the context of a single implementation can also be implemented in multiple implementations separately or in any suitable subcombination. Moreover, although features can be described above as acting in certain combinations and even initially claimed as such, one or more features from a claimed combination can in some cases be excised from the combination, and the claimed combination can be directed to a subcombination or variation of a subcombination. 
     Similarly, while operations are depicted in the drawings in a particular order, this should not be understood as requiring that such operations be performed in the particular order shown or in sequential order, or that all illustrated operations be performed, to achieve desirable results. In certain circumstances, multitasking and parallel processing can be advantageous. Moreover, the separation of various system components in the implementations described above should not be understood as requiring such separation in all implementations, and it should be understood that the described program components and systems can generally be integrated together in a single software product or packaged into multiple software products. 
     Thus, particular implementations of the subject matter have been described. Other implementations are within the scope of the following claims. In some cases, the actions recited in the claims can be performed in a different order and still achieve desirable results. In addition, the processes depicted in the accompanying figures do not necessarily require the particular order shown, or sequential order, to achieve desirable results. In certain implementations, multitasking and parallel processing can be advantageous.