PATENT DOCUMENT

Publication Number: US-11630851-B2
Application Number: US-201916460955-A
Country: US
Kind Code: B2

Title: Systems and methods for providing predictions to applications executing on a computing device

Abstract:
The embodiments set forth techniques for implementing various “prediction engines” that can be configured to provide different kinds of predictions within a mobile computing device. According to some embodiments, each prediction engine can assign itself as an “expert” on one or more “prediction categories” within the mobile computing device. When a software application issues a request for a prediction for a particular category, and two or more prediction engines respond with their respective prediction(s), a “prediction center” can be configured to receive and process the predictions prior to responding to the request. Processing the predictions can involve removing duplicate information that exists across the predictions, sorting the predictions in accordance with confidence levels advertised by the prediction engines, and the like. In this manner, the prediction center can distill multiple predictions down into an optimized prediction and provide the optimized prediction to the software application.

Claims:
What is claimed is: 
     
       1. A method for providing predictions to software applications executing on a computing device, the method comprising, by a prediction engine of a plurality of prediction engines executing on the computing device:
 providing, to a prediction center executing on the computing device, a first request to register with the prediction center for the prediction engine to generate predictions for at least one prediction category of a plurality of prediction categories provided on the computing device; 
 receiving, from the prediction center on behalf of a requesting software application, a second request to provide a prediction for the at least one prediction category; 
 generating at least one prediction in accordance with the second request; and 
 providing the at least one prediction to the prediction center to cause the prediction center to:
 produce an aggregated prediction by aggregating the at least one prediction with at least one other prediction provided to the prediction center by at least one other prediction engine, and 
 provide the aggregated prediction to the requesting software application. 
 
 
     
     
       2. The method of  claim 1 , wherein generating the at least one prediction comprises:
 associating a confidence level associated with the at least one prediction. 
 
     
     
       3. The method of  claim 2 , wherein the confidence level affects a manner in which the prediction center aggregates the at least one prediction with the at least one other prediction. 
     
     
       4. The method of  claim 1 , wherein the at least one prediction is generated based on at least one learning model that is employed by the prediction engine. 
     
     
       5. The method of  claim 1 , further comprising, subsequent to generating the at least one prediction:
 caching the at least one prediction into a cache, wherein the at least one prediction is associated with the second request. 
 
     
     
       6. The method of  claim 1 , wherein the plurality of prediction categories include:
 activations and deactivations of software applications executing on the computing device, 
 contacts known to the computing device, 
 Global Positioning System (GPS) information available to the computing device, 
 notifications processed by the computing device, and 
 physical input made to the computing device. 
 
     
     
       7. The method of  claim 1 , further comprising, subsequent to the prediction center providing the aggregated prediction to the software application:
 receiving, from the prediction center, feedback information that indicates an accuracy of the prediction; and 
 adjusting at least one learning model in accordance with the feedback information to improve the accuracy of subsequent predictions that are produced by the prediction engine. 
 
     
     
       8. At least one non-transitory computer readable storage medium configured to store instructions that, when executed by at least one processor included in a computing device, cause the computing device to implement a prediction engine of a plurality of prediction engines for providing predictions to software applications executing on the computing device, by carrying out steps that include:
 providing, to a prediction center executing on the computing device, a first request to register with the prediction center for the prediction engine to generate predictions for at least one prediction category of a plurality of prediction categories provided on the computing device; 
 receiving, from the prediction center on behalf of a requesting software application, a second request to provide a prediction for the at least one prediction category; 
 generating at least one prediction in accordance with the second request; and 
 providing the at least one prediction to the prediction center to cause the prediction center to:
 produce an aggregated prediction by aggregating the at least one prediction with at least one other prediction provided to the prediction center by at least one other prediction engine, and 
 provide the aggregated prediction to the requesting software application. 
 
 
     
     
       9. The at least one non-transitory computer readable storage medium of  claim 8 , wherein generating the at least one prediction comprises:
 associating a confidence level associated with the at least one prediction. 
 
     
     
       10. The at least one non-transitory computer readable storage medium of  claim 9 , wherein the confidence level affects a manner in which the prediction center aggregates the at least one prediction with the at least one other prediction. 
     
     
       11. The at least one non-transitory computer readable storage medium of  claim 8 , wherein the at least one prediction is generated based on at least one learning model that is employed by the prediction engine. 
     
     
       12. The at least one non-transitory computer readable storage medium of  claim 8 , wherein the steps further include, subsequent to generating the at least one prediction:
 caching the at least one prediction into a cache, wherein the at least one prediction is associated with the second request. 
 
     
     
       13. The at least one non-transitory computer readable storage medium of  claim 8 , wherein the plurality of prediction categories include:
 activations and deactivations of software applications executing on the computing device, 
 contacts known to the computing device, 
 Global Positioning System (GPS) information available to the computing device, 
 notifications processed by the computing device, and 
 physical input made to the computing device. 
 
     
     
       14. The at least one non-transitory computer readable storage medium of  claim 8 , wherein the steps further include, subsequent to the prediction center providing the aggregated prediction to the software application:
 receiving, from the prediction center, feedback information that indicates an accuracy of the prediction; and 
 adjusting at least one learning model in accordance with the feedback information to improve the accuracy of subsequent predictions that are produced by the prediction engine. 
 
     
     
       15. A computing device configured to implement a prediction engine of a plurality of prediction engines for providing predictions to software applications executing on the computing device, the computing device comprising:
 at least one processor; and 
 at least one memory storing instructions that, when executed by the at least one processor, cause the computing device to perform steps that include:
 providing, to a prediction center executing on the computing device, a first request to register with the prediction center for the prediction engine to generate predictions for at least one prediction category of a plurality of prediction categories provided on the computing device; 
 receiving, from the prediction center on behalf of a requesting software application, a second request to provide a prediction for the at least one prediction category; 
 generating at least one prediction in accordance with the second request; and 
 providing the at least one prediction to the prediction center to cause the prediction center to:
 produce an aggregated prediction by aggregating the at least one prediction with at least one other prediction provided to the prediction center by at least one other prediction engine, and 
 provide the aggregated prediction to the requesting software application. 
 
 
 
     
     
       16. The computing device of  claim 15 , wherein generating the at least one prediction comprises:
 associating a confidence level associated with the at least one prediction. 
 
     
     
       17. The computing device of  claim 16 , wherein the confidence level affects a manner in which the prediction center aggregates the at least one prediction with the at least one other prediction. 
     
     
       18. The computing device of  claim 15 , wherein the at least one prediction is generated based on at least one learning model that is employed by the prediction engine. 
     
     
       19. The computing device of  claim 15 , wherein the plurality of prediction categories include:
 activations and deactivations of software applications executing on the computing device, 
 contacts known to the computing device, 
 Global Positioning System (GPS) information available to the computing device, 
 notifications processed by the computing device, and 
 physical input made to the computing device. 
 
     
     
       20. The computing device of  claim 15 , wherein the at least one processor further causes the computing device to perform steps that include, subsequent to the prediction center providing the aggregated prediction to the software application:
 receiving, from the prediction center, feedback information that indicates an accuracy of the prediction; and 
 adjusting at least one learning model in accordance with the feedback information to improve the accuracy of subsequent predictions that are produced by the prediction engine.

