1. A method comprising: providing a data source comprising off-line activity data; using at least one processor, transforming the data in the data source into a network format comprising aggregating agent-object interactions into unique node-link-node tuples that describe the interaction; using at least one processor, aggregating the agent-object interactions into unique node-link-node tuples that describe the interaction; using at least one processor, initializing sum statistics in a quality function comprising a number of interactions between nodes in different classes; using at least one processor, optimizing the assignment of agents into agent classes and objects into object classes as to extremize the quality function until an extremum is reached or maximum allowable computer run time has passed, wherein the optimizing comprises: selecting a subset of nodes randomly from a network; looping over this subset and aggregate the interactions each node in this subset has with nodes in each class; looping over this subset again and for each node in it, calculate a change in quality function if this node were to be moved from its current class to any of the other classes using the information collected in the last step and the sum statistics; looping over this subset again and changing the assignments of nodes into classes as to increase the quality function; and updating the value of the quality function and the sum statistics according to the changes made in a previous looping step; and outputting an assignment of agents/objects into latent classes, either deterministic or probabilistically, onto computer-readable storage.