1.5 Context Inferencer

How to infer and suggest to user or device based on a set of infrastructure contexts and domain contexts so context-aware applications can enable context-aware experiences? How to infer automatically user’s wants based on her location, activities, other users and other devices in the vicinity, personal preferences, etc.?

1.5.1 Problem

Inferencing is a combination of logic and probability. One of the issues that makes inferencing so difficult is, if you have an endless stream of data coming in, you can’t wait to see it all before you commit to some decisions.

 1.5.2 Solution

The solution is to make it more interactive, able to introspect and explain its reasoning. <ContextInferencer>  has to interact with <DomainContextAggregator> and <InfraContextAggregator> patterns to implement the inferencing logic and API to its north-bound applications.

Inferencing is a combination of logic and probability. The former is a decision tree or an analogizer problem and the latter is a Bayseian / Markovian problem.

In certain use cases, only logic can put all the pieces together into a coherent picture. On the other hand, logic cannot deal with incomplete or noisy information, which is pervasive in certain use cases. In such scenarios, probability approach trumps and therefore Bayesian networks come in handy.

Bayesian works on a single table of data, where each column represents a variable and each row represents an instance. It is fine if the table has gaps and measurement errors because we can use probabilistic inference to fill in the holes and average over the errors. But if we have more than one table, Bayesian learning is stuck. That is where logic trumps; in logic we can easily write rules relating to multiple tables and learn from the relevant combinations of tables – but only if the tables do not have any gaps or errors.

 1.5.3 Application

Any enterprise application that creates context-aware experiences for their employees, customers and partners would need to anticipate what their users want and provide interactive digital experiences. The world is not a random jumble of interactions – it has a structure wherein subparts of the world interact mostly with other subparts of the same part. Therefore, the <Context Inferencer> is a handy pattern to enable inferencing.

 1.5.4 Examples / Use-cases

A mobile app “Diet Guru” that contextually helps employees with appropriate food suggestions, based on the café menu and nutrition profiles. Upon selecting the menu items to order, the app automatically pushes the calories of the food items to a health app so the employee can track calories consumed and fitness information all in one place.