Double run-length encoding Everyone knows what run-length encoding is. It has been the subject of many code-golf challenges already. We'll be looking at a certain variation.
Example
Normal: 11222222222222222222233333111111111112333322
Run-length: 112(19)3(5)1(11)2333322

The number in parentheses specifies the number of times the previous symbol occurred. In the example, only runs of 5 or more characters were encoded. This is because encoding runs of 4 or less doesn't improve the character count.
Challenge
Write a function/program that implements this variation of run-length encoding, but can also encode runs of two symbols. The runs of two symbols must also be enclosed in parentheses. A group will also be enclosed in parentheses. Your program must accept a string as input, and output the modified string with modifications that shorten the string.
Example
Normal: 111244411144411144411167676767222222277777222222277777123123123123
Double run-length: 1112((444111)(3))67676767((2(7)7(5))(2))123123123123

Notes

111 was not encoded because encoding it (1(3)) is not shorter.
The string 444111 occurs 3 times so it is encoded.
676767 was not encoded because ((67)(4)) is longer than before.
222222277777222222277777 was not encoded as ((222222277777)(2)). Why? Because 222222277777 itself can be reduced to 2(7)7(5).
123123123123 isn't encoded because your program is supposed to handle runs of two symbols, not three.

This is code-golf so shortest code wins. Tie-breaker is early submission.

If I missed anything, or if you are unsure of anything please notify me in the comments.
Retina, 162 bytes
+{`((\d)\2*(?!\2)(\d)\3*|\d)(?&lt;1&gt;\1)+
&lt;&lt;$1&gt;&lt;$#1&gt;&gt;
&lt;&lt;([^&lt;&gt;]{1,7})&gt;&lt;2&gt;&gt;
$1$1
&lt;&lt;([^&lt;&gt;]{1,3})&gt;&lt;3&gt;&gt;
$1$1$1
&lt;&lt;([^&lt;&gt;]{1,2})&gt;&lt;4&gt;&gt;
$1$1$1$1
}`&lt;&lt;(.)&gt;&lt;(\d+)&gt;&gt;
$1($2)
T`&lt;&gt;`()

Try it online!