# are there any alternatives to graph theory?

• I was planning to use a graph theory / page-rank approach to find the most influential person in an organization.

Influential person is someone who drives a lot of activity in the organization. When he assigns a task, most people do it. When he sends a mail, most people reply to him. When he assigns some training, most people do it.

But there is one drawback to using graph theory here. For example, say Person A is very influential, and Person B has just joined an organization and works under A. B puts in a leave request and sends it to A for approval. A approves the leave request. According to graph theory, B is very influential because A responded to B. But this is not correct. This approach would give very bad results.

How can i overcome this limitation? Can anyone suggest an alternative approach?

• I am using number of interactions to calculate an affinity scores between two users. Based on this, I suggest what content should be shown to a user (like FaceBook does). User B responds to User A most of the time. so (B->A) has a high affinity score. So, in user B's newsfeed I intend to show content coming from User A.

Obviously different type of interactions will have different weights. But is there a better way than just counting number of interactions?

If two users A & C have same affinity scores with B, if A is more influential than B, A's content will be shown first to user A.

• Does "User B responds to User B most of the time"? I guess there is a typo.. It has to be "User A responds to User B most of the time"? Commented Dec 22, 2015 at 5:34
• Sounds like you are looking for network centrality measures: en.wikipedia.org/wiki/Centrality Commented Dec 22, 2015 at 6:05

You do not need an alternative to graph theory.. just extend the complexity of your graph. At a minimum label your edges with relationship type. Can you establish a hierarchy within the graph using a "reports to" edge type.

I like neo4j for smaller analysis like this.

If you are actually looking for a full alternative, then consider set theory. Which translates well to SQL.

Either way for what you seem to be after you will need a richer data structure.

• Yes, I have hierarchy data. But I am stressing on just 1 connection coming from a influential person shouldn't make me an influential person. It could just be luck. If someone has considerable no of connections then I am ready to call him an influencer.
– user98374
Commented Dec 22, 2015 at 8:56

Yes, there are other ways to create weights. Have you considered things like:

What percentage of all emails that Person A received were from Person B? What percentage of all emails that Person A received did they reply to? What percentage of the emails that Person B sent were to Person A? And what percentage of all emails that Person B sent were replied to?

You correctly sense that one email from Person B to A that is then replied to by A shouldn't count as a high weighting (i.e. as a 100% response rate). So come up with weights that reflect your insight.

What other pieces of information about Person A and Person B do you know? Is Person A three levels up the hierarchy from Person B, or are they their supervisor or a coworker? Are there standardized titles in the organization, and do some jobs tend to send more emails -- that require responses -- than others?

You say Person B is new, while Person A is well-established. Could you factor in longevity? (Maybe emails sent last month, average number of emails received per month over the last three months, lifetime number of emails sent/received, or something like that?)

Do you know -- or can you determine -- the nature of the email? For example, can you do a little text mining to determine if the email was about Vacation, or scheduling a meeting? Might attachment names/types, or message length tell you something? How about what time of the day the emails were sent, or how quickly they were replied to?

The actual analysis you do in the end is another matter. What algorithm do you use? But the key part of most work is to make sure you have correct data, make sure you have as much data as possible, and then engineer features you will use in your algorithm. In the real world, you rarely feed found data directly into an algorithm.