Description:
CROSS-REFERENCE TO RELATED APPLICATIONS 
     The present application is a continuation of U.S. application Ser. No. 14/866,786, filed Sep. 25, 2015, entitled “SYSTEMS AND METHODS FOR PROVIDING PREDICTIONS TO APPLICATIONS EXECUTING ON A COMPUTING DEVICE,” set to issue Jul. 9, 2019 as U.S. Pat. No. 10,346,441, which claims the benefit of U.S. Provisional Application No. 62/172,029, entitled “SYSTEMS AND METHODS FOR PROVIDING PREDICTIONS TO APPLICATIONS EXECUTING ON A COMPUTING DEVICE,” filed Jun. 5, 2015, the contents of all of which are incorporated by reference herein in their entirety for all purposes. 
    
    
     FIELD 
     The described embodiments set forth a technique for providing predictions to applications executing on a computing device in order to improve overall user experience and performance of the computing device. 
     BACKGROUND 
     Recent years have shown a widespread consumer adoption of mobile computing devices (e.g., smartphones and tablets). A noticeable difference between mobile computing devices and traditional computing devices (e.g., desktop computers) is that mobile computing devices tend to be consistently used throughout the day to perform a variety of functions that are highly personalized to their users. Such functions can include, for example, sending and receiving messages (e.g., emails, chats, etc.), browsing the web, listening to music, taking photos, and so on. Notably, a user&#39;s interaction with his or her mobile computing device can, at least in some areas, conform to a strong and reliable pattern of behavior. For example, a user can typically access a different subset of applications at different times throughout the day, communicate with a different subset of individuals at different times throughout the day, and the like. 
     In some cases, these behavioral patterns can establish opportunities to enhance both the user&#39;s experience and the overall performance of the mobile computing device. For example, if a user&#39;s pattern of behavior indicates that he or she contacts the same individual at around the same time each day, e.g., when leaving his or her place of work in, it can be desirable for the mobile computing device to promote the individual within a user interface (UI) of a phone application that the user accesses to place phone calls using his or her mobile computing device. For understandable reasons, this functionality can substantially improve the user&#39;s overall satisfaction with his or her mobile computing device, especially when various software applications that are accessed by the user are configured to provide meaningful suggestions that properly anticipate the user&#39;s behavior and reduce the amount of input that the user is required to provide to access the functionality that he or she is seeking. 
     Notably, conventional techniques for attempting to predict a user&#39;s behavior continue to suffer from various issues that can degrade the user&#39;s experience and even degrade the performance of the user&#39;s mobile computing device. More specifically, conventional techniques tend to gather and analyze behavioral data in a disorganized manner, thereby making it difficult to provide meaningful and accurate predictions that can be used to enhance the user&#39;s experience. For example, inaccurately predicting a user&#39;s behavior can cause a mobile computing device to make suggestions to the user that are inaccurate and cumbersome to dismiss. Moreover, conventional techniques often are implemented at layers within an operating system (OS) of the mobile computing device that are difficult to update and that are largely inaccessible to software developers. Consequently, software developers are prevented from experimenting with and providing enhanced prediction techniques that can potentially improve overall accuracy and performance when generating predictions at a mobile computing device. 
     Accordingly, there exists a need for improved methods for gathering and organizing behavioral data in a manner that enables mobile computing devices to provide meaningful predictions to their end users. 
     SUMMARY 
     The embodiments described herein set forth techniques for implementing various “prediction engines” that can be configured to provide different kinds of predictions within a mobile computing device. According to some embodiments, each prediction engine can assign itself as an “expert” on one or more “prediction categories” within the mobile computing device. When a software application issues a request for a prediction for a particular prediction category, and two or more prediction engines respectively respond with predictions, a “prediction center” can be configured to receive and process the predictions prior to responding to the request. Processing the predictions can involve removing duplicate information that exists across the predictions, sorting the predictions in accordance with confidence levels advertised by the prediction engines, and the like. In this manner, the prediction center can distill multiple predictions down into an optimized prediction and provide the optimized prediction to the software application. 
     One embodiment sets forth a method for synchronously providing a prediction to a software application executing on a mobile computing device. Specifically, the method is implemented at a prediction center executing on the mobile computing device, and includes the steps of (1) receiving, from the software application, a request to synchronously provide a prediction for a prediction category, (2) identifying one or more prediction engines that are associated with the prediction category, (3) receiving one or more predictions produced by the one or more prediction engines in accordance with the request, (4) aggregating the one or more predictions to produce the prediction requested by the software application, and (5) providing the prediction to the software application. 
     Another embodiment sets forth a method for asynchronously providing a prediction to a software application executing on a mobile computing device. Specifically, the method is implemented at a prediction center executing on the mobile computing device, and includes the steps of (1) receiving, from the software application, a request to asynchronously provide a prediction for a prediction category, (2) identifying one or more prediction engines that are associated with the prediction category, and (3) notifying each prediction engine of the one or more prediction engines to asynchronously provide one or more predictions in accordance with the request. 
     Yet another embodiment sets forth a mobile computing device configured to generate predictions in accordance with user behavior. Specifically, the mobile computing device is configured to implement (1) a prediction center configured serve as a mediator between one or more prediction engines and one or more software applications, wherein the prediction center manages a plurality of prediction categories, (2) the one or more prediction engines, wherein each prediction engine of the one or more prediction engines serves as an expert on at least one prediction category of the plurality of prediction categories managed by the prediction center, and (3) the one or more software applications, wherein each software application of the one or more software applications is configured to carry out steps that include (i) issuing, to the prediction center, a request for a prediction for a particular prediction category of the plurality of prediction categories, and (ii) receiving the prediction from the prediction center in accordance with the request, wherein the prediction is an aggregation of at least two predictions produced by the prediction engines that serve as an expert on the particular prediction category. 
     Other embodiments include a non-transitory computer readable medium configured to store instructions that, when executed by a processor, cause the processor to implement any of the foregoing techniques set forth herein. 
     This Summary is provided merely for purposes of summarizing some example embodiments so as to provide a basic understanding of some aspects of the subject matter described herein. Accordingly, it will be appreciated that the above-described features are merely examples and should not be construed to narrow the scope or spirit of the subject matter described herein in any way. Other features, aspects, and advantages of the subject matter described herein will become apparent from the following Detailed Description, Figures, and Claims. 
     Other aspects and advantages of the embodiments described herein will become apparent from the following detailed description taken in conjunction with the accompanying drawings which illustrate, by way of example, the principles of the described embodiments. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
       The included drawings are for illustrative purposes and serve only to provide examples of possible structures and arrangements for the disclosed inventive apparatuses and methods for providing wireless computing devices. These drawings in no way limit any changes in form and detail that may be made to the embodiments by one skilled in the art without departing from the spirit and scope of the embodiments. The embodiments will be readily understood by the following detailed description in conjunction with the accompanying drawings, wherein like reference numerals designate like structural elements. 
         FIG.  1    illustrates a block diagram of different components of a mobile computing device configured to implement the various techniques described herein, according to some embodiments. 
         FIG.  2    illustrates a block diagram of a more detailed view of particular components of the mobile computing device illustrated in  FIG.  1   , according to one embodiment. 
         FIG.  3 A  illustrates a method for a high-level initialization and operation of a prediction engine, according to some embodiments. 
         FIG.  3 B  illustrates a method for synchronously providing a prediction at a prediction engine, according to some embodiments. 
         FIG.  3 C  illustrates a method for asynchronously providing a prediction at a prediction engine, according to some embodiments. 
         FIG.  4 A  illustrates a method for a software application requesting to synchronously receive a prediction, according to some embodiments. 
         FIG.  4 B  illustrates a method for a software application registering to asynchronously receive predictions, according to some embodiments. 
         FIG.  5 A  illustrates a method for managing prediction engine registrations at a prediction engine center, according to some embodiments. 
         FIG.  5 B  illustrates a method for synchronously providing predictions to software applications at a prediction engine center, according to some embodiments. 
         FIG.  5 C  illustrates a method for asynchronously providing predictions to software applications at a prediction engine center, according to some embodiments. 
         FIG.  6    illustrates a detailed view of a computing device that can be used to implement the various components described herein, according to some embodiments. 
     
    
    
     DETAILED DESCRIPTION 
     Representative applications of apparatuses and methods according to the presently described embodiments are provided in this section. These examples are being provided solely to add context and aid in the understanding of the described embodiments. It will thus be apparent to one skilled in the art that the presently described embodiments can be practiced without some or all of these specific details. In other instances, well known process steps have not been described in detail in order to avoid unnecessarily obscuring the presently described embodiments. Other applications are possible, such that the following examples should not be taken as limiting. 
     The embodiments described herein set forth techniques for gathering and organizing behavioral data in a manner that enables a mobile computing device to provide meaningful predictions to its end user. According to some embodiments, the mobile computing device can be configured to implement various “prediction engines” that each can be configured to provide different kinds of predictions within the mobile computing device. More specifically, and according to some embodiments, each prediction engine can assign itself as an “expert” on one or more “prediction categories” that can be used to enhance the overall operation of the mobile computing device. Examples of prediction categories can include software applications (e.g., software application usage, activations/deactivations), people (e.g., callers or recipients phone calls, chats, text messages, etc.), geodata (e.g., mobile computing device movement/locales), notifications (e.g., push notification arrivals), physical input (e.g., attaching headphones/power to the mobile computing device), and the like. It is noted that the foregoing prediction categories are merely exemplary and that the embodiments set forth herein can employ any prediction category that the mobile computing device is capable of maintaining. According to some embodiments, a prediction engine can employ learning models that enable the prediction engine to analyze data (e.g., behavioral data associated with a user&#39;s operation of the mobile computing device) and provide predictions in accordance with the data. Although this disclosure primarily discusses prediction engines that are configured to implement learning models, it is noted that any technique for analyzing behavioral data and providing predictions can be employed by the prediction engines described herein. 
     As previously set forth herein, and according to some embodiments, a prediction engine can assign itself as an expert on one or more prediction categories within the mobile computing device. Consequently, in some cases, two or more prediction engines may assign themselves as experts for the same prediction category within the mobile computing device. Accordingly, when a requesting entity—such as a software application—issues a request for a prediction for a prediction category on which two or more prediction engines have assigned themselves as an expert, each prediction engine of the two or more prediction engines will conduct its own analysis (e.g., in accordance with learning models employed by the prediction engine) and generate a prediction (or more) in accordance with the request. In this scenario, at least two or more predictions are generated in response to the request for the prediction, which can establish redundancies and competing predictions that the software application may not be capable of interpreting. 
     Accordingly, the embodiments also set forth a “prediction center” that is configured to serve as a mediator between prediction engines and software applications. According to some embodiments, the prediction center can be configured to serve as a registrar for prediction engines when they initialize and seek to assign themselves as experts for one or more prediction categories. Similarly, and according to some embodiments, the prediction center can also be configured to manage different types of prediction categories within the mobile computing device, such that software applications can query the prediction center to identify categories of predictions that can be provided. In this manner, when a software application issues a request for a prediction for a particular prediction category, and two or more prediction engines respond with their respective prediction(s), the prediction center can be configured to receive and process the predictions prior to responding to the request issued by the software application. Processing the predictions can involve, for example, removing duplicate information that exists across the predictions, applying weights to the predictions in accordance with historical performance (i.e., accuracy) metrics associated with the prediction engines, sorting the predictions in accordance with confidence levels advertised by the prediction engines when generating their predictions, and the like. In this manner, the prediction center can distill multiple predictions down into an optimized prediction and provide the optimized prediction to the software application. Accordingly, this design beneficially simplifies the operating requirements of the software applications (as they do not need to be capable of processing multiple predictions), consolidates the heavy lifting to the prediction center, and enables the software applications to obtain a prediction that represents the input of various prediction engines that have assigned themselves as experts on the prediction category of interest. 
     According to some embodiments, the prediction center can enable a software application to receive predictions in a “synchronous” manner. More specifically, a software application can be configured to issue, to the prediction center, a request that causes the prediction center to interact with one or more prediction engines and provide a somewhat immediate (i.e., synchronous) response/prediction to the software application. This synchronous configuration can be used, for example, when a software application—such as a chat application—is being launched and is seeking to preemptively identify a contact with whom a user of the mobile computing device is most likely to message (e.g., in accordance with a current time of the day). According to other embodiments, the prediction center can enable a software application to receive predictions in an “asynchronous” manner. More specifically, a software application can be configured to issue, to the prediction center, a request that causes the prediction center to notify/configure one or more prediction engines to provide predictions on an as-needed (i.e., asynchronous/triggered) basis. This asynchronous configuration can be used, for example, when a software application—such as an OS kernel configured to activate (i.e., launch) and deactivate (i.e., close) software applications on the mobile computing device—is seeking to reactively load a software application in response to a physical input occurring at the mobile computing device. For example, a prediction engine can determine that a particular music application is manually launched by a user a majority of the time that headphones are plugged into his or her mobile computing device. In turn, the prediction engine can indicate this particular music application to the OS kernel via a prediction when the headphones are connected to the mobile computing device. In turn, the OS kernel can preemptively load the appropriate music application (in accordance with the prediction), which can help improve the user&#39;s experience and enhance the performance of the mobile computing device. 
     Accordingly, the different techniques set forth above enable software applications to interact with the prediction center to receive predictions that potentially can be used to enhance overall user experience. In some cases, it can be valuable for a software application to provide feedback to the prediction center to indicate whether a prediction produced by a prediction engine was accurate. Such feedback can be beneficial, for example, when learning algorithms are implemented by the prediction engines, as the feedback can be used to “train” the learning algorithms and improve the overall accuracy of their predictions. For example, when a prediction engine generates a prediction that a particular action will be taken by a user, and a software application provides feedback that indicates the prediction held true (i.e., the particular action was taken by the user), the prediction engine can increase the confidence level that is advertised when similar and subsequent predictions are produced by the prediction engine. As the confidence level rises, the predictions produced by the prediction engine can take precedence over competing predictions that are produced by other prediction engines (if any). Alternatively, when a prediction engine predicts that the particular action will be taken by the user, and the software application provides feedback that indicates the prediction did not hold true (i.e., another action was taken by the user), the prediction engine can decrease the confidence level that is advertised when similar and subsequent predictions are produced by the prediction engine. As the confidence level falls, the predictions produced by the prediction engine can be outweighed by competing predictions that are produced by the other prediction engines (if any). 
     Additionally, and according to some embodiments, the prediction center/prediction engines can be configured to implement loggers that maintain records of the generated predictions and their corresponding feedback. These records can be beneficial in a variety of manners, e.g., a developer of a prediction engine can receive records from a large number of mobile computing devices, where the records indicate that the prediction engine is continuously generating inaccurate predictions. In turn, the developer of the prediction engine can revisit the configuration of the prediction engine in order to improve its accuracy. Prediction centers across different mobile computing devices can also be configured to exchange information with one another in order to identify high-level trends that are observed and that can be used to enhance overall user experience. For example, prediction centers can identify between one another that when a majority of mobile computing devices enter into a particular geographical area—e.g., a perimeter of a movie theatre—the users of the mobile computing devices manually place their mobile computing devices into a silent mode. In turn, this identification can be used to provide suggestions to users to place their mobile computing devices into the silent mode when entering within the particular geographical area. This identification also can be used to suggest that an automatic rule be set in place where the mobile computing device automatically enters into the silent mode when the mobile computing device enters into the particular geographical area, thereby eliminating the need for the user to have to access his or her mobile computing device and manually place the mobile computing device into the silent mode. 
     In addition to the foregoing techniques, the prediction center can also be configured to implement one or more “filters” that can be utilized to further enhance the manner in which predictions are generated within the mobile computing device. According to some embodiments, the filters can be used to provide additional layers of processing that help reduce or eliminate the occurrence of predictions that, despite being correct and reliable (within the scope of the prediction engines), are in fact impractical and ineffective in real-world scenarios. Consider, for example, a scenario in which a lock screen application on a mobile computing device represents a software application, where the lock screen application displays a static icon for a camera application and a dynamic icon for a software application that is most likely to be accessed by the user (e.g., based on a current time of the day). In this example, the lock screen application can issue, to the prediction center, a request for a prediction associated with the “software applications” prediction category when seeking to identify a software application that should be associated with the dynamic icon displayed within the lock screen application. Consider further that, in this example, a single prediction engine is associated with the “software applications” prediction category, where the single prediction engine determines that the camera application is most likely to be accessed by the user (as it so often is when the lock screen application is displayed). Notably, in this example, this prediction is somewhat meaningless, as it would be wasteful to display two different icons for the same camera application within the lock screen application. Accordingly, a filter can be used to help prevent these scenarios from occurring, e.g., the filter can be configured to remove the camera application from predictions associated with the “software applications” prediction category any time the lock screen application is active on the mobile computing device. 
     Additionally, the prediction center/prediction engines can also be configured to implement one or more caches that can be used to reduce the amount of processing that takes place when generating predictions. According to some embodiments, a prediction, upon generation, can be accompanied by “validity parameters” that indicate when the prediction should be removed from the cache in which the prediction is stored. The validity parameters—also referred to herein as expiration information—can define, for example, time-based expirations, event-based expirations, and the like. In this manner, when a prediction engine frequently receives requests for a prediction for a particular prediction category, the prediction engine can generate and cache the prediction in order to substantially reduce the amount of future processing that would otherwise occur when processing repeated requests for the prediction. It is noted that the prediction center/prediction engines can be configured to cache predictions using a variety of approaches. For example, when available cache memory is limited, the prediction center/prediction engines can be configured to generate predictions a threshold number of times (e.g., within a time window), and, when the threshold is satisfied, transition to caching the prediction and referencing the cache for subsequent requests for the prediction (so long as the expiration information indicates the prediction is valid). 
     In addition, it is noted that the architecture of the prediction center can be configured in a manner that enables the different entities described herein—including prediction engines, prediction categories, filters, loggers, etc.—to function as modular components within the mobile computing device. In one architectural approach, each entity can be configured to implement a set of Application Programming Interface (API) function calls that enable the entity to communicate with the prediction center and provide the different functionalities described herein. According to this architectural approach, for example, an entity can be configured as a self-contained executable that can operate externally to the prediction center and be capable of providing the various functionalities described herein. In another architectural approach, each entity can be configured as a bundle whose format and contents are understood by the prediction center and enable the prediction center to function as a platform for implementing the functionality of the entity. According to this approach, the prediction center can be configured to, for example, parse different file system paths (e.g., when initializing) to identify different bundles that reside within the mobile computing device. In this manner, the bundles can be conveniently added to, updated within, and removed from the file system of the mobile computing device, thereby promoting a modular configuration that can efficiently evolve over time without requiring substantial updates (e.g., operating system upgrades) to the mobile computing device. It is noted that the foregoing architectures are exemplary, and that any architecture can be used that enables the various entities described herein to communicate with one another and provide their different functionalities. 
     Accordingly, the embodiments set forth techniques for gathering and organizing behavioral data in a manner that enables a mobile computing device to provide meaningful predictions to its end user. A more detailed discussion of these techniques is set forth below and described in conjunction with  FIGS.  1 ,  2 ,  3 A- 3 C,  4 A- 4 B,  5 A- 5 C, and  6   , which illustrate detailed diagrams of systems and methods that can be used to implement these techniques. 
       FIG.  1    illustrates a block diagram of different components of a mobile computing device  100  that is configured to implement the various techniques described herein, according to some embodiments. More specifically,  FIG.  1    illustrates a high-level overview of the mobile computing device  100 , which, as shown, is configured to implement a prediction center  102  and various software applications  112 . According to some embodiments, the prediction center  102  and the various software applications  112  can be implemented within an operation system (OS) (not illustrated in  FIG.  1   ) that is configured to execute on the mobile computing device  100 . As also shown in  FIG.  1   , the prediction center  102  can be configured to manage various loggers  105 , various prediction categories  106 , various prediction engines  108 , and various filters  110 . The prediction center  102  can also implement a manager  104  that is configured to serve as a mediator between the prediction engines  108  and the software applications  112 , e.g., the manager  104  can receive predictions (illustrated in  FIG.  1    as predictions  114 ) generated by the prediction engines  108  and forward the predictions  114  to the software applications  112 . The prediction center  102  can also be configured to receive feedback information  116  from software applications  112  and provide the feedback information  116  to the prediction engines  108  so that they can produce more accurate predictions  114  over time. 
     Additionally, and as shown in  FIG.  1   , the mobile computing device  100  can be configured to communicate with one or more servers  140  in order to increase the flexibility and benefits provided by the various techniques described herein. More specifically, the mobile computing device  100  can be configured to receive and process updates  142  (e.g., over the air (OTA) updates) from the server  140 , where each update  142  can be directed toward managing one or more aspects of the prediction center  102  (e.g., installations, updates, and removals of one or more categories  106 , prediction engines  108 , filters  110 , loggers  105 , etc.). For example, an update  142  can include high-level parameters that apply to standard prediction engines  108  that are employed by various mobile computing devices  100 . The servers  140  can provide such an update  142 , for example, in response to analyzing information provided by loggers  105 —which can also provide information the servers  140 —across a large number of mobile computing devices  100 , and determining that one or more aspects of the prediction center  102  can be updated to improve accuracy and or performance. Accordingly, the updates  142  enable the mobile computing device  100  to beneficially receive and implement new functionalities that are established over time, which can improve the user&#39;s overall experience. 
     As also shown in  FIG.  1   , the mobile computing device  100  can be configured to provide backups  144  to the servers  140 . According to some embodiments, a backup  144  can include information associated with one or more of the categories  106 , the prediction engines  108  (and their associated state), the filters  110 , the loggers  105 , and the like, where the backup  144  is securely stored and associated with a user account that is known to the servers  140 . In this manner, the valuable information that is gathered over time and enables the prediction engines  108  to accurately predict the user&#39;s behavior can remain securely backed up. This can be especially beneficial when a user migrates to a newer mobile computing device  100  or acquires a replacement mobile computing device  100 , as the user does not have to start from scratch and retrain the various prediction engines  108  by way of inaccurate predictions  114  and feedback information  116 . 
     Accordingly,  FIG.  1    provides a high-level overview of various components that can be used to implement the techniques set forth herein.  FIG.  2    illustrates a block diagram of a more detailed view  200  of particular components of the mobile computing device  100  of  FIG.  1   , according to one embodiment. As shown in  FIG.  2   , each prediction engine  108  can be configured to include one or more learning models  202 , corresponding state  204 , and a listing of prediction categories  106  on which the prediction engine  108  has assigned itself as an expert. According to some embodiments, the learning models  202  can represent algorithms that are configured to analyze information (e.g., state  204 ) and generate predictions that can enhance a user&#39;s overall experience when operating the mobile computing device  100 . According to some embodiments, the state  204  can be gathered from various sources within the mobile computing device  100 , e.g., feedback information  116  provided by software applications, information gathered by sensors of the mobile computing device  100  (e.g., Global Positioning System (GPS) sensors, microphone sensors, temperature sensors, accelerometer sensors, and so on), information provided by outside sources (e.g., software applications executing on the mobile computing device  100 , such as user applications, OS kernels, daemons, etc.), and the like. 
     As also shown in  FIG.  2   , the manager  104  can be configured to manage various loggers  105 , various prediction categories  106 , various prediction engines  108 , and various filters  110 . As previously set forth above, these entities can be implemented using a variety of architectural approaches, e.g., the entities can be standalone executables that are external to the prediction center  102  and communicate with the manager  104  via API commands, the entities can be bundles that are stored within a file system of the mobile computing device  100  and that are interpretable/implemented by the manager  104 , and the like. As also shown in  FIG.  2   , the manager  104  can implement an aggregator  220  that is configured to consolidate multiple predictions  114  (e.g., when produced by different prediction engines  108 ). Moreover, as shown in  FIG.  2   , the manager  104  can be configured to maintain records of the software applications  112  that interact with the prediction center  102 . As described in greater detail herein, these records can function to associate prediction engines  108  with software applications  112  that register to asynchronously receive predictions from the prediction engines  108 . 
     Additionally, and as shown in  FIG.  2   , the prediction center  102  can be configured to implement a cache  206  that enables the prediction center  102 /prediction engines  108  to cache generated predictions  114  in attempt to increase processing and energy consumption efficiency at the mobile computing device  100 . As shown in  FIG.  2   , the cache  206  can include entries  208 , where each entry  208  includes a prediction  114  as well as expiration information  210  that indicates how long the prediction  114  is considered to be valid. The expiration information  210  can include, for example, time-based expirations, event-based expirations, and the like. In this manner, when a prediction engine  108  frequently receives requests for a prediction  114  for a particular prediction category  106 , the prediction engine  108  can generate and cache the prediction  114  in order to substantially reduce the amount of processing that would otherwise occur at the mobile computing device  100 , thereby enhancing performance. 
     Additionally, the manager  104  implement one or more learning algorithms so that the manager  104  becomes capable of properly “warming” one or more prediction engines  108  in response to particular triggers or events occurring within the mobile computing device  100 . For example, the manager  104  can identify that a particular software application  112 , subsequent to being activated within the mobile computing device  100 , typically issues a request for a prediction  114  (e.g., one minute after activation) for a particular category  106 . In response, the manager  104  can be configured to identify the activation of the particular software application  112 , and, in turn, notify the one or more prediction engines  108  that are assigned as experts on the particular category  106 . In turn, each prediction of the one or more prediction engines  108  can perform an initialization/analysis to any degree that enables the prediction engine  108  to more efficiently provide its corresponding prediction  114  at the time the particular software application  112  actually issues the anticipated request for the prediction  114  for the particular category  106 . 
       FIG.  3 A  illustrates a method  300  for a high-level initialization and operation of a prediction engine  108 , according to some embodiments. As shown in  FIG.  3 A , the method  300  begins at step  302 , where the prediction engine  108  loads one or more learning models  202 . At optional step  304 , the prediction engine  108  loads previously-established state  204  associated with the one or more learning models  202 . According to some embodiments, the previously-established state  204  can be retrieved from any storage resource that is available to the prediction engine  108 , e.g., local non-volatile memory, cloud storage, and the like. At step  306 , the prediction engine  108  issues, to the prediction center  102 , a request to serve as an expert on (and provide predictions  114  for) at least one prediction category  106 . At step  308 , the prediction engine  108  receives a request to synchronously provide predictions  114  or asynchronously provide predictions  114  for the at least one prediction category  106 . At step  310 , the prediction engine  108  asynchronously and/or synchronously provides predictions in accordance with the one or more learning models  202 , where each prediction  114  includes confidence level information. At step  312 , the prediction engine  108  receives feedback information that indicates an accuracy level associated with the provided predictions  114 . Such feedback information  116  can be used to “train” the learning models  202  and improve the overall accuracy of their predictions  114 . For example, when the prediction engine  108  generates a prediction  114  that a particular action will be taken by a user of the mobile computing device  100 , and a software application  112  provides feedback that indicates the prediction  114  held true (i.e., the particular action was taken by the user), the prediction engine  108  can increase the confidence level that is advertised when similar and subsequent predictions  114  are produced by the prediction engine  108 . At step  314 , the prediction engine  108  updates the one or more learning models  202  in accordance with the feedback information. 
       FIG.  3 B  illustrates a method  330  for synchronously providing a prediction  114  at a prediction engine  108 , according to some embodiments. As shown in  FIG.  3 B , the method  330  begins at step  332 , where the prediction engine  108  receives a request to synchronously provide a prediction  114  for a particular prediction category  106 . According to some embodiments, the request can be generated by the prediction center  102  on behalf of a software application  112  that is requesting the prediction  114  for the particular prediction category  106 . Alternatively, the request can be generated by the software application  112  and provided directly to prediction engine  108 . In this manner, the overall involvement of the prediction center  102  can be reduced or even eliminated with respect to the prediction center  102  serving as a mediator between the prediction engine  108  and the software application  112 . At step  334 , the prediction engine  108  identifies at least one learning model  202  that is associated with the particular prediction category  106 . At step  336 , the prediction engine  108  generates, in accordance with the at least one learning model  202 , the prediction  114  for the particular prediction category  106 . At step  338 , the prediction engine  108  associates the prediction  114  with confidence level information. According to some embodiments, the confidence level information can be established by the prediction engine  108  in accordance with one or more learning models  202  that are employed by the prediction engine. For example, when the one or more learning models  202  determine that the state  204  indicates there is a high level of certainty that a particular prediction  114  will align with a user&#39;s response, the prediction engine  108  can assign a corresponding high level of confidence. Alternatively, when the state  204  is not well-defined or when little state  204  is available for processing, the one or more learning models  202  can assign a corresponding low level of confidence to indicate that the user&#39;s response may not align well with the prediction  114 . At step  340 , the prediction engine  108  provides the prediction  114 . More specifically, and depending on the configuration (e.g., as described above in conjunction with step  332 ), the prediction engine  108  can provide the prediction  114  to the prediction center  102  or directly to the software application  112 . In turn, the prediction  114  is aggregated (e.g., by the aggregator  220  when the prediction  114  is provided to the prediction center  102 ) with other predictions  114  (if any) when other prediction engines  108  provide similar predictions  114 . 
       FIG.  3 C  illustrates a method  350  for asynchronously providing a prediction  114  at a prediction engine  108 , according to some embodiments. As shown in  FIG.  3 C , the method  350  begins at step  352 , where the prediction engine  108  receives a request to asynchronously provide a prediction  114  for a particular prediction category  106 . At step  354 , the prediction engine  108  identifies at least one learning model  202  associated with the particular prediction category  106 . At step  356 , the prediction engine  108  identifies at least one trigger associated with the particular prediction category  106  and/or the at least one learning model  202 . At step  358 , the prediction engine  108  determines whether the trigger is activated/occurs. If, at step  358 , the prediction engine  108  determines that the trigger is activated, then the method  350  proceeds to step  360 . Otherwise, the method  350  repeats at step  358  until the trigger is activated/occurs. At step  360 , the prediction engine  108  generates, in accordance with the at least one learning model  202 , the prediction  114  for the particular prediction category  106 . At step  362 , the prediction engine  108  associates the prediction  114  with confidence level information. At step  364 , the prediction engine  108  provides the prediction  114  (e.g., to the prediction center  102  for aggregation). 
       FIG.  4 A  illustrates a method  400  for a software application  112  requesting to synchronously receive a prediction  114 , according to some embodiments. As shown in  FIG.  4 A , the method  400  begins at step  402 , where the software application  112  issues a request for a prediction  114  for a particular prediction category  106 . According to some embodiments, the software application  112  can be configured to issue the request to the prediction center  102 , where, in turn, the prediction center  102  interfaces with the prediction engines  108  that are registered as experts on the particular prediction category  106 . Alternatively, the software application  112  can be configured to issue the request directly to a prediction engine  108 , e.g., when the prediction engine  108  is the sole expert on the particular prediction category  106  within the mobile computing device  100 . At step  404 , the software application  112  synchronously receives a prediction  114  for the particular prediction category  106  in conjunction with the request issued at step  402 . At step  406 , the software application  112  observes behavior (e.g., user behavior) at the mobile computing device  100  to determine whether the prediction  114  is accurate. At step  408 , the software application  112  provides feedback information  116  that indicates an accuracy level associated with the prediction  114 . 
       FIG.  4 B  illustrates a method  450  for a software application  112  registering to asynchronously receive predictions  114 , according to some embodiments. As shown in  FIG.  4 B , the method  450  begins at step  452 , where the software application  112  issues a request to asynchronously receive predictions  114  for a particular prediction category  106 . At step  454 , the software application  112  asynchronously receives a prediction  114  for the particular prediction category  106 . At step  456 , the software application  112  observes behavior (e.g., user behavior) at the mobile computing device  100  to determine whether the prediction  114  is accurate. At step  458 , the software application  112  provides feedback information  116  that indicates an accuracy level associated with the prediction  114 . 
       FIG.  5 A  illustrates a method  500  for managing registrations of prediction engines  108  at the prediction center  102 , according to some embodiments. As shown, the method  500  begins at step  502 , where the manager  104  of the prediction center  102  receives, from a prediction engine  108 , a request to serve as a prediction engine  108  and provide predictions  114  for at least one prediction category  106 . At step  504 , the manager  104  adds the prediction engine  108  to a list of prediction engines  108  assigned to provide predictions  114  for the at least one prediction category  106 . At optional step  506 , the manager  104  assigns a weight to the prediction engine  108  in accordance with a historical performance metric associated with the prediction engine  108 . According to some embodiments, the weight can be derived from one or more learning algorithms that are employed by the manager  104 . In this manner, the weights can dynamically change over time in accordance with the overall correctness of the predictions  114  produced by the prediction engine  108 —which, as previously set forth herein, can be achieved through analyzing feedback information  116 . At optional step  508 , the manager  104  initializes filters  110 , if any, that are associated with the prediction engine  108  and/or the at least one prediction category  106 . At step  510 , the manager  104  updates a configuration of the prediction center  102  to enable software applications  112  to issue requests to synchronously and/or asynchronously receive predictions  114  associated with the at least one prediction category  106 . 
       FIG.  5 B  illustrates a method  550  for synchronously providing predictions  114  to software applications  112  at the prediction center  102 , according to some embodiments. As shown in  FIG.  5 B , the method  550  begins at step  552 , where the manager  104  receives, from a software application  112 , a request to synchronously provide a prediction  114  for a particular prediction category  106 . One example scenario can involve a messaging application activating at the mobile computing device  100  and issuing a request for a prediction  114  for three contacts that are most likely to be addressed by a user operating the messaging application. At step  554 , the manager  104  identifies a list of prediction engines  108  assigned to the particular prediction category  106 . Continuing with the foregoing example scenario, consider further that the two different prediction engines  108  that have registered themselves as experts on the “people” prediction category  106 . At step  556 , the manager  104  queries each prediction engine  108  included in the list of prediction engines  108  for the prediction  114 . 
     At step  558 , the manager  104  receives, from each prediction engine  108  included in the list of prediction engines  108 , a corresponding prediction  114  associated with confidence level information. Continuing the foregoing example scenario, consider further that two prediction engines  108  provide predictions  114  that each include a separate list of three contacts that are most likely to be contacted by the user. For example, a first list can include entries that read “Greg:0.7”, “Amy:0.5”, and “Mom:0.3” (where the name (e.g., “Greg”) represents a predicted individual who will be contacted and the number (e.g., 0.7) that follows the name represents corresponding confidence level that the predicted individual will be contacted), and a second list can include entries that read “Mom:0.7”, “Greg:0.4”, and “Julie:0.2”. At step  560 , the manager  104  updates the confidence level information associated with the predictions  114  in accordance with weights (if any) assigned to the corresponding prediction engines  108 . For example, if the prediction engine  108  that produces the first list has an assigned weight of 0.75 in accordance with consistently poor performance observed by the manager  104  (e.g., via feedback information  116 ), the confidence level information for each entry in the first list would be reduced by 0.75. At step  562 , the manager  104  aggregates (e.g., using the aggregator  220 ) the predictions  114  in accordance with their associated confidence level information. Continuing with the foregoing example—and, assuming that weights are not applied at step  560 —step  562  would involve the manager  104  establishing the following updated list: “Greg:1.1” (i.e., 0.7+0.4=1.1), “Mom:1.0” (i.e., 0.3+0.7=1.0), “Amy:0.5”, and “Julie:0.2”, where the entry for “Julie:0.2” is removed as the messaging application desires to receive a prediction for only three contacts. At step  564 , the manager  104  provides, to the software application  112 , the prediction  114  in accordance with the aggregated predictions  114 —which would include “Greg:1.1”, “Mom:1.0”, and “Amy:0.5”. 
       FIG.  5 C  illustrates a method  570  for asynchronously providing predictions  114  to software applications  112  at the prediction center  102 , according to some embodiments. As shown, the method  570  begins at step  572 , where the manager  104  receives, from a software application  112 , a request to asynchronously receive predictions  114  for a particular prediction category  106 . At step  574 , the manager  104  identifies a list of prediction engines  108  assigned to the particular prediction category  106 . At step  576 , the manager  104  notifies each prediction engine  108  included in the list of prediction engines  108  to asynchronously provide predictions  114  associated with the particular prediction category  106 . At step  578 , the manager  104  receives, from each prediction engine  108  included in the list of prediction engines  108 , a corresponding prediction  114  associated with confidence level information. At step  580 , the manager  104  updates the confidence level information associated with the predictions  114  in accordance with weights (if any) assigned to the corresponding prediction engines  108 . At step  582 , the manager  104  aggregates the predictions  114  in accordance with their associated confidence level information. At step  584 , manager  104  provides, to the software application  112 , the prediction  114  in accordance with the aggregated predictions  114 . 
       FIG.  6    illustrates a detailed view of a computing device  600  that can be used to implement the various components described herein, according to some embodiments. In particular, the detailed view illustrates various components that can be included in the mobile computing device  100  illustrated in  FIG.  1   . As shown in  FIG.  6   , the computing device  600  can include a processor  602  that represents a microprocessor or controller for controlling the overall operation of computing device  600 . The computing device  600  can also include a user input device  608  that allows a user of the computing device  600  to interact with the computing device  600 . For example, the user input device  608  can take a variety of forms, such as a button, keypad, dial, touch screen, audio input interface, visual/image capture input interface, input in the form of sensor data, etc. Still further, the computing device  600  can include a display  610  (screen display) that can be controlled by the processor  602  to display information to the user. A data bus  616  can facilitate data transfer between at least a storage device  640 , the processor  602 , and a controller  613 . The controller  613  can be used to interface with and control different equipment through and equipment control bus  614 . The computing device  600  can also include a network/bus interface  611  that couples to a data link  612 . In the case of a wireless connection, the network/bus interface  611  can include a wireless transceiver. 
     The computing device  600  also include a storage device  640 , which can comprise a single disk or a plurality of disks (e.g., hard drives), and includes a storage management module that manages one or more partitions within the storage device  640 . In some embodiments, the storage device  640  can include flash memory, semiconductor (solid state) memory or the like. The computing device  600  can also include a Random Access Memory (RAM)  620  and a Read-Only Memory (ROM)  622 . The ROM  622  can store programs, utilities or processes to be executed in a non-volatile manner. The RAM  620  can provide volatile data storage, and stores instructions related to the operation of the computing device  600 . 
     The various aspects, embodiments, implementations or features of the described embodiments can be used separately or in any combination. Various aspects of the described embodiments can be implemented by software, hardware or a combination of hardware and software. The described embodiments can also be embodied as computer readable code on a computer readable medium. The computer readable medium is any data storage device that can store data which can thereafter be read by a computer system. Examples of the computer readable medium include read-only memory, random-access memory, CD-ROMs, DVDs, magnetic tape, hard disk drives, solid state drives, and optical data storage devices. The computer readable medium can also be distributed over network-coupled computer systems so that the computer readable code is stored and executed in a distributed fashion. 
     The foregoing description, for purposes of explanation, used specific nomenclature to provide a thorough understanding of the described embodiments. However, it will be apparent to one skilled in the art that the specific details are not required in order to practice the described embodiments. Thus, the foregoing descriptions of specific embodiments are presented for purposes of illustration and description. They are not intended to be exhaustive or to limit the described embodiments to the precise forms disclosed. It will be apparent to one of ordinary skill in the art that many modifications and variations are possible in view of the above teachings.

Metadata:
Filing Date: 20190702
Publication Date: 20230418
Grant Date: 20230418
Priority Date: 20150605
Inventors: LACERDA, JOAO PEDRO
KAPOOR, GAURAV
Assignee: APPLE INC
CPC Classifications: [{"code": "G06F9/453", "inventive": true, "first": false, "tree": "[]"}, {"code": "G06F3/0481", "inventive": true, "first": false, "tree": "[]"}, {"code": "G06F16/90335", "inventive": true, "first": false, "tree": "[]"}, {"code": "G06N20/00", "inventive": true, "first": true, "tree": "[]"}, {"code": "G06F16/285", "inventive": true, "first": false, "tree": "[]"}, {"code": "G06F16/90335", "inventive": true, "first": false, "tree": "[]"}, {"code": "G06N20/00", "inventive": true, "first": false, "tree": "[]"}, {"code": "G06F16/285", "inventive": true, "first": true, "tree": "[]"}, {"code": "G06N20/00", "inventive": true, "first": false, "tree": "[]"}, {"code": "G06F16/285", "inventive": true, "first": true, "tree": "[]"}, {"code": "G06F16/90335", "inventive": true, "first": false, "tree": "[]"}]
Family ID: 57451576